<?php

class SekolahHelper
{
    public static function updateSekolah($sekolah, $newData)
    {
        if(array_key_exists('npsn', $newData)) $sekolah->npsn = $newData["npsn"];
        //$sekolah->nama = $newData["sekolah"];
        if(array_key_exists('alamat_jalan', $newData)) $sekolah->alamat = $newData["alamat_jalan"];
        if(array_key_exists('telp_sekolah', $newData)) $sekolah->no_telp = $newData["telp_sekolah"];
        if(array_key_exists('email', $newData)) $sekolah->email = trim($newData["email"]);
        if(array_key_exists('kepala_sekolah', $newData)) $sekolah->kepsek = $newData["kepala_sekolah"];
        if(array_key_exists('propinsi', $newData)) $sekolah->provinsi = $newData["propinsi"];
        if(array_key_exists('kabupaten_kota', $newData)) $sekolah->kota_kab = $newData["kabupaten_kota"];
        if(array_key_exists('kecamatan', $newData)) $sekolah->kecamatan = $newData["kecamatan"];
        if(array_key_exists('akreditasi', $newData)) $sekolah->akreditasi = $newData["akreditasi"];
        if(array_key_exists('koordinat_lintang', $newData)) $sekolah->latitude = $newData["koordinat_lintang"];
        if(array_key_exists('koordinat_bujur', $newData)) $sekolah->longitude = $newData["koordinat_bujur"];
        $sekolah->produk_id = "0fd356ad-5b4e-4f77-b7b4-f964be3731a3";
        if(array_key_exists('sekolah_id', $newData)) $sekolah->sekolah_id = $newData["sekolah_id"];
        //$sekolah->bentuk_pendidikan = $newData["bentuk"];
        if(array_key_exists('kurikulum', $newData)) $sekolah->kurikulum = $newData["kurikulum"];
        if(array_key_exists('luas_tanah', $newData)) $sekolah->luas_tanah_milik = $newData["luas_tanah"];
        if(array_key_exists('lab_bahasa', $newData)) $sekolah->lab_bahasa = $newData["lab_bahasa"];
        //$sekolah->lab_biologi = $newData["lab_biologi"];
        //$sekolah->lab_fisika = $newData["lab_fisika"];
        if(array_key_exists('lab_ipa', $newData)) $sekolah->lab_ipa = $newData["lab_ipa"];
        if(array_key_exists('lab_ips', $newData)) $sekolah->lab_ips = $newData["lab_ips"];
        //$sekolah->lab_kimia = $newData["lab_kimia"];
        if(array_key_exists('pd_l', $newData)) $sekolah->pd_laki = $newData["pd_l"];
        if(array_key_exists('pd_p', $newData)) $sekolah->pd_perempuan = $newData["pd_p"];
        if(array_key_exists('ruang_perpustakaan_baik', $newData)) $sekolah->perpus_baik = $newData["ruang_perpustakaan_baik"];
        if(array_key_exists('ruang_perpustakaan_rusak_berat', $newData)) $sekolah->perpus_rusak_berat = $newData["ruang_perpustakaan_rusak_berat"];
        if(array_key_exists('ruang_perpustakaan_rusak_ringan', $newData)) $sekolah->perpus_rusak_ringan = $newData["ruang_perpustakaan_rusak_ringan"];
        if(array_key_exists('ruang_perpustakaan_rusak_sedang', $newData)) $sekolah->perpus_rusak_sedang = $newData["ruang_perpustakaan_rusak_sedang"];
        if(array_key_exists('ruang_kelas_baik', $newData)) $sekolah->rk_baik = $newData["ruang_kelas_baik"];
        if(array_key_exists('ruang_kelas_rusak_ringan', $newData)) $sekolah->rk_rusak_ringan = $newData["ruang_kelas_rusak_ringan"];
        if(array_key_exists('ruang_kelas_rusak_sedang', $newData)) $sekolah->rk_rusak_sedang = $newData["ruang_kelas_rusak_sedang"];
        if(array_key_exists('ruang_kelas_rusak_berat', $newData)) $sekolah->rk_rusak_berat = $newData["ruang_kelas_rusak_berat"];
        if(array_key_exists('rombel', $newData)) $sekolah->rombel = $newData["rombel"];
        if(array_key_exists('sanitasi_guru', $newData)) $sekolah->sanitasi_guru = $newData["sanitasi_guru"];
        if(array_key_exists('sanitasi_siswa', $newData)) $sekolah->sanitasi_siswa = $newData["sanitasi_siswa"];
        if(array_key_exists('guru_kurang_s1', $newData)) $sekolah->guru_belums1 = $newData["guru_kurang_s1"];
        if(array_key_exists('guru_blm_sertifikasi', $newData)) $sekolah->guru_belumsertifikasi = $newData["guru_blm_sertifikasi"];
        if(array_key_exists('guru_gol_1', $newData)) $sekolah->guru_gol1 = $newData["guru_gol_1"];
        if(array_key_exists('guru_gol_2', $newData)) $sekolah->guru_gol2 = $newData["guru_gol_2"];
        if(array_key_exists('guru_gol_3', $newData)) $sekolah->guru_gol3 = $newData["guru_gol_3"];
        if(array_key_exists('guru_gol_4', $newData)) $sekolah->guru_gol4 = $newData["guru_gol_4"];
        if(array_key_exists('guru_gtt', $newData)) $sekolah->guru_gtt = $newData["guru_gtt"];
        //$sekolah->jml_lab = $newData["laboratorium"];
        if(array_key_exists('guru_gty', $newData)) $sekolah->guru_gty = $newData["guru_gty"];
        if(array_key_exists('guru_l', $newData)) $sekolah->guru_laki = $newData["guru_l"];
        if(array_key_exists('guru_p', $newData)) $sekolah->guru_perempuan = $newData["guru_p"];
        if(array_key_exists('guru_pns', $newData)) $sekolah->guru_pns = $newData["guru_pns"];
        if(array_key_exists('guru_s1_lebih', $newData)) $sekolah->guru_s1lebih = $newData["guru_s1_lebih"];
        if(array_key_exists('guru_sertifikasi', $newData)) $sekolah->guru_sertifikasi = $newData["guru_sertifikasi"];
        if(array_key_exists('perpus', $newData)) $sekolah->jml_perpus = $newData["perpus"];
        if(array_key_exists('ruang_kelas', $newData)) $sekolah->jml_rk = $newData["ruang_kelas"];
        if(array_key_exists('waktu_penyelenggaraan', $newData)) $sekolah->waktu_penyelenggaraan = $newData["waktu_penyelenggaraan"];
        if(array_key_exists('internet', $newData)) $sekolah->akses_internet = $newData["internet"];
        if(array_key_exists('semester', $newData)) $sekolah->periode_aktif = $newData["semester"];
        //$sekolah->laboratorium = $newData["laboratorium"];
        //$sekolah->tanggal_update_sekolah = $newData["tanggal_update_sekolah"];
        if(array_key_exists('guru_honor', $newData)) $sekolah->guru_honor = $newData["guru_honor"];
        //$sekolah->data_kosong = $newData["data_kosong"];
        if(array_key_exists('guru_kurang_30_th', $newData)) $sekolah->guru_kurang_30_th = $newData["guru_kurang_30_th"];
        if(array_key_exists('guru_31_35_th', $newData)) $sekolah->guru_31_35_th = $newData["guru_31_35_th"];
        if(array_key_exists('guru_36_40_th', $newData)) $sekolah->guru_36_40_th = $newData["guru_36_40_th"];
        if(array_key_exists('guru_41_45_th', $newData)) $sekolah->guru_41_45_th = $newData["guru_41_45_th"];
        if(array_key_exists('guru_46_50_th', $newData)) $sekolah->guru_46_50_th = $newData["guru_46_50_th"];
        if(array_key_exists('guru_51_55_th', $newData)) $sekolah->guru_51_55_th = $newData["guru_51_55_th"];
        if(array_key_exists('guru_lebih_55_th', $newData)) $sekolah->guru_lebih_55_th = $newData["guru_lebih_55_th"];
        if(array_key_exists('wc_guru_baik', $newData)) $sekolah->sanitasi_guru_baik = $newData["wc_guru_baik"];
        if(array_key_exists('wc_guru_rusak_ringan', $newData)) $sekolah->sanitasi_guru_rusak_ringan = $newData["wc_guru_rusak_ringan"];
        if(array_key_exists('wc_guru_rusak_berat', $newData)) $sekolah->sanitasi_guru_rusak_berat = $newData["wc_guru_rusak_berat"];
        if(array_key_exists('wc_siswa_baik', $newData)) $sekolah->sanitasi_siswa_baik = $newData["wc_siswa_baik"];
        if(array_key_exists('wc_siswa_rusak_sedang', $newData)) $sekolah->sanitasi_siswa_rusak_sedang = $newData["wc_siswa_rusak_sedang"];
        if(array_key_exists('wc_siswa_rusak_berat', $newData)) $sekolah->sanitasi_siswa_rusak_berat = $newData["wc_siswa_rusak_berat"];
        //$sekolah->bentuk = $newData["bentuk"];
        //$sekolah->jenjang_id = self::getAndRegisterJenjangId($newData["bentuk"]);
        $sekolah->updated_at = date('Y-m-d H:i:s');
        //$sekolah->updated_at = 'now()';

        if (empty($sekolah->kecamatan_kode)) {
            $kecamatanKodeRes = Sekolah::find(
                [
                    "columns" => "kecamatan_code",
                    "provinsi = :provinsi: and kota_kab = :kota_kab: and kecamatan = :kecamatan:",
                    "bind" => [
                        "provinsi" => $newData["propinsi"],
                        "kota_kab" => $newData["kabupaten_kota"],
                        "kecamatan" => $newData["kecamatan"]
                    ],
                    "limit" => 1
                ]
            )
                ->toArray();
            if (count($kecamatanKodeRes) > 0) {
                $sekolah->kecamatan_code = $kecamatanKodeRes[0]["kecamatan_code"];
            }
        }
        $res = $sekolah->save();
        if (!$res) {
            if ($sekolah->getMessages()[0]->getField() == "email") {
                $sekolah->email = '';
                $res = $sekolah->save();
            }
            print_r($sekolah->getMessages());
        }
    }

