<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;

class LelangPersonil extends Model
{
    protected $fillable = [
        'paket_lelang_id',
        'personil_id',
        'posisi_diusulkan',
        'jenjang_minimal',
        'jenjang_personil',
        'kesesuaian_subklasifikasi',
        'skk_aktif',
        'cv_format_lelang',
        'ijazah',
        'ktp',
        'npwp',
        'pengalaman_referensi',
        'surat_kesediaan_personil',
        'surat_kuasa_penggunaan_data',
        'pakta_integritas',
        'bukti_verifikasi_qr_siki',
        'daftar_riwayat_hidup_ttd',
        'link_folder_lelang',
        'link_surat_kesediaan',
        'link_cv_lelang',
        'pic',
        'deadline',
        'catatan',
    ];

    protected $casts = [
        'jenjang_minimal' => 'integer',
        'jenjang_personil' => 'integer',
        'deadline' => 'date',
    ];

    public function paketLelang()
    {
        return $this->belongsTo(PaketLelang::class);
    }

    public function personil()
    {
        return $this->belongsTo(Personil::class);
    }

    protected function kesesuaianJenjang(): Attribute
    {
        return Attribute::make(
            get: function () {
                if (!$this->jenjang_minimal || !$this->jenjang_personil) {
                    return 'Belum Ada';
                }

                if ($this->jenjang_personil >= $this->jenjang_minimal) {
                    return 'Ada';
                } else {
                    return 'Perlu Update';
                }
            }
        );
    }

    protected function persenKelengkapanLelang(): Attribute
    {
        return Attribute::make(
            get: function () {
                $fields = [
                    $this->kesesuaian_jenjang,
                    $this->kesesuaian_subklasifikasi,
                    $this->skk_aktif,
                    $this->cv_format_lelang,
                    $this->ijazah,
                    $this->ktp,
                    $this->npwp,
                    $this->pengalaman_referensi,
                    $this->surat_kesediaan_personil,
                    $this->surat_kuasa_penggunaan_data,
                    $this->pakta_integritas,
                    $this->bukti_verifikasi_qr_siki,
                    $this->daftar_riwayat_hidup_ttd,
                ];

                $validValues = ['Ada', 'Belum Ada', 'Perlu Update', 'Kadaluarsa'];
                $totalTerisi = 0;
                $jumlahAda = 0;

                foreach ($fields as $field) {
                    if (in_array($field, $validValues)) {
                        $totalTerisi++;
                        if ($field === 'Ada') {
                            $jumlahAda++;
                        }
                    }
                }

                return $totalTerisi > 0 ? $jumlahAda / $totalTerisi : 0;
            }
        );
    }

    protected function statusSiapLelang(): Attribute
    {
        return Attribute::make(
            get: function () {
                $persen = $this->persen_kelengkapan_lelang;

                if ($persen == 1) {
                    return 'Siap Lelang';
                } elseif ($persen >= 0.8) {
                    return 'Hampir Siap';
                } else {
                    return 'Belum Lengkap';
                }
            }
        );
    }
}
