<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    protected $table = 'users';

    // 💡 BERITAHU LARAVEL BAHWA PRIMARY KEY-NYA ADALAH id_user (BUKAN id)
    protected $primaryKey = 'id_user';

    protected $fillable = [
        'nama_user',
        'username',
        'email',
        'password',
        'int_role',
        'jabatan',
        'alamat',
        'no_hp',
        'id_masjid',
        'id_wilayah',
        'status_aktif'
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    // ==========================================
    // RELASI
    // ==========================================

    // User milik satu Masjid
    public function masjid()
    {
        return $this->belongsTo(Masjid::class, 'id_masjid', 'id_masjid');
    }

    // User milik satu Wilayah (khusus RT)
    public function wilayah()
    {
        return $this->belongsTo(Wilayah::class, 'id_wilayah', 'id_wilayah');
    }

    // User sebagai petugas yang menerima zakat
    public function penerimaanZakats()
    {
        return $this->hasMany(PenerimaanZakat::class, 'petugas_id', 'id_user');
    }

    // User sebagai petugas yang mendistribusikan zakat
    public function distribusiZakats()
    {
        return $this->hasMany(DistribusiZakat::class, 'petugas_id', 'id_user');
    }

    // User sebagai petugas yang mengupdate riwayat mustahik
    public function mustahikHistories()
    {
        return $this->hasMany(MustahikHistory::class, 'diupdate_oleh', 'id_user');
    }

    /**
     * HasMany: Satu User bisa mengajukan BANYAK pengajuan masjid.
     * Parameter: (Model, foreign_key_di_tabel_pengajuan, primary_key_di_tabel_users)
     */
    public function pengajuanMasjids(): \Illuminate\Database\Eloquent\Relations\HasMany
    {
        return $this->hasMany(PengajuanMasjid::class, 'user_id', 'id_user');
    }
}