<?php

namespace Modules\Lpj\Services;

class SurveyorValidateService
{
    /**
     * Validasi data asset
     *
     * @param array $assetData
     * @return string
     */
    public function validateAsset(array $assetData): array
    {
        $invalidFields = [];

        // Validasi data `debitur_perwakilan`
        if (empty($assetData['asset']['debitur_perwakilan'])) {
            $invalidFields[] = 'debitur perwakilan';
        }

        // Validasi data `jenis_asset`
        $jenisAsset = $assetData['asset']['jenis_asset'] ?? [];
        foreach ($jenisAsset as $key => $value) {
            if (empty($key) || empty($value)) {
                $invalidFields[] = "jenis_asset[$key]";
            }
        }

        // Validasi data `alamat`
        $alamat = $assetData['asset']['alamat'] ?? [];
        foreach ($alamat as $key => $alamatData) {
            if (empty($key)) {
                $invalidFields[] = "alamat[$key]";
            }

            foreach ($alamatData as $field => $value) {
                if (empty($value)) {
                    $invalidFields[] = "alamat[$key][$field]";
                }
            }
        }

        // Validasi data `hub_cadeb`
        $hubCadeb = $assetData['asset']['hub_cadeb'] ?? [];
        foreach ($hubCadeb as $key => $value) {
            if (empty($key) || empty($value)) {
                $invalidFields[] = "Hubungan cadeb/debitur dengan Pemilik Jaminan";
            }
        }

        // Validasi data `hub_cadeb_penghuni`
        $hubCadebPenghuni = $assetData['asset']['hub_cadeb_penghuni'] ?? [];
        foreach ($hubCadebPenghuni as $key => $value) {
            if (empty($key) || empty($value)) {
                $invalidFields[] = "Hubungan Cadeb/Debitur dengan Penghuni Jaminan";
            }
        }

        // Validasi data tambahan lainnya
        $fieldsToValidate = [
            'pihak_bank',
            'kordinat_lng',
            'kordinat_lat',
            'nomor_nib',
        ];

        foreach ($fieldsToValidate as $field) {
            if (empty($assetData['asset'][$field])) {
                $invalidFields[] = $field;
            }
        }

        // validasi signature

        $signature = [
            'penilai',
            'cabang',
            'debitur',
        ];
        foreach ($signature as $value) {
            if (empty($assetData['signature'][$value])) {
                $invalidFields[] =  'Tanda tangan' . $value . ' tidak ada';
            }
        }

        // Kembalikan daftar field yang tidak valid
        return $invalidFields;
    }


    public function validateTanah(array $data): array
    {
        $invalidFields = [];

        if (empty($data['tanah']['luas_tanah'])) {
            $invalidFields[] = 'luas tanah';
        }

        if (empty($data['tanah']['hadap_mata_angin'])) {
            $invalidFields[] = 'hadap mata angin';
        }

        // Validasi bentuk tanah
        if (empty($data['tanah']['bentuk_tanah'])) {
            $invalidFields[] = 'bentuk tanah';
        }

        // Validasi kontur tanah
        if (empty($data['tanah']['kontur_tanah'])) {
            $invalidFields[] = 'kontur tanah';
        }

        // Validasi ketinggian tanah
        if (empty($data['tanah']['ketinggian_jalan']) && empty($data['tanah']['ketinggian_lebih_tinggi']) && empty($data['tanah']['ketinggian_lebih_rendah'])) {
            $invalidFields[] = 'ketinggian tanah';
        }

        // Validasi kontur jalan
        if (empty($data['tanah']['kontur_jalan'])) {
            $invalidFields[] = 'kontur jalan';
        }

        // Validasi posisi kavling
        if (empty($data['tanah']['posisi_kavling'])) {
            $invalidFields[] = 'posisi kavling';
        }

        // Validasi tusuk sate
        if (!isset($data['tanah']['tusuk_sate'])) {
            $invalidFields[] = 'tusuk sate';
        }

        // Validasi lockland
        if (!isset($data['tanah']['lockland'])) {
            $invalidFields[] = 'lockland';
        }

        // Validasi kondisi fisik tanah
        if (empty($data['tanah']['kondisi_fisik_tanah'])) {
            $invalidFields[] = 'kondisi fisik tanah';
        }

        return $invalidFields;
    }


