// --- Lógica para la EDICIÓN de matrícula ---
document.addEventListener('DOMContentLoaded', function () {
    // --- LÓGICA DE APODERADO (FAMILIAR) ---
    const btnMostrarBuscarApoderado = document.getElementById('btnMostrarBuscarApoderado');
    const btnMostrarNuevoApoderado = document.getElementById('btnMostrarNuevoApoderado');
    const seccionBuscarApoderado = document.getElementById('seccionBuscarApoderado');
    const contenedorFormApoderadoMatricula = document.getElementById('contenedorFormApoderadoMatricula');
    const btnBuscarApoderado = document.getElementById('btnBuscarApoderado');
    const btnCopiarDomicilioAlumno = document.getElementById('btnCopiarDomicilioAlumno');
    const inputBuscarFamiliar = document.getElementById('apoderado_buscar');
    const btnAnadirFamiliar = document.getElementById('btnAnadirFamiliar');
    const listaFamiliaresDiv = document.getElementById('listaFamiliaresAgregados');
    const btnVerificarRunApoderado = document.getElementById('btnVerificarRunApoderado');

    const camposApoderado = [
        'run', 'nombre', 'ap_paterno', 'ap_materno', 'domicilio', 'parentesco', 'parentesco_especifico', 'telefono', 'telefono2', 'email', 'escolaridad', 'profesion', 'actividad_laboral'
    ];

    // Estado de la aplicación
    let familiaresAgregados = [];
    let alumnoId = null;
    let gradoId = null;
    let editandoFamiliarIndex = -1; // -1 = no editando, >= 0 = índice del familiar siendo editado
    let familiarOriginalBackup = null; // Backup del familiar original para cancelar

    // --- CAPTURA DE PARÁMETROS Y FILTROS ---
    const urlParams = new URLSearchParams(window.location.search);
    const matriculaIdParaEditar = urlParams.get('matricula_id');

    // --- FUNCIÓN DE REDIRECCIÓN ---
    // Centraliza la lógica para volver al libro de matrícula con los filtros correctos.
    function redirectToLibroMatricula() {
        // Se leen los parámetros de la URL actual. Ya no usamos localStorage como fallback
        // para aislar el problema y asegurar que los datos vienen de la URL.
        const params = new URLSearchParams(window.location.search);
        const grado = params.get('grado_id');
        const anio = params.get('anio');
        const tipoEnsenanza = params.get('tipo_ensenanza_id');

        // Alerta de diagnóstico: si los filtros no se encuentran, se avisa al usuario.
        if (!grado || !anio || !tipoEnsenanza) {
            alert("Atención: No se encontraron los filtros originales (grado, año, tipo enseñanza) en la URL. Se volverá al libro de matrícula sin filtros.");
        }

        let url = 'libro_matricula.php';
        if (grado && anio && tipoEnsenanza) {
            url += `?grado_id=${grado}&anio=${anio}&tipo_ensenanza_id=${tipoEnsenanza}`;
        }
        window.location.href = url;
    }

    // Ocultar secciones al inicio
    if (contenedorFormApoderadoMatricula) contenedorFormApoderadoMatricula.style.display = 'none';
    if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = 'none';

    // --- FUNCIÓN PRINCIPAL PARA CARGAR DATOS ---
    function cargarDatosAlumno(matriculaId) {
        // Se añade un timestamp para evitar que el navegador use datos de caché.
        fetch(`../src/datos_alumno.php?matricula_id=${matriculaId}&_=${new Date().getTime()}`)
            .then(res => {
                if (!res.ok) throw new Error('Error al cargar datos del alumno');
                return res.json();
            })
            .then(data => {
                if (!data || !data.id) throw new Error('No se encontraron datos para la matrícula.');
                alumnoId = data.id; // Guardamos el ID del alumno
                gradoId = data.grado_id; // Guardamos el ID del grado

                // --- Rellenar Formulario ---
                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 || '';
                document.getElementById('matricula_tipo_ensenanza').value = data.tipo_ensenanza_nombre || '';
                document.getElementById('matricula_grado').value = data.grado_nombre || '';
                document.getElementById('matricula_fecha_matricula').value = data.fecha_matricula || '';

                // --- INICIO CÁLCULO DE EDAD ---
                // Calcula la edad del alumno al 31 de marzo del año siguiente.
                let edadCalculada = '';
                if (data.fecha_nac) {
                    const fechaNac = new Date(data.fecha_nac + 'T00:00:00'); // Asegurar que se interprete como local
                    if (!isNaN(fechaNac.getTime())) {
                        const anioSiguiente = new Date().getFullYear() + 1;
                        const fechaCorte = new Date(anioSiguiente, 2, 31); // 31 de Marzo (mes 2)
                        let edad = fechaCorte.getFullYear() - fechaNac.getFullYear();
                        if (
                            fechaCorte.getMonth() < fechaNac.getMonth() ||
                            (fechaCorte.getMonth() === fechaNac.getMonth() && fechaCorte.getDate() < fechaNac.getDate())
                        ) {
                            edad--;
                        }
                        edadCalculada = edad >= 0 ? edad : '';
                    }
                }

                const socialData = data.social || {};
                document.getElementById('social_edad').value = edadCalculada || socialData.edad || '';
                document.getElementById('social_nacionalidad').value = socialData.nacionalidad ?? '';
                document.getElementById('social_domicilio').value = socialData.domicilio ?? '';
                document.getElementById('social_integrantes_familia').value = socialData.integrantes_familia ?? '';
                document.getElementById('social_vive_con').value = socialData.vive_con ?? '';
                document.getElementById('social_repitente').value = socialData.repitente ?? '';
                document.getElementById('social_grado_repitencia').value = socialData.grado_repitencia ?? '';
                document.getElementById('social_hermanos_escuela').value = socialData.hermanos_escuela ?? '';
                document.getElementById('social_grado_hermanos').value = socialData.grado_hermanos ?? '';
                document.getElementById('social_colegio_procedencia').value = socialData.colegio_procedencia ?? '';
                document.getElementById('social_alumno_pie').value = socialData.alumno_pie ?? '';
                document.getElementById('social_orden_alejamiento').value = socialData.orden_alejamiento ?? '';
                document.getElementById('social_observacion_alejamiento').value = socialData.observacion_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 ?? '';

                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 ?? '';

                // Los familiares ya vienen con la propiedad 'rol' desde el backend.
                // Simplemente los asignamos y renderizamos la lista.
                familiaresAgregados = data.familiares || [];
                renderizar();
            })
            .catch(error => {
                console.error('Error detallado al cargar datos del alumno:', error);
                let userMessage = 'Ocurrió un error inesperado al cargar los datos del alumno.\n\n';
                userMessage += 'Detalles técnicos: ' + error.message + '\n\n';
                userMessage += 'Por favor, copia y pega este mensaje completo al equipo de soporte.';
                alert(userMessage);

                // Ocultar el formulario para prevenir acciones con datos corruptos
                const form = document.getElementById('formNuevaMatricula');
                if (form) form.style.display = 'none';
            });
    }

    // --- LÓGICA DE INTERFAZ DE APODERADO ---
    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 = '';
                // Limpiar feedback de validaciones
                clearFieldFeedback(input);
            }
        });
        document.querySelectorAll('input[name="apoderado_rol[]"]').forEach(chk => chk.checked = false);
    }

    function cancelarEdicionFamiliar() {
        if (editandoFamiliarIndex >= 0 && familiarOriginalBackup) {
            // Restaurar el familiar original en su posición
            familiaresAgregados[editandoFamiliarIndex] = { ...familiarOriginalBackup };
        }

        // Resetear estado de edición
        editandoFamiliarIndex = -1;
        familiarOriginalBackup = null;

        // Limpiar y ocultar formulario
        limpiarFormApoderado();
        ocultarFormApoderado();

        // Restaurar texto del botón
        if (btnAnadirFamiliar) btnAnadirFamiliar.textContent = 'Añadir familiar a la lista';

        // Actualizar vista
        renderizar();
    }

    btnMostrarBuscarApoderado?.addEventListener('click', () => {
        // Si estamos editando, cancelar primero
        if (editandoFamiliarIndex >= 0) {
            cancelarEdicionFamiliar();
        }
        if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = '';
        mostrarFormApoderado();
        limpiarFormApoderado();
    });

    btnMostrarNuevoApoderado?.addEventListener('click', () => {
        // Si estamos editando, cancelar primero
        if (editandoFamiliarIndex >= 0) {
            cancelarEdicionFamiliar();
        }
        if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = 'none';
        mostrarFormApoderado();
        limpiarFormApoderado();
    });

    btnBuscarApoderado?.addEventListener('click', () => {
        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.');
                }
            })
            .catch(() => alert('Error al buscar apoderado.'));
    });

    // --- NUEVO: Botón para cancelar solo el formulario de apoderado ---
    const btnCancelarApoderado = document.getElementById('btnCancelarApoderado');
    if (btnCancelarApoderado) {
        btnCancelarApoderado.addEventListener('click', () => {
            limpiarFormApoderado();
            deshabilitarCamposApoderado(false); // Habilitar campos para próximo uso
            ocultarFormApoderado();
        });
    }

    // --- LÓGICA PARA AÑADIR Y QUITAR FAMILIARES DE LA LISTA ---
    function editarFamiliar(index) {
        const familiar = familiaresAgregados[index];
        if (!familiar) return;

        // Si ya estamos editando otro familiar, cancelar la edición anterior
        if (editandoFamiliarIndex >= 0 && editandoFamiliarIndex !== index) {
            cancelarEdicionFamiliar();
        }

        // Guardar estado de edición
        editandoFamiliarIndex = index;
        familiarOriginalBackup = { ...familiar }; // Crear copia profunda

        // Rellenar el formulario
        camposApoderado.forEach(c => {
            const input = document.getElementById(`apoderado_${c}`);
            if (input) {
                if (c === 'parentesco_especifico') {
                    // Para parentesco específico, usar el valor específico si existe
                    input.value = familiar.parentesco_especifico || '';
                } else if (c === 'parentesco') {
                    // Para parentesco genérico, mostrar el específico si existe, sino el genérico
                    input.value = familiar.parentesco_especifico || familiar[c] || '';
                } else {
                    input.value = familiar[c] || '';
                }
            }
        });

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

        // Mostrar el formulario y ocultar la búsqueda
        mostrarFormApoderado();
        if (seccionBuscarApoderado) seccionBuscarApoderado.style.display = 'none';

        // Cambiar texto del botón para claridad
        if (btnAnadirFamiliar) btnAnadirFamiliar.textContent = 'Actualizar familiar en la lista';
    }

    // Usa la función del helper para renderizar la lista
    function renderizar() {
        renderizarListaFamiliares(listaFamiliaresDiv, familiaresAgregados, true); // true = con botón de editar
    }

    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 = '';

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

            // Recolectar roles por separado, ya que no son un campo de texto estándar
            const selectedRoles = [];
            document.querySelectorAll('input[name="apoderado_rol[]"]:checked').forEach(chk => {
                selectedRoles.push(chk.value);
            });
            // Añadir los roles al objeto 'apoderado'
            apoderado.rol = selectedRoles.join(', ');

            if (!apoderado.run || !validarRun(apoderado.run) || !apoderado.nombre || !apoderado.ap_paterno) {
                if (!apoderado.run) mostrarError('run', 'El RUN es obligatorio.');
                else if (!validarRun(apoderado.run)) mostrarError('run', 'El RUN es inválido.');
                if (!apoderado.nombre) mostrarError('nombre', 'El Nombre es obligatorio.');
                if (!apoderado.ap_paterno) mostrarError('ap_paterno', 'El Apellido Paterno es obligatorio.');
                return;
            }

            // Normalizar RUN para comparación (formato consistente)
            const runNormalizado = apoderado.run.replace(/[^0-9kK]/g, '').toUpperCase();
            const runFormateado = runNormalizado.length > 1 ?
                runNormalizado.slice(0, -1) + '-' + runNormalizado.slice(-1) : runNormalizado;
            apoderado.run = runFormateado;

            // Verificar si el RUN ya existe (pero permitir si estamos editando el mismo familiar)
            if (editandoFamiliarIndex >= 0) {
                // Estamos editando un familiar existente - actualizar directamente
                console.log('Actualizando familiar en índice:', editandoFamiliarIndex);
                familiaresAgregados[editandoFamiliarIndex] = apoderado;
                editandoFamiliarIndex = -1;
                familiarOriginalBackup = null;
            } else {
                // Estamos agregando un nuevo familiar - verificar duplicados
                const runExistente = familiaresAgregados.findIndex(f => {
                    const runExistNorm = f.run.replace(/[^0-9kK]/g, '').toUpperCase();
                    const runExistFormat = runExistNorm.length > 1 ?
                        runExistNorm.slice(0, -1) + '-' + runExistNorm.slice(-1) : runExistNorm;
                    return runExistFormat === runFormateado;
                });

                if (runExistente >= 0) {
                    alert('Este familiar ya ha sido agregado a la lista.');
                    return;
                }

                familiaresAgregados.push(apoderado);
            }

            renderizar();
            limpiarFormApoderado();
            deshabilitarCamposApoderado(false); // Habilitar campos para próximo uso
            ocultarFormApoderado();
            btnAnadirFamiliar.textContent = 'Añadir familiar a la lista';
        });
    }

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

        const index = button.dataset.index;

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

        if (button.classList.contains('btn-editar-familiar')) {
            editarFamiliar(index);
        }
    });

    // Event listener para el botón cancelar edición familiar
    const btnCancelarEdicionFamiliar = document.getElementById('btnCancelarEdicionFamiliar');
    if (btnCancelarEdicionFamiliar) {
        btnCancelarEdicionFamiliar.addEventListener('click', () => {
            cancelarEdicionFamiliar();
        });
    }

    // --- CARGA INICIAL DE DATOS PARA LA EDICIÓN ---
    if (matriculaIdParaEditar) {
        cargarDatosAlumno(matriculaIdParaEditar);
    } else {
        document.body.innerHTML = '<div class="alert alert-danger">No se especificó un ID de matrícula para editar.</div>';
    }

    // Configurar el botón "Cancelar" para que use la función de redirección
    const btnCancelarMatricula = document.getElementById('btnCancelarMatricula');
    if (btnCancelarMatricula) {
        btnCancelarMatricula.style.display = 'inline-block'; // Asegurarse de que sea visible
        btnCancelarMatricula.addEventListener('click', (e) => {
            e.preventDefault(); // Prevenir cualquier comportamiento por defecto del botón
            if (confirm('¿Estás seguro de que deseas cancelar la edición? Se perderán los cambios no guardados.')) {
                redirectToLibroMatricula();
            }
        });
    }

    // --- LÓGICA DE GUARDADO ---
    document.getElementById('formNuevaMatricula').addEventListener('submit', async function (e) {
        e.preventDefault();

        let guardadoExitoso = false;
        let respInfo = null;

        if (!alumnoId) {
            alert('No se ha podido identificar al alumno. Por favor, recarga la página.');
            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 tener al menos un familiar en la lista para guardar la matrícula.');
            return;
        }

        // Verificación adicional para el grado_id
        if (!gradoId) {
            alert('No se ha podido identificar el grado del alumno. Por favor, recarga la página.');
            return;
        }

        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
        };
        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
        };

        // Obtener el año escolar desde los parámetros de la URL para enviarlo al backend
        const params = new URLSearchParams(window.location.search);
        const anio_escolar = params.get('anio');

        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 las asociaciones
            const resAsociar = await fetch(src('asociar_alumno_familiar.php'), {
                method: 'POST', headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ alumno_id: alumnoId, familiares: familiaresGuardados })
            });
            const respAsociar = await resAsociar.json();
            if (!resAsociar.ok || !respAsociar.success) {
                throw new Error(respAsociar.error || 'Error al asociar familiares con el alumno.');
            }

            // 3. Guardar la información social y de salud
            const resInfo = await fetch(src('guardar_info_alumno.php'), {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ alumno_id: alumnoId, fecha_matricula, grado_id: gradoId, anio_escolar: anio_escolar, social, salud })
            });
            if (!resInfo.ok) {
                const errorData = await resInfo.json().catch(() => ({ error: `Error del servidor (${resInfo.status})` }));
                throw new Error(errorData.error || `Error desconocido al guardar la información del alumno.`);
            }
            respInfo = await resInfo.json();
            if (!respInfo.success) throw new Error(respInfo.error);

            guardadoExitoso = true;
        } catch (error) {
            console.error('Error al guardar:', error);
            alert('Error al guardar: ' + error.message);
        } finally {
            if (guardadoExitoso) {
                alert('Información actualizada correctamente.');
                if (confirm('¿Desea imprimir la ficha de matrícula actualizada?')) {
                    window.open(view(`ficha_pdf.php?matricula_id=${matriculaIdParaEditar}&nocache=${Date.now()}`), '_blank');
                }

                // --- LÓGICA DE REDIRECCIÓN CON FILTROS ---
                // Usar la función centralizada que ya maneja correctamente los filtros
                redirectToLibroMatricula();
            }
        }
    });

    // --- LÓGICA MEJORADA PARA VERIFICAR RUN DEL APODERADO ---
    // Se llama a la función centralizada desde form_helpers.js
    configurarVerificacionRunFamiliar(
        'apoderado_run',
        'apoderado_run_feedback',
        camposApoderado
    );

    // --- LÓGICA PARA COPIAR DOMICILIO (USANDO DELEGACIÓN DE EVENTOS) ---
    // Se asigna el listener al documento para que funcione aunque el botón se cargue dinámicamente.
    document.addEventListener('click', function (e) {
        // Si el elemento clickeado es el botón de copiar domicilio
        if (e.target && e.target.id === 'btnCopiarDomicilioAlumno') {
            e.preventDefault(); // Prevenir el scroll al inicio de la página
            const domicilioAlumnoInput = document.getElementById('social_domicilio');
            const domicilioApoderadoInput = document.getElementById('apoderado_domicilio');

            if (domicilioAlumnoInput && domicilioApoderadoInput) {
                domicilioApoderadoInput.value = domicilioAlumnoInput.value;
            }
        }
    });
});
// ============================================
// NUEVA FUNCIONALIDAD: Verificación Automática de RUN
// ============================================