    public static function updateMadrasah($sekolah, $newData, $jenisData)
    {
        if ($jenisData == Sekolah::MADRASAH_JENISDATA_PROFIL) {
            $sekolah->nsm = $newData['nsm'];
            $sekolah->nama = $newData['nama_sekolah'];
            $sekolah->sekolah_id = $newData['sekolah_id'];
            $sekolah->alamat = $newData['alamat_jalan'];
            $sekolah->rt = $newData['rt'];
            $sekolah->rw = $newData['rw'];
            $sekolah->kode_wilayah = $newData['kode_wilayah'];
            $sekolah->desa_kelurahan = $newData['desa_kelurahan'];
            $sekolah->kecamatan = $newData['kecamatan'];
            $sekolah->kota_kab = $newData['kabupaten'];
            $sekolah->provinsi = $newData['provinsi'];
            $sekolah->kode_pos = $newData['kode_pos'];
            $sekolah->latitude = $newData['lintang'];
            $sekolah->longitude = $newData['bujur'];
            $sekolah->kecamatan_kode = $newData['kode_kecamatan'];
            $sekolah->website = $newData['website'];
            $sekolah->email = $newData['email'];
            $sekolah->status_sekolah = $newData['status'];
            $sekolah->akreditasi = $newData['akreditasi'];
            $sekolah->kepsek = $newData['nama_kepala_sekolah'];
            $sekolah->no_telp = $newData['no_hp_kontak'];

            if (empty($sekolah->kecamatan_kode)) {
                $kecamatanKodeRes = Sekolah::find(
                    [
                        "columns" => "kecamatan_code",
                        "provinsi = :provinsi: and kota_kab = :kota_kab: and kecamatan = :kecamatan:",
                        "bind" => [
                            "provinsi" => $newData["propinsi"],
                            "kota_kab" => $newData["kabupaten_kota"],
                            "kecamatan" => $newData["kecamatan"]
                        ],
                        "limit" => 1
                    ]
                )
                    ->toArray();
                if (count($kecamatanKodeRes) > 0) {
                    $sekolah->kecamatan_code = $kecamatanKodeRes[0]["kecamatan_code"];
                }
            }
        } else if ($jenisData == Sekolah::MADRASAH_JENISDATA_SARPRAS) {
            $sekolah->nsm = $newData['nsm'];
            $sekolah->sekolah_id = $newData['sekolah_id'];
            $sekolah->rk_baik = $newData['ruang_kelas_b'];
            $sekolah->rk_rusak_berat =$newData['ruang_kelas_rb'];
            $sekolah->rk_rusak_ringan = $newData['ruang_kelas_rr'];
            $sekolah->rk_rusak_sedang = $newData['ruang_kelas_rs'];
            $sekolah->jml_rk = $newData['ruang_kelas_jml'];
            $sekolah->perpus_baik = $newData['perpus_b'];
            $sekolah->perpus_rusak_ringan = $newData['perpus_rr'];
            $sekolah->perpus_rusak_sedang = $newData['perpus_rs'];
            $sekolah->perpus_rusak_berat = $newData['perpus_rb'];
            $sekolah->jml_perpus = $newData['perpus_jml'];
            $sekolah->lab_fisika = $newData['lab_fis_jml'];
            $sekolah->lab_kimia = $newData['lab_kimia_jml'];
            $sekolah->lab_biologi = $newData['lab_bio_jml'];
            $sekolah->lab_bahasa = $newData['lab_bhs_jml'];
        } else if ($jenisData == Sekolah::MADRASAH_JENISDATA_SANITASI) {
            $sekolah->nsm = $newData['nsm'];
            $sekolah->sekolah_id = $newData['sekolah_id'];
        }

        $sekolah->updated_at = date('Y-m-d H:i:s');
        $res = $sekolah->save();
        if (!$res) {
            if ($sekolah->getMessages()[0]->getField() == "email") {
                $sekolah->email = '';
                $res = $sekolah->save();
            }
            print_r($sekolah->getMessages());
        }
    }

