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

// --- CABECERAS ANTI-CACHÉ ---
// Aseguran que el navegador siempre pida los datos más recientes.
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 {
    $matricula_id_param = intval($_GET['matricula_id'] ?? 0);
    $alumno_id_param = intval($_GET['id'] ?? 0);
    $alumno = null;

    // Validar que al menos un parámetro sea proporcionado
    if ($matricula_id_param === 0 && $alumno_id_param === 0) {
        http_response_code(400);
        echo json_encode(['error' => 'Debe proporcionar matricula_id o id como parámetro']);
        exit;
    }

    if ($matricula_id_param > 0) {
        // --- Flujo de EDICIÓN: Se busca por ID de matrícula ---
        $sql = 'SELECT a.*, m.id as matricula_id, m.fecha_matricula, m.anio as anio_matricula, g.id as grado_id, g.nombre AS grado_nombre, t.nombre AS tipo_ensenanza_nombre
                FROM matriculas m
                LEFT JOIN alumnos a ON m.alumno_id = a.id
                LEFT JOIN grados g ON m.grado_id = g.id
                LEFT JOIN tipo_ensenanza t ON g.tipo_ensenanza_id = t.id
                WHERE m.id = ?';
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$matricula_id_param]);
        $alumno = $stmt->fetch(PDO::FETCH_ASSOC);

        // Verificación de consistencia de datos.
        // Si se encontró la matrícula pero el ID del alumno es nulo, significa que el alumno fue eliminado.
        if ($alumno && is_null($alumno['id'])) {
            http_response_code(404);
            echo json_encode(['error' => 'Error de integridad: La matrícula existe, pero el alumno asociado no fue encontrado.']);
            exit;
        }

        // Si no se encontró la matrícula
        if (!$alumno) {
            http_response_code(404);
            echo json_encode(['error' => 'No se encontró la matrícula solicitada']);
            exit;
        }
    } elseif ($alumno_id_param > 0) {
        // --- Flujo de NUEVA MATRÍCULA: Se busca por ID de alumno ---
        // Esta consulta funciona tanto para alumnos preinscritos como para alumnos con grado asignado
        $sql = 'SELECT a.*, g.nombre AS grado_nombre, t.nombre AS tipo_ensenanza_nombre
                FROM alumnos a
                LEFT JOIN grados g ON a.grado_id = g.id
                LEFT JOIN tipo_ensenanza t ON g.tipo_ensenanza_id = t.id
                WHERE a.id = ?';
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$alumno_id_param]);
        $alumno = $stmt->fetch(PDO::FETCH_ASSOC);

        // Si no se encontró el alumno
        if (!$alumno) {
            http_response_code(404);
            echo json_encode(['error' => 'No se encontró el alumno solicitado']);
            exit;
        }
    }

    // A partir de aquí, el alumno existe y procedemos a obtener datos relacionados
    if ($alumno) {
        $alumno_id = $alumno['id'];

        // Traer datos de salud
        $stmtSalud = $pdo->prepare('SELECT * FROM salud_alumno WHERE alumno_id = ? LIMIT 1');
        $stmtSalud->execute([$alumno_id]);
        $salud = $stmtSalud->fetch(PDO::FETCH_ASSOC);

        // Traer datos sociales
        $stmtSocial = $pdo->prepare('SELECT * FROM social_alumno WHERE alumno_id = ? LIMIT 1');
        $stmtSocial->execute([$alumno_id]);
        $social = $stmtSocial->fetch(PDO::FETCH_ASSOC);

        // Traer familiares asociados y sus roles con parentesco específico
        $stmtFamiliares = $pdo->prepare('SELECT f.*, af.tipo_relacion as rol, 
            af.parentesco_especifico,
            COALESCE(af.parentesco_especifico, f.parentesco) as parentesco_mostrar 
            FROM familiares f 
            JOIN alumno_familiar af ON f.id = af.familiar_id 
            WHERE af.alumno_id = ?');
        $stmtFamiliares->execute([$alumno_id]);
        $familiares_raw = $stmtFamiliares->fetchAll(PDO::FETCH_ASSOC);

        // Agrupar familiares por ID y concatenar roles
        $familiares = [];
        foreach ($familiares_raw as $familiar) {
            $familiar_id = $familiar['id'];
            if (!isset($familiares[$familiar_id])) {
                $familiares[$familiar_id] = $familiar;
                $familiares[$familiar_id]['rol'] = $familiar['rol'];
                // Si no hay parentesco específico, usar el genérico para mostrar en el campo parentesco
                if (!$familiar['parentesco_especifico']) {
                    $familiares[$familiar_id]['parentesco_especifico'] = '';
                }
            } else {
                // Concatenar roles adicionales
                $familiares[$familiar_id]['rol'] .= ', ' . $familiar['rol'];
            }
        }
        $familiares = array_values($familiares); // Convertir a array indexado

        $domicilio = $social['domicilio'] ?? '';

        // Construir respuesta final
        $alumno['salud'] = $salud ?: null;
        $alumno['social'] = $social ?: null;
        $alumno['familiares'] = $familiares ?: [];
        $alumno['domicilio'] = $domicilio;

        $respuesta = $alumno;
        http_response_code(200);
        echo json_encode($respuesta);
        exit;
    }

    // Si por alguna razón llegamos aquí sin alumno (no debería pasar)
    http_response_code(404);
    echo json_encode(['error' => 'No se encontraron datos']);
} catch (PDOException $e) {
    // Error de base de datos
    http_response_code(500);
    echo json_encode([
        'error' => 'Error de base de datos',
        'mensaje' => 'Ocurrió un error al consultar la información. Por favor, intente nuevamente.'
    ]);
    // Registrar el error real en el log del servidor (no mostrarlo al usuario)
    error_log("Error BD en get_alumno_data.php: " . $e->getMessage());
} catch (Exception $e) {
    // Error general
    http_response_code(500);
    echo json_encode([
        'error' => 'Error del servidor',
        'mensaje' => 'Ocurrió un error inesperado. Por favor, intente nuevamente.'
    ]);
    error_log("Error general en get_alumno_data.php: " . $e->getMessage());
}
