<?php
session_start(); // Iniciar sesión para obtener el ID del usuario
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/system_logger.php';

header('Content-Type: application/json');

$logger = SystemLogger::getInstance();

try {
    if (!isset($_SESSION['user_id'])) {
        $logger->warning('Intento de retiro de matrícula sin autenticación', 'IP: ' . ($_SERVER['REMOTE_ADDR'] ?? 'N/A'));
        throw new Exception('No se ha iniciado sesión. Acción no permitida.');
    }

    $input = json_decode(file_get_contents('php://input'), true);
    $matricula_id = intval($input['matricula_id'] ?? 0);
    $fecha_retiro = $input['fecha_retiro'] ?? null;
    $motivo_retiro = trim($input['motivo_retiro'] ?? '');
    $usuario_retiro_id = $_SESSION['user_id'];

    if ($matricula_id <= 0) {
        throw new Exception('ID de matrícula no válido.');
    }
    if (empty($fecha_retiro) || !DateTime::createFromFormat('Y-m-d', $fecha_retiro)) {
        throw new Exception('La fecha de retiro no es válida.');
    }
    if (empty($motivo_retiro)) {
        throw new Exception('El motivo del retiro es obligatorio.');
    }

    // Obtener información del alumno antes del retiro
    $stmt_info = $pdo->prepare('
        SELECT a.run, CONCAT(a.nombre, " ", a.ap_paterno, " ", a.ap_materno) as nombre_completo 
        FROM matriculas m 
        JOIN alumnos a ON m.alumno_id = a.id 
        WHERE m.id = ?
    ');
    $stmt_info->execute([$matricula_id]);
    $alumno_info = $stmt_info->fetch(PDO::FETCH_ASSOC);

    $stmt = $pdo->prepare(
        'UPDATE matriculas SET estado = "RETIRADA", fecha_retiro = ?, motivo_retiro = ?, usuario_retiro_id = ? WHERE id = ?'
    );
    $stmt->execute([$fecha_retiro, $motivo_retiro, $usuario_retiro_id, $matricula_id]);

    if ($stmt->rowCount() > 0) {
        $alumno_nombre = $alumno_info['nombre_completo'] ?? 'N/A';
        $alumno_run = $alumno_info['run'] ?? 'N/A';

        $logger->data('Matrícula retirada', "Alumno: $alumno_nombre (RUN: $alumno_run), Matrícula ID: $matricula_id, Motivo: $motivo_retiro, Fecha: $fecha_retiro");
    }

    echo json_encode(['success' => true]);
} catch (Throwable $e) {
    $logger->error('Error en retiro de matrícula', "Error: " . $e->getMessage() . ", Matrícula ID: " . ($matricula_id ?? 'N/A'));
    http_response_code(400); // Bad Request
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