    public static function getAndRegisterJenjangId($input)
    {
        $bentuk = trim($input);
        if (empty($bentuk)) {
            return null;
        }

        $bentuk_key = strtolower($bentuk);

        $jenjang_lookup = [];
        $jenjang_list = Jenjang::find()->toArray();

        foreach ($jenjang_list as $key => $jenjang) {
            $jenjang_lookup[strtolower($jenjang['nama_jenjang'])] = $jenjang['id'];
        }

        $result = array_key_exists($bentuk_key, $jenjang_lookup) ? $jenjang_lookup[$bentuk_key] : null;

        if (empty($result)) {
            $newJenjang = new Jenjang();
            $newJenjang->nama_jenjang = $bentuk;
            $newJenjang->save();

            $result = (int)$newJenjang->id;
            $jenjang_lookup[$key] = $newJenjang->id;
        }

        return $result;
    }

    public static function mapToOldResponse($newResponse)
    {
        $result = $newResponse;
        self::mapKey($result, 'alamat_jalan', 'alamat');
        self::mapKey($result, 'email_sekolah', 'email');
        self::mapKey($result, 'guru_belum_sertifikasi', 'guru_belumsertifikasi');
        self::mapKey($result, 'guru_gol_1', 'guru_gol1');
        self::mapKey($result, 'guru_gol_2', 'guru_gol2');
        self::mapKey($result, 'guru_gol_3', 'guru_gol3');
        self::mapKey($result, 'guru_gol_4', 'guru_gol4');
        self::mapKey($result, 'guru_kurang_s1', 'guru_belums1');
        self::mapKey($result, 'guru_l', 'guru_laki');
        self::mapKey($result, 'guru_p', 'guru_perempuan');
        self::mapKey($result, 'guru_s1_lebih', 'guru_s1lebih');
        self::mapKey($result, 'internet', 'akses_internet');
        self::mapKey($result, 'kabupaten_kota', 'kota_kab');
        self::mapKey($result, 'kepala_sekolah', 'kepsek');
        self::mapKey($result, 'koordinat_bujur', 'longitude');
        self::mapKey($result, 'koordinat_lintang', 'latitude');
        self::mapKey($result, 'luas_tanah', 'luas_tanah_milik');
        self::mapKey($result, 'pd_l', 'pd_laki');
        self::mapKey($result, 'pd_p', 'pd_perempuan');
        self::mapKey($result, 'perpus', 'jml_perpus');
        self::mapKey($result, 'propinsi', 'provinsi');
        self::mapKey($result, 'ruang_kelas', 'jml_rk');
        self::mapKey($result, 'ruang_kelas_baik', 'rk_baik');
        self::mapKey($result, 'ruang_kelas_rsk_berat', 'rk_rusak_berat');
        self::mapKey($result, 'ruang_kelas_rsk_ringan', 'rk_rusak_ringan');
        self::mapKey($result, 'ruang_kelas_rsk_sedang', 'rk_rusak_sedang');
        self::mapKey($result, 'sekolah', 'nama');
        self::mapKey($result, 'telp_sekolah', 'no_telp');
        self::mapKey($result, 'ruang_perpus_baik', 'perpus_baik');
        self::mapKey($result, 'ruang_perpus_rsk_berat', 'perpus_rusak_berat');
        self::mapKey($result, 'ruang_perpus_rsk_ringan', 'perpus_rusak_ringan');
        self::mapKey($result, 'ruang_perpus_rsk_sedang', 'perpus_rusak_sedang');

        return $result;
    }

    private static function mapKey(&$array, $sourceKey, $targetKey)
    {
        if (array_key_exists($sourceKey, $array)) {
            $array[$targetKey] = $array[$sourceKey];
            unset($array[$sourceKey]);
        }
    }
}
