 /**
  * Sistema unificado de filtros dependientes
  * Optimiza las consultas y actualiza todos los filtros de una vez
  */
 
 // Usar la variable URL_PATH que ya está definida globalmente
 // No redeclararla para evitar conflictos

/**
 * Actualiza todos los filtros dependientes de una sola vez
 * @param {Object} filtrosActivos - Objeto con los filtros actualmente seleccionados
 */
function actualizarTodosFiltrosDependientes(filtrosActivos = {}) {
    console.log('Actualizando todos los filtros con:', filtrosActivos);
    
    // Construir parámetros para la petición
    const params = new URLSearchParams();
    
    Object.keys(filtrosActivos).forEach(key => {
        if (filtrosActivos[key] && filtrosActivos[key] !== '0') {
            params.append(key, filtrosActivos[key]);
        }
    });
    console.log('Params filtrosActivos: ' + params.toString());
    $.ajax({
        url: URL_PATH + '/ViewDataV1/obtenerFiltrosDependientes?' + params.toString(),
        type: 'GET',
        success: function(response) {
            console.log('Datos de filtros obtenidos:', response);
            
            // Actualizar cada filtro con los datos recibidos
            if (filtrosActivos.periodo == '0' || filtrosActivos.periodo == null || filtrosActivos.periodo == '') {
                actualizarSelectPeriodos(response.periodos, filtrosActivos.periodo);
            }
            actualizarSelectEstadosAcademicos(response.estados_academicos, filtrosActivos.estado_academico);
            actualizarSelectProgramas(response.programas, filtrosActivos.programa);
            actualizarSelectCursos(response.cursos, filtrosActivos.curso);
            actualizarSelectArchivos(response.archivos, filtrosActivos.archivo);
            actualizarSelectEstudiantes(response.estudiantes, filtrosActivos.estudiante);
        },
        error: function(xhr, status, error) {
            console.error('Error al obtener filtros dependientes:', error + ' - Código de estado HTTP: ' + xhr.status + ' - ' + xhr.statusText + '. Respuesta del servidor:', xhr.responseText);
        }
    });
}

/**
 * Actualizar select de periodos
 */
function actualizarSelectPeriodos(periodos, valorActual = null) {
    const $select = $('#periodo');
    const valorAnterior = $select.val();
    
    $select.empty().append('<option value="0">Todos los períodos</option>');
    
    periodos.forEach(function(periodo) {
        const selected = (valorActual && valorActual == periodo.Periodo) ? 'selected' : '';
        $select.append(`<option value="${periodo.Periodo}" ${selected}>${periodo.Periodo}</option>`);
    });
    
    // Mantener selección anterior si no hay valor específico
    if (!valorActual && valorAnterior && valorAnterior !== '0') {
        $select.val(valorAnterior);
    }
}

/**
 * Actualizar select de estados académicos
 */
function actualizarSelectEstadosAcademicos(estados, valorActual = null) {
    const $select = $('#estado_academico');
    const valorAnterior = $select.val();
    
    $select.empty().append('<option value="0">Todos los estados</option>');
    
    estados.forEach(function(estado) {
        const selected = (valorActual && valorActual == estado.EstadoAcademicoId) ? 'selected' : '';
        $select.append(`<option value="${estado.EstadoAcademicoId}" ${selected}>${estado.EstadoAcademico} - ${estado.NombreEstado}</option>`);
    });
    
    if (!valorActual && valorAnterior && valorAnterior !== '0') {
        $select.val(valorAnterior);
    }
    
    // Reinicializar Select2 si está presente
    if ($select.hasClass('select2-hidden-accessible')) {
        $select.select2();
    }
}

/**
 * Actualizar select de programas
 */
function actualizarSelectProgramas(programas, valorActual = null) {
    const $select = $('#proyecto_curricular');
    const valorAnterior = $select.val();
    
    $select.empty().append('<option value="0">Todos los programas</option>');
    
    programas.forEach(function(programa) {
        const selected = (valorActual && valorActual == programa.ProgramaId) ? 'selected' : '';
        const nombreCorto = programa.Nombre.length > 30 ? programa.Nombre.substring(0, 30) + '...' : programa.Nombre;
        $select.append(`<option value="${programa.ProgramaId}" ${selected}>${programa.Codigo} - ${nombreCorto}</option>`);
    });
    
    if (!valorActual && valorAnterior && valorAnterior !== '0') {
        $select.val(valorAnterior);
    }
}

/**
 * Actualizar select de cursos
 */
