<?php

namespace App\Models;

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

class PeajeCentro extends Model
{
    use Auditable;

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

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

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

    /**
     * Campos asignables
     */
    protected $fillable = [
        'num_peaje',
        'id_concesion',
        'nombre_centro',
        'estado',
        'mantenimiento',
        'latitud',
        'longitud',
        'frecuencia_mant',
    ];

    /**
     * Casting de atributos
     */
    protected function casts(): array
    {
        return [
            'num_peaje' => 'integer',
            'estado' => 'integer',
            'mantenimiento' => 'boolean',
            'latitud' => 'decimal:8',
            'longitud' => 'decimal:8',
            'frecuencia_mant' => 'integer',
        ];
    }

    /**
     * Relación con Concesión
     */
    public function concesion()
    {
        return $this->belongsTo(Concesion::class, 'id_concesion', 'id_concesion');
    }

    /**
     * Relación con Vías
     */
    public function vias()
    {
        return $this->hasMany(ViaSubcentro::class, 'id_centro', 'id_centro');
    }

    /**
     * Relación con Programaciones
     */
    public function programaciones()
    {
        return $this->hasMany(MantProgramacion::class, 'id_centro', 'id_centro');
    }

    /**
     * Relación con Jefes Operativos
     */
    public function jefesOperativos()
    {
        return $this->hasMany(JefeOperativoPeaje::class, 'id_centro', 'id_centro');
    }

    /**
     * Scope activos
     */
    public function scopeActivos($query)
    {
        return $query->where('estado', 1);
    }

    /**
     * Scope con mantenimiento habilitado
     */
    public function scopeConMantenimiento($query)
    {
        return $query->where('mantenimiento', 1);
    }

    /**
     * Scope por concesión
     */
    public function scopePorConcesion($query, int $concesionId)
    {
        return $query->where('id_concesion', $concesionId);
    }

    /**
     * Obtener nombre completo con concesión
     */
    public function getNombreCompletoAttribute(): string
    {
        $concesion = $this->concesion?->nombre ?? '';
        return "{$concesion} - {$this->nombre_centro}";
    }
}