    public function validateBangunan(array $data): array
    {
        $invalidFields = [];

        // Validasi luas tanah banguna

        if (empty($data['bangunan']['luas_tanah_bagunan'])) {
            $invalidFields[] = 'luas bangunan';
        }


        // Validasi jenis bangunan
        if (empty($data['bangunan']['jenis_bangunan'])) {
            $invalidFields[] = 'jenis bangunan';
        }

        // Validasi kondisi bangunan
        if (empty($data['bangunan']['kondisi_bangunan'])) {
            $invalidFields[] = 'kondisi bangunan';
        }

        // Validasi sifat bangunan
        if (empty($data['bangunan']['sifat_bangunan'])) {
            $invalidFields[] = 'sifat bangunan';
        }

        // Validasi sifat bangunan input
        if (empty($data['bangunan']['sifat_bangunan_input'])) {
            $invalidFields[] = 'sifat bangunan input';
        }

        // Validasi sarana pelengkap
        if (empty($data['bangunan']['sarana_pelengkap'])) {
            $invalidFields[] = 'sarana pelengkap';
        }

        // Validasi sarana pelengkap input
        if (empty($data['bangunan']['sarana_pelengkap_input'])) {
            $invalidFields[] = 'sarana pelengkap input';
        }

        return $invalidFields;
    }

    public function validateLingkungan(array $data): array
    {
        $invalidFields = [];

        // Validasi jarak jalan utama
        if (empty($data['lingkungan']['jarak_jalan_utama'])) {
            $invalidFields[] = 'jarak jalan utama';
        }

        // Validasi jalan lingkungan
        if (empty($data['lingkungan']['jalan_linkungan'])) {
            $invalidFields[] = 'jalan lingkungan';
        }

        // Validasi jarak CBD point
        if (empty($data['lingkungan']['jarak_cbd_point'])) {
            $invalidFields[] = 'jarak CBD point';
        }

        // Validasi nama CBD point
        if (empty($data['lingkungan']['nama_cbd_point'])) {
            $invalidFields[] = 'nama CBD point';
        }

        // Validasi lebar perkerasan jalan
        if (empty($data['lingkungan']['lebar_perkerasan_jalan'])) {
            $invalidFields[] = 'lebar perkerasan jalan';
        }

        // Validasi perkerasan jalan
        if (empty($data['lingkungan']['perkerasan_jalan'])) {
            $invalidFields[] = 'perkerasan jalan';
        }

        // Validasi lalu lintas
        if (empty($data['lingkungan']['lalu_lintas'])) {
            $invalidFields[] = 'lalu lintas';
        }

        // Validasi golongan masyarakat sekitar
        if (empty($data['lingkungan']['gol_mas_sekitar'])) {
            $invalidFields[] = 'golongan masyarakat sekitar';
        }

        // Validasi tingkat keramaian
        if (empty($data['lingkungan']['tingkat_keramaian'])) {
            $invalidFields[] = 'tingkat keramaian';
        }

        // Validasi terletak di area
        if (empty($data['lingkungan']['terletak_diarea'])) {
            $invalidFields[] = 'terletak di area';
        }

        // Validasi lokasi sekitar
        if (isset($data['lingkungan']['disekitar_lokasi']) && $data['lingkungan']['disekitar_lokasi'] === 'yes') {
            if (empty($data['lingkungan']['kondisi_bagunan_disekitar_lokasi'])) {
                $invalidFields[] = 'kondisi bangunan di sekitar lokasi';
            }

            if (empty($data['lingkungan']['sifat_bagunan_disekitar_lokasi'])) {
                $invalidFields[] = 'sifat bangunan di sekitar lokasi';
            }
        }

        // Validasi dekat makam
        if (isset($data['lingkungan']['dekat_makam']) && $data['lingkungan']['dekat_makam'] === 'yes') {
            if (empty($data['lingkungan']['jarak_makam'])) {
                $invalidFields[] = 'jarak makam';
            }

            if (empty($data['lingkungan']['nama_makam'])) {
                $invalidFields[] = 'nama makam';
            }
        }

        // Validasi dekat TPS
        if (isset($data['lingkungan']['dekat_tps']) && $data['lingkungan']['dekat_tps'] === 'yes') {
            if (empty($data['lingkungan']['jarak_tps'])) {
                $invalidFields[] = 'jarak TPS';
            }

            if (empty($data['lingkungan']['nama_tps'])) {
                $invalidFields[] = 'nama TPS';
            }
        }

        // Validasi fasilitas dekat object
        if (empty($data['lingkungan']['fasilitas_dekat_object'])) {
            $invalidFields[] = 'fasilitas dekat object';
        }

        // Validasi fasilitas dekat object input
        if (empty($data['lingkungan']['fasilitas_dekat_object_input'])) {
            $invalidFields[] = 'fasilitas dekat object input';
        }

        return $invalidFields;
    }


