// --- Lógica para búsqueda y gestión de familiar/apoderado y matrícula ---
document.addEventListener('DOMContentLoaded', function () {
    // --- Seleccionar elementos del DOM ---
    const formNuevaMatricula = document.getElementById('formNuevaMatricula');
    const formularioMatricula = document.getElementById('formularioMatricula');
    const seccionBuscarApoderado = document.getElementById('seccionBuscarApoderado');
    const contenedorFormApoderadoMatricula = document.getElementById('contenedorFormApoderadoMatricula');
    const listaFamiliaresDiv = document.getElementById('listaFamiliaresAgregados');
    const resultadosBusqueda = document.getElementById('resultadosBusqueda');

    // Botones
    const btnCancelarMatricula = document.getElementById('btnCancelarMatricula');
    const btnMostrarBuscarApoderado = document.getElementById('btnMostrarBuscarApoderado');
    const btnMostrarNuevoApoderado = document.getElementById('btnMostrarNuevoApoderado');
    const btnBuscarApoderado = document.getElementById('btnBuscarApoderado');
    const btnAnadirFamiliar = document.getElementById('btnAnadirFamiliar');
    const btnCancelarApoderado = document.getElementById('btnCancelarApoderado');
    const btnCopiarDomicilioAlumno = document.getElementById('btnCopiarDomicilioAlumno');
    const btnVerificarRunApoderado = document.getElementById('btnVerificarRunApoderado');

    // Filtros y campos de búsqueda
    const tipoEnsenanza = document.getElementById('tipo_ensenanza');
    const grado = document.getElementById('grado');
    const anioEscolarSelect = document.getElementById('anio_escolar');
    const buscadorAlumno = document.getElementById('buscadorAlumno');
    const inputBuscarFamiliar = document.getElementById('apoderado_buscar');

    // Campos del formulario de matrícula
    const matriculaTipoEnsenanza = document.getElementById('matricula_tipo_ensenanza');
    const matriculaGrado = document.getElementById('matricula_grado');

    // --- Constantes y estado de la aplicación ---
    const camposApoderado = [
        'run', 'nombre', 'ap_paterno', 'ap_materno', 'domicilio', 'parentesco', 'parentesco_especifico',
        'telefono', 'telefono2', 'email', 'escolaridad', 'profesion', 'actividad_laboral'
    ];

    const camposPrincipalesIds = [
        'matricula_run', 'matricula_nombre', 'matricula_ap_paterno', 'matricula_ap_materno',
        'matricula_fecha_nac', 'matricula_tipo_ensenanza', 'matricula_grado'
    ];

    const camposSocialSaludIds = [
        'social_edad', 'social_repitente', 'social_grado_repitencia', 'social_colegio_procedencia',
        'social_alumno_pie', 'social_hermanos_escuela', 'social_grado_hermanos', 'social_nacionalidad',
        'social_integrantes_familia', 'social_orden_alejamiento', 'social_programa_social', 'social_etnia',
        'social_internet_hogar', 'social_smartphone', 'social_computador_hogar', 'social_opta_religion',
        'social_religion', 'social_transporte', 'social_sector', 'social_junaeb', 'social_uso_imagen', 'social_vive_con',
        'social_domicilio', 'social_observacion_alejamiento',
        'salud_sistema_salud', 'salud_alergias', 'salud_enfermedad_cuidado',
        'salud_medicamento_contraindicado', 'salud_medicamento_uso_diario', 'salud_observaciones'
    ];

    // Estado global
    window.ultimoAlumnoSeleccionadoId = null;
    let familiaresAgregados = [];
    let editandoFamiliarIndex = -1; // -1 = no editando, >= 0 = índice del familiar siendo editado


    // --- Funciones de utilidad ---
    function mostrarFormApoderado() {
        if (contenedorFormApoderadoMatricula) contenedorFormApoderadoMatricula.style.display = '';
    }

    function ocultarFormApoderado() {
        if (contenedorFormApoderadoMatricula) contenedorFormApoderadoMatricula.style.display = 'none';
    }

    function limpiarFormApoderado() {
        camposApoderado.forEach(c => {
            const input = document.getElementById('apoderado_' + c);
            if (input) input.value = '';
        });
        document.querySelectorAll('input[name="apoderado_rol[]"]').forEach(chk => chk.checked = false);
    }

    function limpiarCampos(ids) {
        ids.forEach(id => {
            const el = document.getElementById(id);
            if (el) el.value = '';
        });
    }

    function limpiarCamposSocialSalud() {
        camposSocialSaludIds.forEach(id => {
            const el = document.getElementById(id);
            if (el) {
                if (el.tagName === 'SELECT') el.selectedIndex = 0;
                else el.value = '';
            }
        });
    }

    function limpiarYReiniciarMatricula() {
        if (formNuevaMatricula) formNuevaMatricula.reset();
        limpiarCampos(camposPrincipalesIds);
        limpiarCamposSocialSalud();

        if (formularioMatricula) formularioMatricula.style.display = 'none';

        familiaresAgregados = [];
        renderizar();

        if (tipoEnsenanza) tipoEnsenanza.selectedIndex = 0;
        if (grado) {
            grado.innerHTML = '<option value="">Selecciona tipo de enseñanza primero</option>';
            grado.disabled = true;
        }
        if (buscadorAlumno) {
            buscadorAlumno.value = '';
            buscadorAlumno.disabled = true;
        }
        if (resultadosBusqueda) {
            resultadosBusqueda.innerHTML = '';
            resultadosBusqueda.style.display = 'none';
        }
        window.ultimoAlumnoSeleccionadoId = null;
    }

    /**
     * Reinicia el formulario después de una matrícula exitosa, pero MANTIENE los filtros
     * de enseñanza y grado para facilitar matrículas consecutivas.
     */
    function reiniciarParaSiguienteMatricula() {
        if (formNuevaMatricula) formNuevaMatricula.reset();
        limpiarCampos(camposPrincipalesIds);
        limpiarCamposSocialSalud();

        if (formularioMatricula) formularioMatricula.style.display = 'none';

        familiaresAgregados = [];
        renderizar();

        window.ultimoAlumnoSeleccionadoId = null;

        // Vuelve a cargar la lista de alumnos preinscritos para el grado actual.
        fetchAlumnosPreinscritos();
    }

    // --- Función para renderizar la lista de familiares ---
    function renderizar() {
        renderizarListaFamiliares(listaFamiliaresDiv, familiaresAgregados, true); // true = mostrar botón de editar
    }

    // --- Renderizado de listas ---
    function renderListaAlumnos(alumnos) {
        if (!resultadosBusqueda) return;
        if (!alumnos || alumnos.length === 0) {
            resultadosBusqueda.innerHTML = '<div class="alert alert-info">No hay alumnos preinscritos para este grado.</div>';
            resultadosBusqueda.style.display = '';
            return;
        }
        let html = '<div class="list-group">';
        alumnos.forEach(al => {
            html += `<button type="button" class="list-group-item list-group-item-action alumno-preinscrito-item" data-id="${al.id}">
                <strong>${al.ap_paterno} ${al.ap_materno}, ${al.nombre}</strong> <span class="text-muted">(${al.run})</span>
            </button>`;
        });
        html += '</div>';
        resultadosBusqueda.innerHTML = html;
        resultadosBusqueda.style.display = '';
    }

    // --- Búsqueda de alumnos ---
    function fetchAlumnosPreinscritos() {
        if (!tipoEnsenanza || !grado || !anioEscolarSelect) return;

        const tipo_ensenanza_id = tipoEnsenanza.value;
        const grado_id = grado.value;
        const anio_escolar = anioEscolarSelect.value;

        if (!tipo_ensenanza_id || !grado_id) {
            if (resultadosBusqueda) {
                resultadosBusqueda.innerHTML = '';
                resultadosBusqueda.style.display = 'none';
            }
            return;
        }

        // --- SOLUCIÓN DEFINITIVA: CACHE BUSTING ---
        // Añadimos un timestamp a la URL para asegurar que cada petición sea única
        // y el navegador no use una respuesta antigua de la caché.
        const url = src(`buscar_alumnos.php?q=&grado_id=${grado_id}&tipo_ensenanza_id=${tipo_ensenanza_id}&anio_escolar=${anio_escolar}&_=${new Date().getTime()}`);

        if (resultadosBusqueda) {
            resultadosBusqueda.innerHTML = '<div class="text-center text-muted">Cargando preinscritos...</div>';
            resultadosBusqueda.style.display = '';
        }

        fetch(url)
            .then(res => res.json())
            .then(data => {
                let alumnos = Array.isArray(data) ? data : (data.alumnos || []);
                renderListaAlumnos(alumnos);
            })
            .catch(error => {
                console.error('Error al cargar preinscritos:', error);
                if (resultadosBusqueda) {
                    resultadosBusqueda.innerHTML = '<div class="alert alert-danger">Error al cargar preinscritos.</div>';
                }
            });
    }

    // --- Carga de datos del alumno ---
    function cargarDatosAlumno(alumnoId) {
        window.ultimoAlumnoSeleccionadoId = alumnoId;
        fetch(src(`datos_alumno.php?id=${alumnoId}`))
            .then(res => {
                if (!res.ok) throw new Error('Error al cargar datos del alumno');
                return res.json();
            })
            .then(data => {
                if (data && data.id) {
                    // Datos básicos del alumno
                    document.getElementById('matricula_run').value = data.run || '';
                    document.getElementById('matricula_nombre').value = data.nombre || '';
                    document.getElementById('matricula_ap_paterno').value = data.ap_paterno || '';
                    document.getElementById('matricula_ap_materno').value = data.ap_materno || '';
                    document.getElementById('matricula_fecha_nac').value = data.fecha_nac || '';

                    // --- SOLUCIÓN AL BUG ---
                    // Usar los valores de los filtros actuales en lugar de los datos históricos del alumno.
                    document.getElementById('matricula_tipo_ensenanza').value = tipoEnsenanza.options[tipoEnsenanza.selectedIndex].text;
                    document.getElementById('matricula_grado').value = grado.options[grado.selectedIndex].text;

                    // Calcular edad al 31 de marzo del año siguiente
                    let edadCalculada = '';
                    if (data.fecha_nac) {
                        const fechaNac = new Date(data.fecha_nac);
                        const anioSiguiente = new Date().getFullYear() + 1;
                        const fechaCorte = new Date(anioSiguiente, 2, 31);
                        let edad = fechaCorte.getFullYear() - fechaNac.getFullYear();
                        if (
                            fechaCorte.getMonth() < fechaNac.getMonth() ||
                            (fechaCorte.getMonth() === fechaNac.getMonth() && fechaCorte.getDate() < fechaNac.getDate())
                        ) {
                            edad--;
                        }
                        edadCalculada = edad;
                    }

                    // Información social
                    const socialData = data.social || {};
                    document.getElementById('social_edad').value = edadCalculada;
                    document.getElementById('social_repitente').value = socialData.repitente || '';
                    document.getElementById('social_grado_repitencia').value = socialData.grado_repitencia || '';
                    document.getElementById('social_colegio_procedencia').value = socialData.colegio_procedencia || '';
                    document.getElementById('social_alumno_pie').value = socialData.alumno_pie || '';
                    document.getElementById('social_hermanos_escuela').value = socialData.hermanos_escuela || '';
                    document.getElementById('social_grado_hermanos').value = socialData.grado_hermanos || '';
                    document.getElementById('social_nacionalidad').value = socialData.nacionalidad || '';
                    document.getElementById('social_integrantes_familia').value = socialData.integrantes_familia || '';
                    document.getElementById('social_orden_alejamiento').value = socialData.orden_alejamiento || '';
                    document.getElementById('social_programa_social').value = socialData.programa_social || '';
                    document.getElementById('social_etnia').value = socialData.etnia || '';
                    document.getElementById('social_internet_hogar').value = socialData.internet_hogar || '';
                    document.getElementById('social_smartphone').value = socialData.smartphone || '';
                    document.getElementById('social_computador_hogar').value = socialData.computador_hogar || '';
                    document.getElementById('social_opta_religion').value = socialData.opta_religion || '';
                    document.getElementById('social_religion').value = socialData.religion || '';
                    document.getElementById('social_transporte').value = socialData.transporte || '';
                    document.getElementById('social_sector').value = socialData.sector || '';
                    document.getElementById('social_junaeb').value = socialData.junaeb || '';
                    document.getElementById('social_uso_imagen').value = socialData.uso_imagen || '';
                    document.getElementById('social_vive_con').value = socialData.vive_con || '';

                    // Información de salud
                    const saludData = data.salud || {};
                    document.getElementById('salud_sistema_salud').value = saludData.sistema_salud || '';
                    document.getElementById('salud_alergias').value = saludData.alergias || '';
                    document.getElementById('salud_enfermedad_cuidado').value = saludData.enfermedad_cuidado || '';
                    document.getElementById('salud_medicamento_contraindicado').value = saludData.medicamento_contraindicado || '';
                    document.getElementById('salud_medicamento_uso_diario').value = saludData.medicamento_uso_diario || '';
                    document.getElementById('salud_observaciones').value = saludData.observaciones || '';

                    // Familiares
                    familiaresAgregados = data.familiares || [];
                    renderizar();

                    // Domicilio
                    document.getElementById('social_domicilio').value = data.domicilio || '';

                } else {
                    limpiarCamposSocialSalud();
                }

                // Mostrar formulario y ocultar resultados
                if (formularioMatricula) formularioMatricula.style.display = '';
                if (resultadosBusqueda) resultadosBusqueda.style.display = 'none';
            })
            .catch(error => {
                console.error('Error al cargar datos del alumno:', error);
                alert('Error al cargar datos del alumno: ' + error.message);
            });
    }

    // --- Carga de grados ---
    function cargarGrados(tipoId, selectGrado) {
        selectGrado.innerHTML = '<option value="">Cargando grados...</option>';
        selectGrado.disabled = true;

        if (tipoId) {
            const url = src(`grados_por_ensenanza.php?tipo_ensenanza_id=${encodeURIComponent(tipoId)}`);
            fetch(url)
                .then(res => res.json())
                .then(data => {
                    selectGrado.innerHTML = '<option value="">Selecciona grado</option>';
                    if (Array.isArray(data) && data.length > 0) {
                        data.forEach(gr => {
                            selectGrado.innerHTML += `<option value="${gr.id}">${gr.nombre}</option>`;
                        });
                        setTimeout(() => { selectGrado.disabled = false; }, 50);
                    } else {
                        selectGrado.innerHTML = '<option value="">No hay grados disponibles</option>';
                        selectGrado.disabled = true;
                    }
                })
                .catch(error => {
                    console.error('Error al cargar grados:', error);
                    selectGrado.innerHTML = '<option value="">Error al cargar grados</option>';
                    selectGrado.disabled = true;
                });
        } else {
            selectGrado.innerHTML = '<option value="">Selecciona tipo de enseñanza primero</option>';
            selectGrado.disabled = true;
        }
    }

    // --- Event Listeners ---

    // Inicialización
    ocultarFormApoderado();
    if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = 'none';

    // Botones de apoderado
    if (btnMostrarBuscarApoderado) {
        btnMostrarBuscarApoderado.addEventListener('click', function () {
            if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = '';
            mostrarFormApoderado();
            limpiarFormApoderado();
        });
    }

    if (btnMostrarNuevoApoderado) {
        btnMostrarNuevoApoderado.addEventListener('click', function () {
            if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = 'none';
            mostrarFormApoderado();
            limpiarFormApoderado();
        });
    }

    // Buscar apoderado existente
    if (btnBuscarApoderado && inputBuscarFamiliar) {
        btnBuscarApoderado.addEventListener('click', function () {
            const q = inputBuscarFamiliar.value.trim();
            if (!q || q.length < 2) return;

            fetch(src('buscar_familiar.php?q=') + encodeURIComponent(q))
                .then(res => res.json())
                .then(data => {
                    limpiarFormApoderado();
                    if (data.length > 0) {
                        const fam = data[0];
                        camposApoderado.forEach(c => {
                            const input = document.getElementById('apoderado_' + c);
                            if (input) input.value = fam[c] || '';
                        });
                        mostrarFormApoderado();
                    } else {
                        alert('No se encontró apoderado con ese dato.');
                        limpiarFormApoderado();
                    }
                })
                .catch(() => alert('Error al buscar apoderado.'));
        });
    }

    // Eventos de filtros
    if (tipoEnsenanza && grado) {
        tipoEnsenanza.addEventListener('change', function () {
            cargarGrados(this.value, grado);
            if (buscadorAlumno) {
                buscadorAlumno.value = '';
                buscadorAlumno.disabled = true;
            }
            if (resultadosBusqueda) {
                resultadosBusqueda.innerHTML = '';
                resultadosBusqueda.style.display = 'none';
            }
        });

        if (anioEscolarSelect) {
            anioEscolarSelect.addEventListener('change', function () {
                if (tipoEnsenanza) tipoEnsenanza.value = '';
                if (grado) {
                    grado.innerHTML = '<option value="">Selecciona tipo de enseñanza primero</option>';
                    grado.disabled = true;
                }
                if (resultadosBusqueda) {
                    resultadosBusqueda.innerHTML = '';
                    resultadosBusqueda.style.display = 'none';
                }
                fetchAlumnosPreinscritos();
            });
        }

        grado.addEventListener('change', function () {
            if (buscadorAlumno) {
                buscadorAlumno.disabled = !this.value;
                if (!this.value) {
                    buscadorAlumno.value = '';
                    if (resultadosBusqueda) {
                        resultadosBusqueda.innerHTML = '';
                        resultadosBusqueda.style.display = 'none';
                    }
                }
            }
            fetchAlumnosPreinscritos();
        });
    }

    // Selección de alumno de la lista
    if (resultadosBusqueda) {
        resultadosBusqueda.addEventListener('click', function (e) {
            const btn = e.target.closest('.alumno-preinscrito-item');
            if (btn) {
                const alumnoId = btn.getAttribute('data-id');
                if (alumnoId) {
                    cargarDatosAlumno(alumnoId);
                    if (formularioMatricula) formularioMatricula.style.display = '';
                }
            }
        });
    }

    // Listener para formulario de matrícula
    if (matriculaTipoEnsenanza && matriculaGrado) {
        matriculaTipoEnsenanza.addEventListener('change', function () {
            cargarGrados(this.value, matriculaGrado);
        });
    }

    // Añadir familiar
    if (btnAnadirFamiliar) {
        btnAnadirFamiliar.addEventListener('click', () => {
            const apoderado = {};
            camposApoderado.forEach(c => {
                const input = document.getElementById('apoderado_' + c);
                const feedback = document.getElementById(`apoderado_${c}_feedback`);

                if (input && input.type !== 'checkbox') {
                    input.classList.remove('is-invalid');
                }
                if (feedback) {
                    feedback.textContent = '';
                }

                if (c !== 'rol') {
                    apoderado[c] = input ? input.value.trim() : '';
                }
            });

            const selectedRoles = [];
            document.querySelectorAll('input[name="apoderado_rol[]"]:checked').forEach(chk => {
                selectedRoles.push(chk.value);
            });
            apoderado.rol = selectedRoles.join(', ');

            // Validaciones
            if (!apoderado.run) {
                mostrarError('run', 'El RUN del familiar es obligatorio.');
                return;
            }

            if (!validarRun(apoderado.run)) {
                mostrarError('run', 'El RUN del familiar es inválido. Por favor, verifícalo.');
                return;
            }

            if (!apoderado.nombre) {
                mostrarError('nombre', 'El Nombre del familiar es obligatorio.');
                return;
            }

            if (!apoderado.ap_paterno) {
                mostrarError('ap_paterno', 'El Apellido Paterno del familiar es obligatorio.');
                return;
            }

            // Lógica para diferenciar entre añadir y actualizar
            if (editandoFamiliarIndex >= 0) {
                // --- MODO ACTUALIZACIÓN ---
                // Actualizamos el familiar en la posición que se está editando.
                familiaresAgregados[editandoFamiliarIndex] = apoderado;
                // Reseteamos el estado de edición.
                editandoFamiliarIndex = -1;
                btnAnadirFamiliar.textContent = 'Añadir familiar a la lista';

            } else {
                // --- MODO AÑADIR ---
                // Verificamos si el RUN ya existe en la lista.
                if (familiaresAgregados.some(f => f.run === apoderado.run)) {
                    alert('Este familiar ya ha sido agregado a la lista.');
                    return;
                }
                familiaresAgregados.push(apoderado);
            }

            renderizar();
            limpiarFormApoderado();
            ocultarFormApoderado();
        });
    }

    // Botón para cancelar solo el formulario de apoderado
    if (btnCancelarApoderado) {
        btnCancelarApoderado.addEventListener('click', () => {
            limpiarFormApoderado();
            ocultarFormApoderado();
        });
    }

    function editarFamiliar(index) {
        const familiar = familiaresAgregados[index];
        if (!familiar) return;

        editandoFamiliarIndex = index;

        // Rellenar el formulario con los datos del familiar
        camposApoderado.forEach(c => {
            const input = document.getElementById(`apoderado_${c}`);
            if (input) {
                input.value = familiar[c] || '';
            }
        });

        // Marcar los checkboxes de roles
        const roles = (familiar.rol || '').split(',').map(r => r.trim());
        document.querySelectorAll('input[name="apoderado_rol[]"]').forEach(chk => {
            chk.checked = roles.includes(chk.value);
        });

        // Mostrar el formulario y cambiar el texto del botón
        mostrarFormApoderado();
        if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = 'none';
        if (btnAnadirFamiliar) btnAnadirFamiliar.textContent = 'Actualizar Familiar';

        // Scroll hacia el formulario para que sea visible
        contenedorFormApoderadoMatricula.scrollIntoView({ behavior: 'smooth' });
    }

    // Quitar familiar
    if (listaFamiliaresDiv) {
        listaFamiliaresDiv.addEventListener('click', (e) => {
            const target = e.target.closest('button');
            if (!target) return;

            const index = target.dataset.index;

            if (target.classList.contains('btn-quitar-familiar')) {
                familiaresAgregados.splice(index, 1);
                renderizar();
            } else if (target.classList.contains('btn-editar-familiar')) {
                editarFamiliar(index);
                renderizar();
            }
        });
    }

    // Botón cancelar
    if (btnCancelarMatricula) {
        btnCancelarMatricula.addEventListener('click', limpiarYReiniciarMatricula);
    }

    // Guardar matrícula
    if (formNuevaMatricula) {
        formNuevaMatricula.addEventListener('submit', async function (e) {
            e.preventDefault();
            const id = window.ultimoAlumnoSeleccionadoId || null;

            if (!id) {
                alert('Debes seleccionar un alumno antes de guardar.');
                return;
            }

            const fecha_matricula = document.getElementById('matricula_fecha_matricula').value;
            if (!fecha_matricula) {
                alert('La fecha de matrícula es obligatoria.');
                document.getElementById('matricula_fecha_matricula').focus();
                return;
            }

            if (familiaresAgregados.length === 0) {
                alert('Debes agregar al menos un apoderado a la lista antes de guardar.');
                return;
            }

            const gradoId = grado ? grado.value : null;
            if (!gradoId) {
                alert('Debe seleccionar un grado válido en los filtros de la parte superior.');
                return;
            }

            // Recolectar datos sociales
            const social = {
                edad: document.getElementById('social_edad').value,
                repitente: document.getElementById('social_repitente').value,
                grado_repitencia: document.getElementById('social_grado_repitencia').value,
                colegio_procedencia: document.getElementById('social_colegio_procedencia').value,
                alumno_pie: document.getElementById('social_alumno_pie').value,
                hermanos_escuela: document.getElementById('social_hermanos_escuela').value,
                grado_hermanos: document.getElementById('social_grado_hermanos').value,
                nacionalidad: document.getElementById('social_nacionalidad').value,
                domicilio: document.getElementById('social_domicilio').value,
                observacion_alejamiento: document.getElementById('social_observacion_alejamiento').value,
                integrantes_familia: document.getElementById('social_integrantes_familia').value,
                orden_alejamiento: document.getElementById('social_orden_alejamiento').value,
                programa_social: document.getElementById('social_programa_social').value,
                etnia: document.getElementById('social_etnia').value,
                internet_hogar: document.getElementById('social_internet_hogar').value,
                smartphone: document.getElementById('social_smartphone').value,
                computador_hogar: document.getElementById('social_computador_hogar').value,
                opta_religion: document.getElementById('social_opta_religion').value,
                religion: document.getElementById('social_religion').value,
                transporte: document.getElementById('social_transporte').value,
                sector: document.getElementById('social_sector').value,
                junaeb: document.getElementById('social_junaeb').value,
                uso_imagen: document.getElementById('social_uso_imagen').value,
                vive_con: document.getElementById('social_vive_con').value
            };

            // Recolectar datos de salud
            const salud = {
                sistema_salud: document.getElementById('salud_sistema_salud').value,
                alergias: document.getElementById('salud_alergias').value,
                enfermedad_cuidado: document.getElementById('salud_enfermedad_cuidado').value,
                medicamento_contraindicado: document.getElementById('salud_medicamento_contraindicado').value,
                medicamento_uso_diario: document.getElementById('salud_medicamento_uso_diario').value,
                observaciones: document.getElementById('salud_observaciones').value
            };

            try {
                // 1. Guardar todos los familiares y obtener sus IDs
                const familiaresGuardados = await Promise.all(familiaresAgregados.map(async (familiar) => {
                    const res = await fetch(src('guardar_familiar.php'), {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/json' },
                        body: JSON.stringify(familiar)
                    });
                    const data = await res.json();
                    if (!res.ok || !data.success) throw new Error(data.error || `Error al guardar familiar ${familiar.run}`);
                    return { ...familiar, id: data.familiar_id }; // Devolver el familiar con su ID de la BD
                }));

                // 2. Sincronizar TODAS las asociaciones de una sola vez
                const resAsociar = await fetch(src('asociar_alumno_familiar.php'), {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({
                        alumno_id: id,
                        familiares: familiaresGuardados
                    })
                });
                const respAsociar = await resAsociar.json();
                if (!resAsociar.ok || !respAsociar.success) {
                    throw new Error(respAsociar.error || 'Error al asociar familiares con el alumno.');
                }

                // Guardar información del alumno
                const resInfo = await fetch(src('guardar_info_alumno.php'), {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({ alumno_id: id, fecha_matricula, grado_id: gradoId, anio_escolar: anioEscolarSelect.value, social, salud })
                });

                if (!resInfo.ok) {
                    const errorData = await resInfo.json().catch(() => ({ error: `Error del servidor (${resInfo.status})` }));
                    throw new Error(errorData.error || `Error desconocido del servidor.`);
                }

                const respInfo = await resInfo.json();
                if (!respInfo.success) throw new Error(respInfo.error || 'Error desconocido al guardar información.');

                // --- NUEVO FLUJO DE IMPRESIÓN CON MODAL ---
                if (respInfo.matricula_id) {
                    const modalEl = document.getElementById('modalExitoMatricula');
                    const modal = new bootstrap.Modal(modalEl);

                    // Configurar los botones del modal con las URLs correctas
                    const btnComprobante = document.getElementById('btnImprimirComprobanteModal');
                    const btnFicha = document.getElementById('btnImprimirFichaModal');
                    const btnTransporte = document.getElementById('btnImprimirTransporteModal');

                    btnComprobante.href = view(`comprobante_matricula_pdf.php?matricula_id=${respInfo.matricula_id}&nocache=${Date.now()}`);
                    btnFicha.href = view(`ficha_pdf.php?matricula_id=${respInfo.matricula_id}&nocache=${Date.now()}`);
                    btnTransporte.href = view(`solicitud_transporte_pdf.php?matricula_id=${respInfo.matricula_id}&nocache=${Date.now()}`);

                    // Mostrar el modal
                    modal.show();
                }

                reiniciarParaSiguienteMatricula();

            } catch (error) {
                // Mejoramos la alerta para mostrar el mensaje de error completo
                console.error('Error al guardar:', error);
                alert('Error al guardar:\n\n' + error.message);
            }
        });
    }

    // --- LÓGICA MEJORADA PARA VERIFICAR RUN DEL APODERADO ---
    configurarVerificacionRunFamiliar(
        'apoderado_run',
        'apoderado_run_feedback',
        camposApoderado
    );

    // --- LÓGICA PARA COPIAR DOMICILIO DEL ALUMNO AL APODERADO ---
    if (btnCopiarDomicilioAlumno) {
        btnCopiarDomicilioAlumno.addEventListener('click', (e) => {
            e.preventDefault(); // Evita que el enlace navegue
            const domicilioAlumnoInput = document.getElementById('social_domicilio');
            const domicilioApoderadoInput = document.getElementById('apoderado_domicilio');

            if (domicilioAlumnoInput && domicilioApoderadoInput) {
                domicilioApoderadoInput.value = domicilioAlumnoInput.value;
            }
        });
    }
});
