<?php
require_once __DIR__ . '/../config/db_auto.php';
session_start();
header('Content-Type: application/json');

$alumno_id = $_GET['alumno_id'] ?? '';
$orden_campo = $_GET['orden_campo'] ?? 'fecha_entrevista'; // Campo por defecto
$orden_direccion = $_GET['orden_direccion'] ?? 'DESC'; // Dirección por defecto

if (!$alumno_id) {
    echo json_encode(['success' => false, 'error' => 'ID de alumno no proporcionado.']);
    exit;
}

try {
    // Whitelist para campos de ordenamiento para prevenir inyección SQL
    $campos_validos = ['fecha_entrevista', 'motivo', 'nombre_entrevistador', 'usuario_modificacion_nombre', 'fecha_modificacion'];
    if (!in_array($orden_campo, $campos_validos)) {
        $orden_campo = 'fecha_entrevista';
    }

    $orden_direccion = strtoupper($orden_direccion);
    if (!in_array($orden_direccion, ['ASC', 'DESC'])) {
        $orden_direccion = 'DESC';
    }

    // Construir la cláusula ORDER BY de forma segura
    $orden_sql = '';
    switch ($orden_campo) {
        case 'nombre_entrevistador':
            $orden_sql = "COALESCE(ur.usuario, 'Z') {$orden_direccion}"; // 'Z' para poner nulos al final
            break;
        case 'usuario_modificacion_nombre':
            $orden_sql = "COALESCE(um.usuario, 'Z') {$orden_direccion}";
            break;
        default:
            $orden_sql = "ea.{$orden_campo} {$orden_direccion}";
    }

    $sql = "SELECT 
        ea.*, 
        ur.usuario AS nombre_entrevistador,
        um.usuario AS usuario_modificacion_nombre
    FROM entrevistas_alumnos ea
    LEFT JOIN usuarios ur ON ea.usuario_id = ur.id
    LEFT JOIN usuarios um ON ea.usuario_modificacion = um.id
    WHERE ea.alumno_id = :alumno_id
    ORDER BY {$orden_sql}";

    $stmt = $pdo->prepare($sql);
    $stmt->bindValue(':alumno_id', $alumno_id, PDO::PARAM_INT);
    $stmt->execute();
    $entrevistas = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($entrevistas as &$entrevista) {
        try {
            if (!empty($entrevista['fecha_entrevista'])) {
                $fecha_dt = new DateTime($entrevista['fecha_entrevista']);
                $entrevista['fecha_entrevista_formato'] = $fecha_dt->format('d/m/Y');
                $entrevista['hora_entrevista_formato'] = $fecha_dt->format('H:i');
                $entrevista['fecha_entrevista_iso'] = $fecha_dt->format('Y-m-d\TH:i');
            } else {
                throw new Exception('Fecha vacía');
            }
        } catch (Exception $e) {
            $entrevista['fecha_entrevista_formato'] = 'Fecha inválida';
            $entrevista['hora_entrevista_formato'] = '';
            $entrevista['fecha_entrevista_iso'] = null;
        }
        if (empty($entrevista['nombre_entrevistador'])) {
            $entrevista['nombre_entrevistador'] = 'Usuario no encontrado';
        }
        // Formatear fecha de modificación para mostrarla
        if (!empty($entrevista['fecha_modificacion'])) {
            try {
                $fecha_mod_dt = new DateTime($entrevista['fecha_modificacion']);
                $entrevista['fecha_modificacion_formato'] = $fecha_mod_dt->format('d/m/Y H:i');
            } catch (Exception $e) {
                $entrevista['fecha_modificacion_formato'] = 'Fecha inválida';
            }
        } else {
            $entrevista['fecha_modificacion_formato'] = '-';
        }
    }

    echo json_encode(['success' => true, 'data' => $entrevistas]);
} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