// Verificación automática al salir del campo RUN
document.getElementById('apoderado_run')?.addEventListener('blur', async function (e) {
    const run = e.target.value.trim();

    if (!run) {
        clearFieldFeedback(e.target);
        return;
    }

    // Validar formato RUT primero usando el sistema de validaciones
    const rutResult = validateRUT(run);
    if (!rutResult.valid) {
        showFieldError(e.target, rutResult.message);
        return;
    }

    // Formatear el RUN automáticamente
    e.target.value = rutResult.formatted;

    // Buscar apoderado en BD
    try {
        const response = await fetch(`../src/verificar_familiar.php?run=${encodeURIComponent(run)}`);
        const data = await response.json();

        if (data.existe) {
            // Apoderado encontrado - rellenar campos
            showFieldSuccess(e.target, '✓ Familiar encontrado! Datos cargados automáticamente');

            const familiar = data.familiar;

            // Rellenar campos del formulario
            document.getElementById('apoderado_nombre').value = familiar.nombre || '';
            document.getElementById('apoderado_ap_paterno').value = familiar.ap_paterno || '';
            document.getElementById('apoderado_ap_materno').value = familiar.ap_materno || '';
            document.getElementById('apoderado_domicilio').value = familiar.domicilio || '';
            document.getElementById('apoderado_parentesco').value = familiar.parentesco || '';
            document.getElementById('apoderado_telefono').value = familiar.telefono || '';
            document.getElementById('apoderado_telefono2').value = familiar.telefono2 || '';
            document.getElementById('apoderado_email').value = familiar.email || '';
            document.getElementById('apoderado_escolaridad').value = familiar.escolaridad || '';
            document.getElementById('apoderado_profesion').value = familiar.profesion || '';
            document.getElementById('apoderado_actividad_laboral').value = familiar.actividad_laboral || '';

            // Deshabilitar campos (datos existentes)
            deshabilitarCamposApoderado(true);
        } else {
            // Apoderado no encontrado - permitir ingreso manual
            showFieldSuccess(e.target, '✓ RUN válido. Puede ingresar los datos del nuevo familiar');
            limpiarCamposApoderado();
            deshabilitarCamposApoderado(false);
        }
    } catch (error) {
        showFieldError(e.target, 'Error al verificar familiar');
        console.error('Error al verificar familiar:', error);
    }
});

