<?php
// Actualiza el horario y descansos de un colaborador para una quincena específica
require_once __DIR__ . '/../config/database.php';
header('Content-Type: application/json');

$data = json_decode(file_get_contents('php://input'), true);
// Permitir también datos por POST tradicional (form-data)
if (!$data) {
    $data = $_POST;
}
$curp = isset($data['curp']) ? trim($data['curp']) : null;
$id_quincena = isset($data['id_quincena']) ? intval($data['id_quincena']) : null;
// Permitir horario y descansos como JSON string o array
$horario = isset($data['horario']) ? (is_string($data['horario']) ? json_decode($data['horario'], true) : $data['horario']) : null;
$descansos = isset($data['descansos']) ? (is_string($data['descansos']) ? json_decode($data['descansos'], true) : $data['descansos']) : null;

// Log de depuración
file_put_contents(__DIR__ . '/debug_update_horario_semanal.log', date('c') . " | curp: $curp | id_quincena: $id_quincena | horario: ".json_encode($horario)." | descansos: ".json_encode($descansos)."\n", FILE_APPEND);

if (!$curp || !$id_quincena || !$horario || !$descansos) {
    echo json_encode(['success' => false, 'message' => 'Datos incompletos', 'debug' => [
        'curp' => $curp,
        'id_quincena' => $id_quincena,
        'horario' => $horario,
        'descansos' => $descansos
    ]]);
    exit;
}

try {
    $db = new Database();
    $conn = $db->connect();
    
    // Verificar que la quincena existe
    $stmtQuincena = $conn->prepare('SELECT id_quincena FROM Quincenas WHERE id_quincena = ?');
    $stmtQuincena->execute([$id_quincena]);
    if (!$stmtQuincena->fetch(PDO::FETCH_ASSOC)) {
        echo json_encode(['success' => false, 'message' => 'La quincena seleccionada no existe en la base de datos']);
        exit;
    }
    
    // Buscar id_horario existente
    $stmt = $conn->prepare('SELECT id_horario FROM HorariosAsignados WHERE curp = ? AND id_quincena = ?');
    $stmt->execute([$curp, $id_quincena]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!$row) {
        echo json_encode(['success' => false, 'message' => 'No existe horario para este colaborador y quincena']);
        exit;
    }
    $id_horario = $row['id_horario'];
    // Actualizar DetalleHorariosSemana: eliminar y volver a insertar
    $conn->beginTransaction();
    $conn->prepare('DELETE FROM DetalleHorariosSemana WHERE id_horario = ?')->execute([$id_horario]);
    // Guardar semana y fecha también
    $stmt = $conn->prepare('INSERT INTO DetalleHorariosSemana (id_horario, semana, dia_semana, fecha, hora_entrada, hora_salida) VALUES (?, ?, ?, ?, ?, ?)');
    foreach ($horario as $h) {
        $stmt->execute([
            $id_horario,
            isset($h['semana']) ? $h['semana'] : null,
            $h['dia_semana'],
            isset($h['fecha']) ? $h['fecha'] : null,
            $h['hora_entrada'],
            $h['hora_salida']
        ]);
    }
    // Actualizar DiasDescanso: eliminar y volver a insertar
    $conn->prepare('DELETE FROM DiasDescanso WHERE id_horario = ? AND id_quincena = ?')->execute([$id_horario, $id_quincena]);
    $stmt = $conn->prepare('INSERT INTO DiasDescanso (id_horario, id_quincena, dia_semana, fecha_descanso) VALUES (?, ?, ?, ?)');
    foreach ($descansos as $d) {
        $stmt->execute([$id_horario, $id_quincena, $d['dia_semana'], $d['fecha_descanso']]);
    }
    $conn->commit();
    echo json_encode(['success' => true, 'message' => 'Horario y descansos actualizados correctamente']);
} catch (Exception $e) {
    if ($conn && $conn->inTransaction()) $conn->rollBack();
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
