<?php
require_once __DIR__ . '/../config/db_auto.php';

// Headers para evitar que el navegador guarde en caché la respuesta de la API.
header('Content-Type: application/json');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');

try {
    // Buscar por IDs
    $q = trim($_GET['q'] ?? '');
    $grado_id = intval($_GET['grado_id'] ?? 0);
    $tipo_ensenanza_id = intval($_GET['tipo_ensenanza_id'] ?? 0);
    $anio_escolar = intval($_GET['anio_escolar'] ?? date('Y'));
    $debug = $_GET['debug'] ?? false;

    $sql = "";
    $params = [];

    // --- LÓGICA DE BÚSQUEDA MEJORADA ---

    // La lógica principal es buscar alumnos PRE-INSCRITOS para el año y grado seleccionados.
    // Si no se selecciona un grado, no se devuelve nada.
    if ($grado_id > 0) {
        $sql = "
            SELECT a.id, a.run, a.nombre, a.ap_paterno, a.ap_materno, g.nombre as grado_nombre, te.nombre as tipo_ensenanza_nombre
            FROM matriculas m
            JOIN alumnos a ON m.alumno_id = a.id
            JOIN grados g ON m.grado_id = g.id
            LEFT JOIN tipo_ensenanza te ON g.tipo_ensenanza_id = te.id
            WHERE m.anio = :anio_escolar 
              AND m.grado_id = :grado_id 
              AND UPPER(m.estado) = 'PRE-INSCRITO'
        ";
        $params = [
            ':grado_id' => $grado_id,
            ':anio_escolar' => $anio_escolar
        ];

        // Si además hay texto de búsqueda, se añade como un filtro adicional.
        if ($q !== '') {
            $sql .= " AND (a.nombre LIKE :q OR a.ap_paterno LIKE :q OR a.ap_materno LIKE :q OR a.run LIKE :q)";
            $params[':q'] = "%$q%";
        }

        $sql .= " ORDER BY a.ap_paterno, a.ap_materno, a.nombre";
    } else {
        // Si no hay ni grado ni texto de búsqueda, devolvemos un array vacío para evitar listar todo.
        echo json_encode([]);
        exit;
    }

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $alumnos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Si el modo debug está activado, devolvemos un objeto JSON completo con toda la información
    // y terminamos la ejecución para no enviar una doble respuesta.
    if ($debug) {
        echo json_encode([
            'alumnos' => $alumnos,
            'debug_info' => [
                'sql' => $sql,
                'params' => $params
            ]
        ]);
        exit;
    }

    // La respuesta normal para el frontend es SIEMPRE un array de alumnos.
    echo json_encode($alumnos);
} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode(['error' => 'Error interno: ' . $e->getMessage(), 'file' => __FILE__, 'line' => __LINE__]);
}
