<?php
class FechaUtils {
    private $pdo;
    private $config;

    public function __construct($pdo, $config) {
        $this->pdo = $pdo;
        $this->config = $config;
    }

    public function calcularFechasAviso($fecha_vencimiento) {
        $fechas = [
            'primer_aviso' => $this->ajustarFecha(
                date('Y-m-d', strtotime($fecha_vencimiento . ' -' . $this->config['dias_primer_aviso'] . ' days'))
            ),
            'segundo_aviso' => $this->ajustarFecha($fecha_vencimiento),
            'tercer_aviso' => $this->ajustarFecha(
                date('Y-m-d', strtotime($fecha_vencimiento . ' +' . $this->config['dias_tercer_aviso'] . ' days'))
            )
        ];
        return $fechas;
    }

    private function ajustarFecha($fecha) {
        while ($this->esFechaInvalida($fecha)) {
            $fecha = date('Y-m-d', strtotime($fecha . ' +1 day'));
        }
        return $fecha;
    }

    private function esFechaInvalida($fecha) {
        // Verificar si es domingo
        if (date('w', strtotime($fecha)) == 0) {
            return true;
        }

        // Verificar si es feriado
        $stmt = $this->pdo->prepare("SELECT 1 FROM feriados WHERE fecha = ?");
        $stmt->execute([$fecha]);
        return $stmt->fetchColumn() !== false;
    }
}
