<?php
// Mostrar errores para debug
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

session_start();
// Procesa el registro de un alumno
require_once __DIR__ . '/../config/db_auto.php';
require_once __DIR__ . '/validation.php';
require_once __DIR__ . '/system_logger.php';

use function App\Utils\validarRUN;

$logger = SystemLogger::getInstance();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Verificar autenticación
    if (!isset($_SESSION['user_id'])) {
        $logger->warning('Intento de registro de alumno sin autenticación', 'IP: ' . ($_SERVER['REMOTE_ADDR'] ?? 'N/A'));
        echo json_encode(['success' => false, 'errores' => ['No autorizado']]);
        exit;
    }
    $nombre = trim($_POST['nombre'] ?? '');
    $ap_paterno = trim($_POST['ap_paterno'] ?? '');
    $ap_materno = trim($_POST['ap_materno'] ?? '');
    $run = trim($_POST['run'] ?? '');
    $fecha_nac = trim($_POST['fecha_nac'] ?? '');
    $grado_id = intval($_POST['grado_id'] ?? 0);
    $anio_escolar = intval($_POST['anio_escolar'] ?? 0); // <-- Capturamos el nuevo campo
    $curso = strtoupper(trim($_POST['curso'] ?? ''));
    $errores = [];

    // Validaciones básicas
    if (!$nombre || !$ap_paterno || !$ap_materno || !$run || !$fecha_nac || !$grado_id || !$anio_escolar || !$curso) {
        $errores[] = 'Todos los campos son obligatorios.';
    }
    if (!preg_match('/^[ABC]$/i', $curso)) {
        $errores[] = 'El curso debe ser A, B o C.';
    }

    if (!validarRUN($run)) {
        $errores[] = 'RUN inválido.';
    }
    // Verificar duplicado
    $stmt = $pdo->prepare('SELECT COUNT(*) FROM alumnos WHERE run = ?');
    $stmt->execute([$run]);
    if ($stmt->fetchColumn() > 0) {
        $logger->warning('Intento de registro de alumno duplicado', "RUN: $run ya existe en el sistema");
        $errores[] = 'El RUN ya está registrado.';
    }

    if ($errores) {
        $logger->warning('Error en validación de registro de alumno', "RUN: $run, Errores: " . implode(', ', $errores));
        echo json_encode(['success' => false, 'errores' => $errores]);
        exit;
    }

    $pdo->beginTransaction();
    try {
        // 1. Insertar alumno en la tabla 'alumnos'
        $stmt_alumno = $pdo->prepare('INSERT INTO alumnos (nombre, ap_paterno, ap_materno, run, fecha_nac, grado_id, curso, creado_en) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())');
        $stmt_alumno->execute([$nombre, $ap_paterno, $ap_materno, $run, $fecha_nac, $grado_id, $curso]);
        $alumno_id = $pdo->lastInsertId();

        // 2. Crear una pre-inscripción en la tabla 'matriculas' para el AÑO SELECCIONADO
        $stmt_matricula = $pdo->prepare(
            "INSERT INTO matriculas (alumno_id, anio, grado_id, estado, fecha_matricula) VALUES (?, ?, ?, 'PRE-INSCRITO', CURDATE())"
        );
        $stmt_matricula->execute([$alumno_id, $anio_escolar, $grado_id]);

        $pdo->commit();

        $nombre_completo = "$nombre $ap_paterno $ap_materno";
        $logger->data('Alumno registrado exitosamente', "ID: $alumno_id, Nombre: $nombre_completo, RUN: $run, Grado: $grado_id, Curso: $curso");

        echo json_encode(['success' => true]);
    } catch (Throwable $e) {
        $pdo->rollBack();
        $logger->error('Error al guardar alumno en BD', "RUN: $run, Error: " . $e->getMessage());
        echo json_encode(['success' => false, 'errores' => ['Error al guardar en la base de datos: ' . $e->getMessage()]]);
    }
    exit;
}

$logger->warning('Método no permitido para registro de alumno', 'Método: ' . ($_SERVER['REQUEST_METHOD'] ?? 'N/A'));
echo json_encode(['success' => false, 'errores' => ['Método no permitido.']]);
