<?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'; // Campo por el cual ordenar
$orden_direccion = $_GET['orden_direccion'] ?? 'DESC'; // ASC o DESC

if (!$alumno_id) {
    echo json_encode([]);
    exit;
}

// Validar el campo de ordenamiento para evitar SQL injection
$campos_validos = ['fecha', 'motivo', 'funcionario', 'apoderado_nombre_completo'];
if (!in_array($orden_campo, $campos_validos)) {
    $orden_campo = 'fecha';
}

// Validar la dirección de ordenamiento
$orden_direccion = strtoupper($orden_direccion);
if (!in_array($orden_direccion, ['ASC', 'DESC'])) {
    $orden_direccion = 'DESC';
}

// Construir la cláusula ORDER BY dinámicamente
$orden_sql = '';
switch ($orden_campo) {
    case 'fecha':
        // Ordenar por fecha completa (fecha + hora) para mejor precisión
        $orden_sql = "e.fecha {$orden_direccion}, e.id {$orden_direccion}";
        break;
    case 'motivo':
        $orden_sql = "e.motivo {$orden_direccion}, e.fecha DESC";
        break;
    case 'funcionario':
        $orden_sql = "COALESCE(u.usuario, 'Usuario no encontrado') {$orden_direccion}, e.fecha DESC";
        break;
    case 'apoderado_nombre_completo':
        $orden_sql = "COALESCE(CONCAT_WS(' ', f.ap_paterno, f.ap_materno, ', ', f.nombre), 'Familiar no encontrado') {$orden_direccion}, e.fecha DESC";
        break;
    default:
        $orden_sql = "e.fecha DESC, e.id DESC";
}

try {
    $sql = "
        SELECT 
            e.id, 
            e.fecha, 
            e.motivo, 
            e.familiar_id,
            e.observaciones,
            e.acuerdos_compromisos,
            e.derivacion,
            e.institucion_derivada,
            e.usuario_modificacion,
            e.fecha_modificacion,
            um.usuario AS usuario_modificacion_nombre,
            COALESCE(CONCAT_WS(' ', f.ap_paterno, f.ap_materno, ', ', f.nombre), 'Familiar no encontrado') AS apoderado_nombre_completo,
            COALESCE(u.usuario, 'Usuario no encontrado') AS funcionario
        FROM entrevistas_apoderados e
        LEFT JOIN familiares f ON e.familiar_id = f.id
        LEFT JOIN usuarios u ON e.usuario_registro = u.id
        LEFT JOIN usuarios um ON e.usuario_modificacion = um.id
        WHERE e.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);

    // Formatear fecha y hora por separado para el frontend
    if (is_array($entrevistas)) {
        foreach ($entrevistas as &$entrevista) {
            // Asegurarse de que la fecha no sea nula o '0000-00-00...'
            if (!empty($entrevista['fecha']) && $entrevista['fecha'] !== '0000-00-00 00:00:00') {
                try {
                    $fecha_dt = new DateTime($entrevista['fecha']);
                    $entrevista['fecha_entrevista'] = $fecha_dt->format('Y-m-d');
                    $entrevista['hora_entrevista'] = $fecha_dt->format('H:i');
                } catch (Exception $e) {
                    // Si la fecha es inválida, dejar los campos como nulos
                    $entrevista['fecha_entrevista'] = null;
                    $entrevista['hora_entrevista'] = null;
                }
            } else {
                $entrevista['fecha_entrevista'] = null;
                $entrevista['hora_entrevista'] = null;
            }
        }
    }

    echo json_encode($entrevistas, JSON_INVALID_UTF8_SUBSTITUTE);
} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode(['error' => 'Error en el servidor al listar entrevistas: ' . $e->getMessage()], JSON_INVALID_UTF8_SUBSTITUTE);
}
