<?php

namespace App\Models;

use App\Traits\Auditable;
use Illuminate\Database\Eloquent\Model;

class MovimientoInventario extends Model
{
    use Auditable;

    /**
     * Tabla asociada
     */
    protected $table = 'movimiento_inventario';

    /**
     * Clave primaria
     */
    protected $primaryKey = 'movimiento_id';

    /**
     * Sin timestamps automáticos de Laravel
     */
    public $timestamps = false;

    /**
     * Campos asignables
     */
    protected $fillable = [
        'inventario_id',
        'via_id',
        'fecha',
        'observacion',
        'requiere_rma',
        'estado',
        'usuario_crea',
        'fecha_crea',
        'usuario_modifica',
        'fecha_modifica',
    ];

    /**
     * Casting de atributos
     */
    protected function casts(): array
    {
        return [
            'fecha' => 'datetime',
            'fecha_crea' => 'date',
            'fecha_modifica' => 'date',
            'fecha_elimina' => 'date',
            'requiere_rma' => 'boolean',
            'estado' => 'integer',
        ];
    }

    /**
     * Relación con Inventario
     */
    public function inventario()
    {
        return $this->belongsTo(HardwareInventario::class, 'inventario_id', 'inventario_id');
    }

    /**
     * Relación con Vía
     */
    public function via()
    {
        return $this->belongsTo(ViaSubcentro::class, 'via_id', 'via_id');
    }

    /**
     * Relación con Usuario que registró
     */
    public function usuarioCrea()
    {
        return $this->belongsTo(Usuario::class, 'usuario_crea', 'usu_id');
    }

    /**
     * Scope para ordenar por fecha descendente
     */
    public function scopeRecientes($query)
    {
        return $query->orderBy('fecha', 'desc');
    }

    /**
     * Scope por inventario
     */
    public function scopePorInventario($query, int $inventarioId)
    {
        return $query->where('inventario_id', $inventarioId);
    }

    /**
     * Obtener descripción del estado
     */
    public function getEstadoDescripcionAttribute(): string
    {
        $estados = [
            1 => 'Operativo',
            2 => 'En Revisión',
            3 => 'Inoperativo',
            4 => 'En Reparación',
            5 => 'Baja',
        ];

        return $estados[$this->estado] ?? 'Desconocido';
    }

    /**
     * Obtener clase CSS del estado
     */
    public function getEstadoClaseAttribute(): string
    {
        $clases = [
            1 => 'success',
            2 => 'warning',
            3 => 'danger',
            4 => 'info',
            5 => 'secondary',
        ];

        return $clases[$this->estado] ?? 'secondary';
    }
}
