<?php

namespace App\Models;

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

class MovimentoChiave extends Model
{
    use HasFactory;

    protected $table = 'movimenti_chiavi';

    protected $fillable = [
        'chiave_id',
        'tipo_movimento',
        'data_movimento',
        'assegnata_da',
        'assegnata_a',
        'motivo',
        'note'
    ];

    protected $casts = [
        'data_movimento' => 'datetime',
        'created_at' => 'datetime',
        'updated_at' => 'datetime'
    ];

    /**
     * Tipi movimento disponibili
     */
    public const TIPI_MOVIMENTO = [
        'assegnazione' => 'Assegnazione',
        'riconsegna' => 'Riconsegna',
        'smarrimento' => 'Smarrimento',
        'sostituzione' => 'Sostituzione'
    ];

    /**
     * Relazione con ChiaveStabile
     */
    public function chiave()
    {
        return $this->belongsTo(ChiaveStabile::class, 'chiave_id');
    }

    /**
     * Accessor per tipo movimento descrizione
     */
    public function getTipoMovimentoDescrizioneAttribute()
    {
        return self::TIPI_MOVIMENTO[$this->tipo_movimento] ?? $this->tipo_movimento;
    }

    /**
     * Accessor per badge class tipo movimento
     */
    public function getTipoMovimentoBadgeClassAttribute()
    {
        return match($this->tipo_movimento) {
            'assegnazione' => 'bg-success',
            'riconsegna' => 'bg-info',
            'smarrimento' => 'bg-danger',
            'sostituzione' => 'bg-warning',
            default => 'bg-secondary'
        };
    }

    /**
     * Scope per tipo movimento
     */
    public function scopePerTipo($query, $tipo)
    {
        return $query->where('tipo_movimento', $tipo);
    }

    /**
     * Scope per periodo
     */
    public function scopePerPeriodo($query, $dataInizio, $dataFine)
    {
        return $query->whereBetween('data_movimento', [$dataInizio, $dataFine]);
    }
}
