<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class LockerRegistrationItem extends Model
{
    protected $table = 'locker_registration_items';

    protected $fillable = [
        'registration_id',
        'locker_id',
        'locker_number',
        'size',
        'type',
        'locker_group',
        'locker_position',
        'start_date',
        'end_date',
        'amount',
        'status',
        'added_at',
        'removed_at'
    ];

    protected $casts = [
        'start_date' => 'date',
        'end_date' => 'date',
        'added_at' => 'datetime',
        'removed_at' => 'datetime',
        'amount' => 'decimal:2'
    ];

    /*
    |--------------------------------------------------------------------------
    | Relationships
    |--------------------------------------------------------------------------
    */

    // 🔗 Belongs to Registration
    public function registration()
    {
        return $this->belongsTo(LockerRegistration::class, 'registration_id');
    }

    // 🔗 Belongs to Locker
    public function locker()
    {
        return $this->belongsTo(Locker::class, 'locker_id');
    }

    /*
    |--------------------------------------------------------------------------
    | Scopes (Very Useful 🔥)
    |--------------------------------------------------------------------------
    */

    // Active lockers
    public function scopeActive($query)
    {
        return $query->where('status', 'active');
    }

    // Removed lockers
    public function scopeRemoved($query)
    {
        return $query->where('status', 'removed');
    }

    // Expired lockers
    public function scopeExpired($query)
    {
        return $query->where('status', 'expired');
    }

    /*
    |--------------------------------------------------------------------------
    | Helper Methods
    |--------------------------------------------------------------------------
    */

    // Check if active
    public function isActive()
    {
        return $this->status === 'active';
    }

    // Check if expired
    public function isExpired()
    {
        return now()->gt($this->end_date);
    }
}
