<?php

namespace App\Models;

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

class CommitteeMember extends Model
{
    use HasFactory;

    protected $fillable = [
        'committee_id',
        'member_id',
        'designation',
        'joining_date',
        'leaving_date',
        'status',
        'created_by'
    ];

    protected $casts = [
        'joining_date' => 'date',
        'leaving_date' => 'date',
    ];

    // রিলেশনশিপ: কমিটি
    public function committee()
    {
        return $this->belongsTo(Committee::class, 'committee_id', 'committee_id');
    }

    // রিলেশনশিপ: সদস্য
    public function member()
    {
        return $this->belongsTo(Member::class, 'member_id', 'member_id');
    }

    // রিলেশনশিপ: সৃষ্টিকর্তা
    public function creator()
    {
        return $this->belongsTo(User::class, 'created_by');
    }

    // পদবি বাংলায়
    public function getDesignationInBanglaAttribute()
    {
        $designations = [
            'সভাপতি' => 'সভাপতি',
            'সম্পাদক' => 'সম্পাদক',
            'কোষাধ্যক্ষ' => 'কোষাধ্যক্ষ',
            'সদস্য' => 'সদস্য',
            'president' => 'সভাপতি',
            'secretary' => 'সম্পাদক',
            'treasurer' => 'কোষাধ্যক্ষ',
            'member' => 'সদস্য'
        ];
        
        return $designations[$this->designation] ?? $this->designation;
    }

    // স্ট্যাটাস বাংলায়
    public function getStatusInBanglaAttribute()
    {
        $statuses = [
            'active' => 'সক্রিয়',
            'former' => 'সাবেক'
        ];
        
        return $statuses[$this->status] ?? $this->status;
    }

    // মেয়াদকাল
    public function getTenureAttribute()
    {
        $joining = $this->joining_date->format('d/m/Y');
        
        if ($this->leaving_date) {
            $leaving = $this->leaving_date->format('d/m/Y');
            return $joining . ' - ' . $leaving;
        }
        
        return $joining . ' - বর্তমান';
    }

    // সক্রিয় কিনা
    public function getIsActiveAttribute()
    {
        return $this->status == 'active' && !$this->leaving_date;
    }

    // কমিটি থেকে বেরিয়ে আসুন
    public function resign($leavingDate = null)
    {
        $this->status = 'former';
        $this->leaving_date = $leavingDate ?? now();
        $this->save();
        
        return $this;
    }
}