<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Auth;

class Penduduk extends Model
{
    use HasFactory;

    protected $table = 'penduduk';

    protected $fillable = [
        'nik',
        'nama',
        'tempat_lahir',
        'tanggal_lahir',
        'jenis_kelamin',
        'alamat',
        'dusun_id',
        'sub_dusun_id',
        'rt',
        'rw',
        'agama',
        'perkawinan',
        'pekerjaan',
        'status_penduduk',
        'is_baby',
        'is_ignore',
    ];

    /**
     * Get the dusun that owns the Penduduk
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function dusun(): BelongsTo
    {
        return $this->belongsTo(Dusun::class);
    }

    /**
     * Get the kartuKeluarga that owns the Penduduk (sebagai kepala keluarga)
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function kartuKeluargaSebagaiKepala(): HasMany
    {
        return $this->hasMany(KartuKeluarga::class, 'kepala_keluarga_id');
    }

    public function kelahiran() // Jika satu penduduk hanya terkait dengan satu record kelahiran (saat lahir)
    {
        return $this->hasOne(Kelahiran::class, 'penduduk_id');
    }
    
    /**
     * Get all of the anggotaKeluarga for the Penduduk
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function anggotaKeluarga(): HasMany
    {
        return $this->hasMany(AnggotaKartuKeluarga::class, 'penduduk_id');
    }

    /**
     * Get the kematian associated with the Penduduk
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function kematian()
    {
        return $this->hasOne(Kematian::class);
    }

    // di App\Models\Penduduk.php
    public function scopeFilterDusun($query)
    {
        if (Auth::check() && Auth::user()->role === 'admin_dusun') {
            $query->where('dusun_id', Auth::user()->dusun_id);
        }
        return $query;
    }


    /**
     * Get the pindah associated with the Penduduk
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function pindah()
    {
        return $this->hasOne(Pindah::class);
    }

    // Relasi ke model Dusun
    public function subDusun()
    {
        return $this->belongsTo(Dusun::class, 'sub_dusun_id');
    }
}