    public function validateFactData(array $data): array
    {
        $invalidFields = [];

        // Validasi fakta_positif dan fakta_negatif
        if (empty($data['fakta']['fakta_positif'])) {
            $invalidFields[] = 'fakta_positif harus diisi';
        }
        if (empty($data['fakta']['fakta_negatif'])) {
            $invalidFields[] = 'fakta_negatif harus diisi';
        }

        // Validasi rute_menuju
        if (empty($data['fakta']['rute_menuju'])) {
            $invalidFields[] = 'rute_menuju harus diisi';
        }

        // Validasi batas_batas dan batas_batas_input
        if (empty($data['fakta']['batas_batas']) && empty($data['fakta']['batas_batas_input'])) {
            $invalidFields[] = 'Batas batas';
        }

        // Validasi kondisi_lingkungan
        if (empty($data['fakta']['kondisi_lingkungan'])) {
            $invalidFields[] = 'kondisi_lingkungan harus diisi';
        }

        return $invalidFields;
    }


    public function validateRapData(array $data): array
    {
        $invalidFields = [];

        // Validasi pengalaman_developer
        if (empty($data['pengalaman_developer'])) {
            $invalidFields[] = 'Pengalaman developer harus diisi';
        }

        // Validasi kondisi_perumahan
        if (empty($data['kondisi_perumahan'])) {
            $invalidFields[] = 'Kondisi perumahan harus diisi';
        }

        // Validasi progres_pembangunan
        if (empty($data['progres_pembangunan'])) {
            $invalidFields[] = 'Progres pembangunan harus diisi';
        }

        // Validasi partisi
        if (isset($data['partisi'])) {
            foreach ($data['partisi'] as $name => $values) {
                if (empty($values['value'])) {
                    $invalidFields[] = "Partisi '{$name}' harus memiliki nilai";
                }
            }
        }

        // Validasi jumlah_unit
        if (empty($data['jumlah_unit'])) {
            $invalidFields[] = 'Jumlah unit harus diisi';
        }

        // Validasi batas_batas_perumahan
        if (empty($data['batas_batas_perumahan'])) {
            $invalidFields[] = 'Batas batas perumahan harus diisi';
        }

        // Validasi fasus_fasum
        if (empty($data['fasus_fasum'])) {
            $invalidFields[] = 'Fasus fasum harus diisi';
        }

        // Validasi harga_unit
        if (empty($data['harga_unit'])) {
            $invalidFields[] = 'Harga unit harus diisi';
        }

        // Validasi target_market
        if (empty($data['target_market'])) {
            $invalidFields[] = 'Target market harus diisi';
        }

        // Validasi kerjasama_dengan_bank
        if (empty($data['kerjasama_dengan_bank'])) {
            $invalidFields[] = 'Kerjasama dengan bank harus diisi';
        }

        // Validasi rute_menuju_lokasi
        if (empty($data['rute_menuju_lokasi'])) {
            $invalidFields[] = 'Rute menuju lokasi harus diisi';
        }

        return $invalidFields;
    }


    public function validateUnitData(array $data): array
{
    $invalidFields = [];

    // Validasi action
    if (empty($data['action'])) {
        $invalidFields[] = 'Action harus diisi';
    }

    // Validasi luas_unit
    if (empty($data['luas_unit'])) {
        $invalidFields[] = 'Luas unit harus diisi';
    }

    // Validasi kondisi_unit
    if (empty($data['kondisi_unit'])) {
        $invalidFields[] = 'Kondisi unit harus diisi';
    }

    // Validasi posisi_unit
    if (empty($data['posisi_unit'])) {
        $invalidFields[] = 'Posisi unit harus diisi';
    }

    // Validasi lantai
    if (empty($data['lantai'])) {
        $invalidFields[] = 'Lantai harus diisi';
    }

    // Validasi view
    if (empty($data['view'])) {
        $invalidFields[] = 'View harus diisi';
    }

    // Validasi bentuk_unit
    if (empty($data['bentuk_unit'])) {
        $invalidFields[] = 'Bentuk unit harus diisi';
    }

    return $invalidFields;
}


}