// Función para deshabilitar/habilitar campos del apoderado
function deshabilitarCamposApoderado(deshabilitar) {
    const campos = [
        'apoderado_nombre', 'apoderado_ap_paterno', 'apoderado_ap_materno',
        'apoderado_domicilio', 'apoderado_parentesco',
        'apoderado_telefono', 'apoderado_telefono2', 'apoderado_email',
        'apoderado_escolaridad', 'apoderado_profesion', 'apoderado_actividad_laboral'
    ];

    campos.forEach(id => {
        const campo = document.getElementById(id);
        if (campo) {
            campo.disabled = deshabilitar;
            if (deshabilitar) {
                campo.classList.add('bg-light');
            } else {
                campo.classList.remove('bg-light');
            }
        }
    });
}

// ============================================
// NUEVA FUNCIONALIDAD: Búsqueda Avanzada por Nombre
// ============================================

// Abrir modal de búsqueda avanzada
document.getElementById('btnBusquedaAvanzadaApoderado')?.addEventListener('click', function () {
    const modal = new bootstrap.Modal(document.getElementById('modalBusquedaAvanzadaApoderado'));
    modal.show();

    // Limpiar búsqueda anterior
    document.getElementById('busquedaAvanzadaInput').value = '';
    document.getElementById('resultadosBusquedaAvanzada').innerHTML = `
        <div class="text-center text-muted py-4">
            <i class="bi bi-search fs-1"></i>
            <p class="mt-2">Escriba para buscar familiares existentes</p>
        </div>
    `;

    // Focus en el input
    setTimeout(() => {
        document.getElementById('busquedaAvanzadaInput').focus();
    }, 500);
});

