<?php
// Script para actualizar el campo fecha en DetalleHorariosSemana para registros antiguos
// Ajusta el nombre de la tabla de quincenas si es necesario


require_once __DIR__ . '/../backend/config/database.php';
// Usar la clase Database del proyecto
$db = new Database();
try {
    $conn = $db->connect();
} catch (Exception $e) {
    die($e->getMessage());
}

function getFechasQuincena($conn, $id_quincena) {
    $sql = "SELECT fecha_inicio, fecha_fin FROM Quincenas WHERE id_quincena = ?";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$id_quincena]);
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

$dias = ['Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo'];


// JOIN para obtener id_quincena desde HorariosAsignados
$sql = "SELECT d.id_detalle, d.id_horario, h.id_quincena, d.semana, d.dia_semana
        FROM DetalleHorariosSemana d
        JOIN HorariosAsignados h ON d.id_horario = h.id_horario
        WHERE d.fecha IS NULL OR d.fecha = ''";
$stmt = $conn->query($sql);
$registros = $stmt->fetchAll(PDO::FETCH_ASSOC);


$actualizados = 0;
$horariosActualizados = 0;
foreach ($registros as $i => $row) {
    $fechasQ = getFechasQuincena($conn, $row['id_quincena']);
    if (!$fechasQ) continue;

    // Actualizar fecha en DetalleHorariosSemana
    $fechaInicio = new DateTime($fechasQ['fecha_inicio']);
    while ($fechaInicio->format('N') != 1) {
        $fechaInicio->modify('-1 day');
    }
    $offset = ($row['semana'] - 1) * 7 + array_search($row['dia_semana'], $dias);
    $fecha = clone $fechaInicio;
    $fecha->modify("+{$offset} day");
    $fechaStr = $fecha->format('Y-m-d');

    $update = $conn->prepare("UPDATE DetalleHorariosSemana SET fecha = ? WHERE id_detalle = ?");
    $update->execute([$fechaStr, $row['id_detalle']]);
    $actualizados++;

    // Mensaje de avance cada 50 registros
    if ($actualizados % 50 === 0) {
        echo "Procesados $actualizados registros en DetalleHorariosSemana...\n";
        flush();
    }

    // Actualizar fecha_inicio y fecha_fin en HorariosAsignados si están vacíos o nulos
    $sqlCheck = "SELECT fecha_inicio, fecha_fin FROM HorariosAsignados WHERE id_horario = ?";
    $stmtCheck = $conn->prepare($sqlCheck);
    $stmtCheck->execute([$row['id_horario']]);
    $horario = $stmtCheck->fetch(PDO::FETCH_ASSOC);
    if ($horario && (empty($horario['fecha_inicio']) || empty($horario['fecha_fin']))) {
        $sqlUpdateH = "UPDATE HorariosAsignados SET fecha_inicio = ?, fecha_fin = ? WHERE id_horario = ?";
        $stmtUpdateH = $conn->prepare($sqlUpdateH);
        $stmtUpdateH->execute([$fechasQ['fecha_inicio'], $fechasQ['fecha_fin'], $row['id_horario']]);
        $horariosActualizados++;
    }
}

// --- NUEVO: Actualizar todos los HorariosAsignados con fecha_inicio o fecha_fin vacíos o null ---
$sqlHorarios = "SELECT id_horario, id_quincena FROM HorariosAsignados WHERE fecha_inicio IS NULL OR fecha_inicio = '' OR fecha_fin IS NULL OR fecha_fin = ''";
$stmtHorarios = $conn->query($sqlHorarios);
$horariosFaltantes = $stmtHorarios->fetchAll(PDO::FETCH_ASSOC);
$horariosActualizadosGlobal = 0;
foreach ($horariosFaltantes as $h) {
    $fechasQ = getFechasQuincena($conn, $h['id_quincena']);
    if ($fechasQ && !empty($fechasQ['fecha_inicio']) && !empty($fechasQ['fecha_fin'])) {
        $sqlUpdateH = "UPDATE HorariosAsignados SET fecha_inicio = ?, fecha_fin = ? WHERE id_horario = ?";
        $stmtUpdateH = $conn->prepare($sqlUpdateH);
        $stmtUpdateH->execute([$fechasQ['fecha_inicio'], $fechasQ['fecha_fin'], $h['id_horario']]);
        $horariosActualizadosGlobal++;
    }
}

echo "Actualización completada. Registros actualizados en DetalleHorariosSemana: $actualizados\n";
echo "Registros actualizados en HorariosAsignados (por detalles): $horariosActualizados\n";
echo "Registros actualizados en HorariosAsignados (global): $horariosActualizadosGlobal\n";
