<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class SuratPengantarPerkawinan extends Model
{
    use HasFactory;

    protected $table = 'surat_pengantar_perkawinan';

    protected $fillable = [
        'nama_pria',
        'nik_pria',
        'tempat_lahir_pria',
        'tanggal_lahir_pria',
        'agama_pria',
        'pekerjaan_pria',
        'alamat_pria',
        'status_perkawinan_pria',
        'nama_ayah_pria',
        'nama_ibu_pria',

        'nama_wanita',
        'nik_wanita',
        'tempat_lahir_wanita',
        'tanggal_lahir_wanita',
        'agama_wanita',
        'pekerjaan_wanita',
        'alamat_wanita',
        'status_perkawinan_wanita',
        'nama_ayah_wanita',
        'nama_ibu_wanita',

        'tanggal_rencana_nikah',
        'tempat_rencana_nikah',

        'file_n1_path',
        'file_n4_path',
        'file_n5_path',
        'file_n6_path',
        'foto_ktp_pria_path',
        'foto_kk_pria_path',
        'foto_ktp_wanita_path',
        'foto_kk_wanita_path',
        'file_akta_lahir_pria_path',
        'file_akta_lahir_wanita_path',
        'file_sertifikat_bimbingan_perkawinan_path',

        'nomor_surat',
        'tanggal_dikeluarkan',
        'status',
        'file_path',
        'catatan_penolakan',
        'disetujui_oleh',
        'tanggal_disetujui',
    ];

    protected $casts = [
        'tanggal_lahir_pria' => 'date',
        'tanggal_lahir_wanita' => 'date',
        'tanggal_rencana_nikah' => 'date',
        'tanggal_dikeluarkan' => 'date',
        'tanggal_disetujui' => 'datetime',
    ];

    public function disetujuiOleh(): BelongsTo
    {
        return $this->belongsTo(User::class, 'disetujui_oleh');
    }

    /**
     * Hitung umur berdasarkan tanggal lahir.
     * @param string $dobField Nama field tanggal lahir di model.
     * @return int|null Umur dalam tahun atau null jika tanggal lahir tidak ada.
     */
    public function calculateAge($dobField): ?int
    {
        if ($this->{$dobField}) {
            return \Carbon\Carbon::parse($this->{$dobField})->age;
        }
        return null;
    }
}