// Búsqueda en tiempo real (con debounce)
let timeoutBusquedaAvanzada;
document.getElementById('busquedaAvanzadaInput')?.addEventListener('input', function (e) {
    const query = e.target.value.trim();

    clearTimeout(timeoutBusquedaAvanzada);

    if (query.length < 2) {
        document.getElementById('resultadosBusquedaAvanzada').innerHTML = `
            <div class="text-center text-muted py-4">
                <i class="bi bi-search fs-1"></i>
                <p class="mt-2">Escriba al menos 2 caracteres para buscar</p>
            </div>
        `;
        return;
    }

    timeoutBusquedaAvanzada = setTimeout(async () => {
        try {
            const response = await fetch(`../src/buscar_familiar.php?q=${encodeURIComponent(query)}`);
            const familiares = await response.json();

            if (familiares.length === 0) {
                document.getElementById('resultadosBusquedaAvanzada').innerHTML = `
                    <div class="alert alert-info">
                        <i class="bi bi-info-circle me-2"></i>
                        No se encontraron familiares con ese nombre
                    </div>
                `;
                return;
            }

            // Renderizar resultados
            let html = '<div class="list-group">';
            familiares.forEach(fam => {
                html += `
                    <button type="button" class="list-group-item list-group-item-action" data-familiar='${JSON.stringify(fam)}'>
                        <div class="d-flex w-100 justify-content-between">
                            <h6 class="mb-1">${fam.nombre} ${fam.ap_paterno} ${fam.ap_materno || ''}</h6>
                            <small class="text-muted">${fam.run}</small>
                        </div>
                        <p class="mb-1 small text-muted">
                            <i class="bi bi-telephone me-1"></i>${fam.telefono || 'Sin teléfono'}
                            ${fam.email ? `<i class="bi bi-envelope ms-3 me-1"></i>${fam.email}` : ''}
                        </p>
                    </button>
                `;
            });
            html += '</div>';

            document.getElementById('resultadosBusquedaAvanzada').innerHTML = html;

        } catch (error) {
            console.error('Error en búsqueda avanzada:', error);
            document.getElementById('resultadosBusquedaAvanzada').innerHTML = `
                <div class="alert alert-danger">
                    <i class="bi bi-exclamation-triangle me-2"></i>
                    Error al buscar familiares
                </div>
            `;
        }
    }, 300); // Debounce de 300ms
});

