<?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';
$orden_direccion = $_GET['orden_direccion'] ?? 'DESC';

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

$campos_validos = ['fecha', 'motivo', 'funcionario', 'apoderado_nombre_completo'];
if (!in_array($orden_campo, $campos_validos)) {
    $orden_campo = 'fecha';
}

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

$orden_sql = '';
switch ($orden_campo) {
    case 'fecha':
        $orden_sql = "l.fecha {$orden_direccion}, l.hora {$orden_direccion}";
        break;
    case 'motivo':
        $orden_sql = "l.motivo {$orden_direccion}, l.fecha DESC";
        break;
    case 'funcionario':
        $orden_sql = "COALESCE(u.usuario, 'Usuario no encontrado') {$orden_direccion}, l.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}, l.fecha DESC";
        break;
    default:
        $orden_sql = "l.fecha DESC, l.hora DESC";
}

try {
    $sql = "
        SELECT 
            l.id, 
            l.fecha, 
            l.hora,
            l.motivo, 
            l.familiar_id,
            l.usuario_modificacion,
            l.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,
            f.telefono, f.telefono2,
            COALESCE(u.usuario, 'Usuario no encontrado') AS funcionario
        FROM convivencia_llamadas l
        LEFT JOIN familiares f ON l.familiar_id = f.id
        LEFT JOIN usuarios u ON l.usuario_registro = u.id
        LEFT JOIN usuarios um ON l.usuario_modificacion = um.id
        WHERE l.alumno_id = :alumno_id
        ORDER BY {$orden_sql}
    ";
    $stmt = $pdo->prepare($sql);
    $stmt->bindValue(':alumno_id', $alumno_id, PDO::PARAM_INT);
    $stmt->execute();
    $llamadas = $stmt->fetchAll(PDO::FETCH_ASSOC);

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