<?php
    class PuskesmasClient extends BackgroundBaseClient
    {
        private $key;
        private $obj;
        private $type;

        public function key(string $key) : void{
            $this->key = $key;
        }

        public function value($value) : void{
            $this->obj[$this->key] = $value;
        }

        public function startObject() : void{
            $this->key = null;
            $this->obj = [];
        }

        public function endObject() : void{
            $this->objectsProcessed++;
            if($this->type == 0){
                $this->processDataDasar1();
            }else if( $this->type == 1 ){
                $this->processDataDasar2();
            }else if( $this->type == 7 ){
                $this->processDataDasar7();
            }else if( $this->type == 8 ){
                $this->processDataDasar8();
            }
        }

        public function getDataDasar1(){
            $this->objectsProcessed = 0;
            $this->startTime = microtime(TRUE);
            $this->type = 0;
            $method = "GET";
            $path = "/puskesmas/api/getPkmdatadasar1.php";
            $params = [];

            //region LOG Definition
            $this->setApiName("puskesmas-get_data_dasar_1");
            //endregion

            $result = $this->jsonStream($method, $path, $params, $this);
            $this->endTime = microtime(TRUE);
        }

        private function processDataDasar1(){
            $data = Puskesmas::findFirst(
                [
                    "kode_puskesmas = :kode:",
                    "bind" => [
                        "kode" => $this->obj["kd_puskesmas"]
                    ]
                ]
            );
            if( !$data ){
                $data = new Puskesmas();
            }
            $data->kode_puskesmas = $this->obj["kd_puskesmas"];
            $data->nama_puskesmas = $this->obj["nama_puskesmas"];
            $data->alamat_puskesmas = $this->obj["alamat"];
            $data->kab_kota = $this->obj["kab"];
            $data->provinsi = $this->obj["prop"];
            $data->latitude = $this->obj["lintang"];
            $data->longitude = $this->obj["bujur"];
            $res = $data->save();
            if( !$res )
                print_r($data->getMessages());
            print_r($this->obj);
            $data = null;
        }

        public function getDataDasar2(){
            $this->objectsProcessed = 0;
            $this->startTime = microtime(TRUE);
            $this->type = 1;
            $method = "GET";
            $path = "/puskesmas/api/getPkmdatadasar2.php";
            $params = [];

            //region LOG Definition
            $this->setApiName("puskesmas-get_data_dasar_2");
            //endregion

            $result = $this->jsonStream($method, $path, $params, $this);
            $this->endTime = microtime(TRUE);
        }

        private function processDataDasar2(){
            $data = Puskesmas::findFirst(
                [
                    "kode_puskesmas = :kode:",
                    "bind" => [
                        "kode" => $this->obj["kd_puskesmas"]
                    ]
                ]
            );
            if( $data ){
                $data->jml_tt = (strlen($this->obj["jml_tt_umum"]) > 0?:0)+(strlen($this->obj["jml_tt_salin"]) > 0?:0);
                $data->rawat_inap = $this->obj["jenis"] === "RAWAT INAP"?1:0;
                $res = $data->save();
                if( !$res )
                    print_r($data->getMessages());
                print_r($this->obj);
                $data = null;
            }
        }

        public function getDataDasar7(){
            $this->objectsProcessed = 0;
            $this->startTime = microtime(TRUE);
            $this->type = 7;
            $method = "GET";
            $path = "/puskesmas/api/getPkmdatadasar7.php";
            $params = [];

            //region LOG Definition
            $this->setApiName("puskesmas-get_data_dasar_7");
            //endregion

            $result = $this->jsonStream($method, $path, $params, $this);
            $this->endTime = microtime(TRUE);
        }

        private function processDataDasar7(){
            $data = Puskesmas::findFirst(
                [
                    "kode_puskesmas = :kode:",
                    "bind" => [
                        "kode" => $this->obj["kd_puskesmas"]
                    ]
                ]
            );
            if( $data ){
                $data->jml_posyandu_pramata = strlen($this->obj["jml_posyandu_pratama"]) > 0?:0;
                $data->jml_posyandu_madya = strlen($this->obj["jml_posyandu_madya"]) > 0?:0;
                $data->jml_posyandu_purnama = strlen($this->obj["jml_posyandu_purnama"]) > 0?:0;
                $data->jml_posyandu_mandiri = strlen($this->obj["jml_posyandu_mandiri"]) > 0?:0;
                $data->jml_posyandu = strlen($this->obj["jml_posyandu"]) > 0?:0;
                $res = $data->save();
                if( !$res )
                    print_r($data->getMessages());
                print_r($this->obj);
                $data = null;
            }
        }

        public function getDataDasar8(){
            $this->objectsProcessed = 0;
            $this->startTime = microtime(TRUE);
            $this->type = 8;
            $method = "GET";
            $path = "/puskesmas/api/getPkmdatadasar8.php";
            $params = [];

            //region LOG Definition
            $this->setApiName("puskesmas-get_data_dasar_8");
            //endregion

            $result = $this->jsonStream($method, $path, $params, $this);
            $this->endTime = microtime(TRUE);
        }

        private function processDataDasar8(){
            $data = Puskesmas::findFirst(
                [
                    "kode_puskesmas = :kode:",
                    "bind" => [
                        "kode" => $this->obj["kd_puskesmas"]
                    ]
                ]
            );
            if( $data ){
                $data->jml_dokter_umum = strlen($this->obj["dr_umum"]) > 0?:0;
                $data->jml_dokter_gigi = strlen($this->obj["drg"]) > 0?:0;
                $data->jml_perawat = strlen($this->obj["perawat"]) > 0?:0;
                $data->jml_bidan = strlen($this->obj["bidan"]) > 0?:0;
                $data->jml_farmasi = strlen($this->obj["farmasi"]) > 0?:0;
                $data->jml_kes_masyarakat = strlen($this->obj["kesmas"]) > 0?:0;
                $data->jml_kes_ling = strlen($this->obj["kesling"]) > 0?:0;
                $data->total_tenaga_kerja = strlen($this->obj["jml_tenaga"]) > 0?:0;
                $res = $data->save();
                if( !$res )
                    print_r($data->getMessages());
                print_r($this->obj);
                $data = null;
            }
        }
    }