// Seleccionar familiar de los resultados
document.getElementById('resultadosBusquedaAvanzada')?.addEventListener('click', function (e) {
    const button = e.target.closest('button[data-familiar]');
    if (!button) return;

    const familiar = JSON.parse(button.dataset.familiar);

    // Rellenar el formulario
    document.getElementById('apoderado_run').value = familiar.run || '';
    document.getElementById('apoderado_nombre').value = familiar.nombre || '';
    document.getElementById('apoderado_ap_paterno').value = familiar.ap_paterno || '';
    document.getElementById('apoderado_ap_materno').value = familiar.ap_materno || '';
    document.getElementById('apoderado_domicilio').value = familiar.domicilio || '';
    document.getElementById('apoderado_parentesco').value = familiar.parentesco || '';
    document.getElementById('apoderado_telefono').value = familiar.telefono || '';
    document.getElementById('apoderado_telefono2').value = familiar.telefono2 || '';
    document.getElementById('apoderado_email').value = familiar.email || '';
    document.getElementById('apoderado_escolaridad').value = familiar.escolaridad || '';
    document.getElementById('apoderado_profesion').value = familiar.profesion || '';
    document.getElementById('apoderado_actividad_laboral').value = familiar.actividad_laboral || '';

    // Mostrar feedback de éxito
    showFieldSuccess(document.getElementById('apoderado_run'), '✓ Familiar seleccionado');

    // Deshabilitar campos
    deshabilitarCamposApoderado(true);

    // Cerrar modal
    bootstrap.Modal.getInstance(document.getElementById('modalBusquedaAvanzadaApoderado')).hide();
});
