<?php

namespace App\Models;

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

class Periodo extends Model
{
    use HasFactory;

    protected $fillable = [
        'mes', 'anio', 'fecha_inicio', 'fecha_fin', 'activo', 'cerrado',
    ];

    protected $casts = [
        'fecha_inicio' => 'date',
        'fecha_fin' => 'date',
        'activo' => 'boolean',
        'cerrado' => 'boolean',
    ];

    protected static array $meses = [
        1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
        5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
        9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre',
    ];

    public function hojasTiempo(): HasMany
    {
        return $this->hasMany(HojaTiempo::class);
    }

    public function getNombreMesAttribute(): string
    {
        return self::$meses[$this->mes] ?? '';
    }

    public function getNombreCompletoAttribute(): string
    {
        return $this->nombre_mes . ' ' . $this->anio;
    }

    public static function meses(): array
    {
        return self::$meses;
    }

    public function scopeActivo($query)
    {
        return $query->where('activo', true);
    }

    /**
     * Días hábiles del período (excluye domingos y festivos)
     */
    public function diasHabiles(): int
    {
        return Calendario::whereBetween('fecha', [$this->fecha_inicio, $this->fecha_fin])
            ->where('dia_semana', '!=', 0) // No domingos
            ->where('es_festivo', false)
            ->count();
    }
}
