<?php

namespace App\Models;

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

class Calendario extends Model
{
    use HasFactory;

    protected $table = 'calendario';

    protected $fillable = [
        'fecha', 'dia_semana', 'es_festivo', 'descripcion_festivo',
    ];

    protected $casts = [
        'fecha' => 'date',
        'es_festivo' => 'boolean',
    ];

    protected static array $diasSemana = [
        0 => 'Domingo', 1 => 'Lunes', 2 => 'Martes', 3 => 'Miércoles',
        4 => 'Jueves', 5 => 'Viernes', 6 => 'Sábado',
    ];

    public function getNombreDiaAttribute(): string
    {
        return self::$diasSemana[$this->dia_semana] ?? '';
    }

    /**
     * Si el día se cuenta para la bolsa de tiempo (DOM o festivo)
     */
    public function getEsBolsaAttribute(): bool
    {
        return $this->dia_semana === 0 || $this->es_festivo;
    }

    public function scopeFestivoODomingo($query)
    {
        return $query->where(function ($q) {
            $q->where('dia_semana', 0)->orWhere('es_festivo', true);
        });
    }

    /**
     * Festivos colombianos fijos + dominicales
     */
    public static function festivosColombia(int $anio): array
    {
        // Festivos fijos Colombia
        $fijos = [
            "{$anio}-01-01", // Año Nuevo
            "{$anio}-03-19", // San José (traslado lunes)
            "{$anio}-05-01", // Día del Trabajo
            "{$anio}-07-04", // San Pedro y San Pablo (traslado)
            "{$anio}-07-20", // Independencia
            "{$anio}-08-07", // Boyacá
            "{$anio}-08-18", // Asunción (traslado)
            "{$anio}-10-13", // Día de la Raza (traslado)
            "{$anio}-11-03", // Todos los Santos (traslado)
            "{$anio}-11-17", // Independencia Cartagena (traslado)
            "{$anio}-12-08", // Inmaculada Concepción
            "{$anio}-12-25", // Navidad
        ];
        return $fijos;
    }
}
