<?php


/**
 * @property RumahSakitOnlineKetersediaantt[] $ketersediaanTt
 */
class RumahSakitOnline extends \Jaga\Models\BaseModel
{
    public $kode;
    public $nama;
    public $jenis;
    public $kelas;
    public $telepon;
    public $website;
    public $status_blu;
    public $no_surat_ijin_operasional;
    public $tanggal_surat_ijin_operasional;
    public $direktur;
    public $ketersediaan_simrs;
    public $luas_tanah;
    public $luas_bangunan;
    public $kepemilikan;
    public $url_tarif;
    public $status_validasi_tarif;
    public $alamat;
    public $provinsi_id;
    public $provinsi_nama;
    public $kab_kota_id;
    public $kab_kota_nama;
    public $longitude;
    public $latitude;
    public $status_aktivasi;
    public $url_foto_depan;
    public $modified_at;

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("rumah_sakit_online");
        $this->hasMany(
            'kode',
            RumahSakitOnlineKetersediaantt::class,
            'kode_rs',
            [
                "alias" => "ketersediaanTt",
                "params" => [
                    "columns" => "tt, ruang, jumlah, terpakai, kosong, antrian, tgl_update",
                    "order" => "tt, ruang ASC"
                ],
            ]
        );
    }

    public function toArray($columns = null)
    {
        return parent::toArray($columns);
    }

    public function toDetail($client = null)
    {
        $result = $this->toArray();
        $result["tt"] = $this->ketersediaanTt;
        $result["nakes"] = [];
        $result["pelayanan"] = [];
        if ($client) {
            $result["nakes"] = $this->ketersediaanNakes($client);
            $result["pelayanan"] = $this->ketersediaanPelayanan($client);
        }

        return $result;
    }

    private function ketersediaanNakes(RSOnlineClient $client)
    {
        try {
            $nakes = $client->ketersediaanNakes(["kode_rs" => $this->kode, "page" => 1, "limit" => 1000], true);
            return array_key_exists('data', $nakes) ? $nakes["data"] : [];
        } catch (\Exception $e) {
            return  [];
        }
    }

    private function ketersediaanPelayanan(RSOnlineClient $client)
    {
        try {
            $pelayanan = $client->ketersediaanPelayanan(["kode_rs" => $this->kode, "page" => 1, "limit" => 1000], true);
            return array_key_exists('data', $pelayanan) ? $pelayanan["data"] : [];
        } catch (\Exception $e) {
            return [];
        }
    }

    public static function rawToModel($data) {
        $model = new RumahSakitOnline();
        $model->kode = $data["kode"];
        $model->nama = $data["nama"];
        $model->jenis = $data["jenis"];
        $model->kelas = $data["kelas"];
        $model->telepon = $data["telepon"];
        $model->website = $data["website"];
        $model->status_blu = $data["statusBLU"];
        $model->no_surat_ijin_operasional = $data["noSuratIjinOperasional"];
        $model->tanggal_surat_ijin_operasional = self::checkedStringDate($data["tanggalSuratIjinOperasional"]);
        $model->direktur = $data["direktur"];
        $model->ketersediaan_simrs = $data["ketersediaanSIMRS"];
        $model->luas_tanah = $data["luasTanah"];
        $model->luas_bangunan = $data["luasBangunan"];
        $model->kepemilikan = $data["kepemilikan"];
        $model->url_tarif = $data["urlTarif"];
        $model->status_validasi_tarif = $data["statusValidasiTarif"];
        $model->alamat = $data["alamat"];
        $model->provinsi_id = $data["provinsiId"];
        $model->provinsi_nama = $data["provinsiNama"];
        $model->kab_kota_id = $data["kabKotaId"];
        $model->kab_kota_nama = $data["kabKotaNama"];
        $model->longitude = $data["longitude"];
        $model->latitude = $data["latitude"];
        $model->status_aktivasi = $data["statusAktivasi"];
        $model->url_foto_depan = $data["urlFotoDepan"];
        $model->modified_at = self::checkedStringDate($data["modified_at"]);
        return $model;
    }

    public static function explodeStringDate($stringDate) {
        try {
            $explode = explode("-", $stringDate);
            if (count($explode) === 3) {
                $explode[0] = intval($explode[0]);
                $explode[1] = intval($explode[1]);
                $explode[2] = substr($explode[2], 0, 2);
                $explode[2] = intval($explode[2]);
                return $explode;
            } else {
                return null;
            }
        } catch (\Exception $e) {
            return null;
        }
    }

    public static function checkedStringDate($stringDate) {
        $formatted = self::explodeStringDate($stringDate);
        if ($formatted && checkdate($formatted[1], $formatted[2], $formatted[0])) {
            return $stringDate;
        } else {
            return null;
        }
    }
}