function actualizarSelectCursos(cursos, valorActual = null) {
    const $select = $('#espacio_academico');
    const valorAnterior = $select.val();
    
    $select.empty().append('<option value="0">Todos los cursos</option>');
    
    cursos.forEach(function(curso) {
        const selected = (valorActual && valorActual == curso.codigo) ? 'selected' : '';
        const nombreCorto = curso.nombre.length > 25 ? curso.nombre.substring(0, 25) + '...' : curso.nombre;
        $select.append(`<option value="${curso.codigo}" ${selected}>${curso.codigo} - ${nombreCorto}</option>`);
    });
    
    if (!valorActual && valorAnterior && valorAnterior !== '0') {
        $select.val(valorAnterior);
    }
}

/**
 * Actualizar select de archivos
 */
function actualizarSelectArchivos(archivos, valorActual = null) {
    const $select = $('#archivo');
    const valorAnterior = $select.val();
    
    $select.empty().append('<option value="0">Todos los archivos</option>');
    
    archivos.forEach(function(archivo) {
        const selected = (valorActual && valorActual == archivo.ArchivoId) ? 'selected' : '';
        const nombreCorto = archivo.NombreArchivo.length > 25 ? archivo.NombreArchivo.substring(0, 25) + '...' : archivo.NombreArchivo;
        $select.append(`<option value="${archivo.ArchivoId}" ${selected}>${archivo.ArchivoId} - ${nombreCorto}</option>`);
    });
    
    if (!valorActual && valorAnterior && valorAnterior !== '0') {
        $select.val(valorAnterior);
    }
}

/**
 * Actualizar select de estudiantes
 */
function actualizarSelectEstudiantes(estudiantes, valorActual = null) {
    const $select = $('#estudiante');
    const valorAnterior = $select.val();
    
    $select.empty().append('<option value="0">Todos los estudiantes</option>');
    
    estudiantes.forEach(function(estudiante) {
        const selected = (valorActual && valorActual == estudiante.CodigoEstudiante) ? 'selected' : '';
        $select.append(`<option value="${estudiante.CodigoEstudiante}" ${selected}>${estudiante.CodigoEstudiante} - ${estudiante.Nombre}</option>`);
    });
    
    if (!valorActual && valorAnterior && valorAnterior !== '0') {
        $select.val(valorAnterior);
    }
    
    // Reinicializar Select2 si está presente
    if ($select.hasClass('select2-hidden-accessible')) {
        $select.select2();
    }
}

/**
 * Obtener filtros activos del formulario
 */
function obtenerFiltrosActivos() {
    return {
        periodo: $('#periodo').val(),
        estado_academico: $('#estado_academico').val(),
        programa: $('#proyecto_curricular').val(),
        curso: $('#espacio_academico').val(),
        archivo: $('#archivo').val(),
        estudiante: $('#estudiante').val()
    };
}

 /**
  * Event listeners para los cambios en filtros
  */
 $(document).ready(function() {
     console.log('filtrosDependientes.js cargado correctamente - v2.0');
     console.log('URL_PATH disponible:', typeof window.URL_PATH !== 'undefined' ? window.URL_PATH : 'NO DEFINIDA');
     
     // Verificar que URL_PATH esté definida
     if (typeof window.URL_PATH === 'undefined') {
         console.error('ERROR: URL_PATH no está definida. Verifica que se haya cargado antes que este script.');
         return;
     }
     
     // Usar la variable global
     const URL_PATH = window.URL_PATH;
     
     // Verificar que los elementos existen
     console.log('Elementos encontrados:');
     console.log('- #periodo:', $('#periodo').length);
     console.log('- #estado_academico:', $('#estado_academico').length);
     console.log('- #proyecto_curricular:', $('#proyecto_curricular').length);
     console.log('- #espacio_academico:', $('#espacio_academico').length);
     console.log('- #archivo:', $('#archivo').length);
     console.log('- #estudiante:', $('#estudiante').length);
     
     // Cuando cambie cualquier filtro, actualizar los demás
     $('#periodo, #estado_academico, #proyecto_curricular, #espacio_academico, #archivo, #estudiante').on('change', function() {
         console.log('Filtro cambiado:', $(this).attr('id'), 'Nuevo valor:', $(this).val());
         
         const filtrosActivos = obtenerFiltrosActivos();
         console.log('Filtros activos obtenidos:', filtrosActivos);
         
         // Pequeño delay para evitar múltiples peticiones simultáneas
         clearTimeout(window.filtroTimeout);
         window.filtroTimeout = setTimeout(function() {
             console.log('Ejecutando actualizarTodosFiltrosDependientes...');
             actualizarTodosFiltrosDependientes(filtrosActivos);
         }, 300);
     });
     
     // Cargar filtros iniciales
     console.log('Cargando filtros iniciales...');
     actualizarTodosFiltrosDependientes();
 });
