document.addEventListener('DOMContentLoaded', function () {
    const modal = document.getElementById('modalRegistroAlumno');
    if (!modal) return;

    const form = modal.querySelector('#formRegistroAlumno');
    const tipoEnsenanzaSelect = modal.querySelector('#modal_tipo_ensenanza');
    const gradoSelect = modal.querySelector('#modal_grado');
    const runInput = modal.querySelector('#run');
    const runFeedback = modal.querySelector('#runFeedback');

    // --- FUNCIÓN PARA CARGAR GRADOS ---
    function cargarGrados() {
        const tipoId = tipoEnsenanzaSelect.value; // Usar directamente el valor del select, que es el ID.

        gradoSelect.innerHTML = '<option value="">Cargando...</option>';
        gradoSelect.disabled = true;

        if (!tipoId) {
            gradoSelect.innerHTML = '<option value="">Selecciona tipo de enseñanza</option>';
            return;
        }

        fetch(src(`grados_por_ensenanza.php?tipo_ensenanza_id=${tipoId}`))
            .then(res => res.json())
            .then(data => {
                gradoSelect.innerHTML = '<option value="">Selecciona grado</option>';
                if (Array.isArray(data) && data.length > 0) {
                    data.forEach(g => {
                        gradoSelect.innerHTML += `<option value="${g.id}">${g.nombre}</option>`;
                    });
                    gradoSelect.disabled = false;
                } else {
                    gradoSelect.innerHTML = '<option value="">No hay grados disponibles</option>';
                }
            })
            .catch(error => {
                console.error('Error al cargar grados:', error);
                gradoSelect.innerHTML = '<option value="">Error al cargar</option>';
            });
    }

    // --- EVENT LISTENERS ---
    tipoEnsenanzaSelect.addEventListener('change', cargarGrados);

    // --- NUEVO: Verificación de RUN en tiempo real ---
    runInput.addEventListener('blur', function () { // 'blur' se activa cuando el usuario sale del campo
        const run = this.value.trim();
        runInput.classList.remove('is-invalid', 'is-valid');
        runFeedback.textContent = '';

        if (!run) return;

        if (!validarRun(run)) {
            runInput.classList.add('is-invalid');
            runFeedback.textContent = 'El formato del RUN no es válido.';
            return;
        }

        // Ahora, verificar si existe en la base de datos
        fetch(src(`verificar_run.php?run=${encodeURIComponent(run)}`))
            .then(res => res.json())
            .then(data => {
                if (data.existe) {
                    runInput.classList.add('is-invalid');
                    runFeedback.textContent = 'Este RUN ya está registrado en el sistema.';
                } else {
                    runInput.classList.add('is-valid');
                }
            });
    });

    form.addEventListener('submit', function (e) {
        e.preventDefault();

        runInput.classList.remove('is-invalid');
        runFeedback.textContent = '';

        if (!validarRun(runInput.value)) {
            runInput.classList.add('is-invalid');
            runFeedback.textContent = 'El RUN ingresado no es válido.';
            return;
        }

        // Prevenir envío si el RUN ya está marcado como inválido (duplicado)
        if (runInput.classList.contains('is-invalid')) {
            alert('Por favor, corrija los errores en el formulario antes de registrar.');
            return;
        }

        const formData = new FormData(form);

        fetch(src('registrar_alumno.php'), {
            method: 'POST',
            body: formData
        })
            .then(res => res.json())
            .then(data => {
                if (data.success) {
                    alert('Alumno registrado correctamente.');
                    document.activeElement.blur(); // Quitar el foco antes de ocultar
                    const modalInstance = bootstrap.Modal.getInstance(modal);
                    modalInstance.hide();
                    // Opcional: Recargar la lista de alumnos si es necesario
                    if (window.fetchAlumnosPreinscritos) {
                        window.fetchAlumnosPreinscritos();
                    }
                } else {
                    const errorMsg = data.errores ? data.errores.join('\n') : 'Ocurrió un error desconocido.';
                    alert('Error al registrar:\n' + errorMsg);
                }
            })
            .catch(error => {
                alert('Error de conexión al registrar el alumno.');
                console.error('Error en fetch:', error);
            });
    });

    // Limpiar el formulario cuando el modal se cierra
    modal.addEventListener('hidden.bs.modal', function () {
        form.reset();
        runInput.classList.remove('is-invalid');
        runFeedback.textContent = '';
        gradoSelect.innerHTML = '<option value="">Selecciona...</option>';
        gradoSelect.disabled = true;
    });
});