$(document).ready(function() {
    const form = $('#ControlHistory');
    const especialitySelect = $('#especiality');

    // Función para manejar el estado de las pestañas
    function handleTabsState() {
        if (especialitySelect.val() === "SELECT") {
            $('#myTabControlHistory a').not('#form-history-tab').addClass('disabled');
        } else {
            $('#myTabControlHistory a').removeClass('disabled');
        }
    }

    // Eventos de las pestañas
    $('#myTabControlHistory a').on('click', function(e) {
        if (especialitySelect.val() === "SELECT") {
            e.preventDefault();
            alert("Por favor seleccione una especialidad primero");
            return false;
        }
    });

    // Eventos de los botones de navegación
    $("#nextToExamPhysical").on("click", function (e) {
        if (especialitySelect.val() === "SELECT") {
            e.preventDefault();
            alert("Por favor seleccione una especialidad primero");
            return false;
        }
        $("#test-tab").tab('show');
    });

    $("#nextToFiles").on("click", function (e) {
        if (especialitySelect.val() === "SELECT") {
            e.preventDefault();
            alert("Por favor seleccione una especialidad primero");
            return false;
        }
        $("#file-tab").tab('show');
    });

    // Manejar cambio de especialidad
    especialitySelect.on('change', function() {
        handleTabsState();
        validateForm();
    });

    // Manejar cambios en campos requeridos para activar/desactivar botón de envío
    $('#title, #summary, #diagnosis').on('input', function() {
        validateForm();
    });

    // Validar formulario y actualizar estado del botón de envío
    function validateForm() {
        const especiality = especialitySelect.val();
        const title = $('#title').val().trim();
        const summary = $('#summary').val().trim();
        const diagnosis = $('#diagnosis').val().trim();
        
        const isValid = (
            especiality !== 'SELECT' && 
            title !== '' && 
            summary !== '' && 
            diagnosis !== ''
        );
        
        $("#btnSubmitControlHistory").prop('disabled', !isValid);
        
        return isValid;
    }

    // Mostrar/ocultar indicador de carga
    function showLoading() {
        $('#modalLoading').modal('show');
    }
    
    function hideLoading() {
        $('#modalLoading').modal('hide');
    }

    // Enviar formulario
    $("#btnSubmitControlHistory").on("click", function(e) {
        e.preventDefault();
        
        if (!validateForm()) {
            return false;
        }
        
        showLoading();
        
        try {
            // Verificar si hay una configuración activa de exámenes médicos
            const hasCustomConfiguration = window.currentMedicalExams && 
                                        window.currentMedicalExams.length > 0 && 
                                        window.currentMedicalExams.length !== window.allAvailableMedicalExams.length;
            
            if (hasCustomConfiguration) {
                console.log("Usando configuración personalizada de exámenes médicos:", window.currentMedicalExams);
                
                // Crear un formulario temporal con solo los campos necesarios
                const formData = new FormData(form[0]);
                const tempForm = document.createElement('form');
                tempForm.method = form[0].method;
                tempForm.action = form[0].action;
                tempForm.enctype = form[0].enctype;
                
                // Añadir todos los campos del formulario excepto phisycalExams
                for (const pair of formData.entries()) {
                    if (!pair[0].startsWith('phisycalExams[')) {
                        tempForm.appendChild(createHiddenInput(pair[0], pair[1]));
                    }
                }
                
                // Añadir solo los exámenes físicos configurados
                form.find('.phisycalExams').each(function() {
                    const name = $(this).attr('name');
                    if (!name) return;
                    
                    const match = name.match(/phisycalExams\[(.*?)\]/);
                    if (!match) return;
                    
                    const examKey = match[1];
                    if (window.currentMedicalExams.includes(examKey)) {
                        tempForm.appendChild(createHiddenInput(name, $(this).val()));
                    }
                });
                
                // Añadir el formulario temporal al documento
                document.body.appendChild(tempForm);
                tempForm.style.display = 'none';
                
                // Timeout de seguridad para asegurar que el loading se cierre
                setTimeout(() => {
                    hideLoading();
                }, 5000);
                
                // Enviar el formulario temporal
                tempForm.submit();
            } else {
                console.log("No hay configuración personalizada o se están usando todos los exámenes. Enviando formulario completo");
                
                // Timeout de seguridad para asegurar que el loading se cierre
                setTimeout(() => {
                    hideLoading();
                }, 5000);
                
                // Si no hay configuración o se están usando todos los exámenes, enviar el formulario original con todos los campos
                form[0].submit();
            }
        } catch (error) {
            console.error("Error al enviar formulario:", error);
            hideLoading();
            alert("Ocurrió un error al intentar enviar el formulario. Por favor, inténtelo de nuevo.");
        }
    });
    
    // Función auxiliar para crear un input hidden
    function createHiddenInput(name, value) {
        const input = document.createElement('input');
        input.type = 'hidden';
        input.name = name;
        input.value = value;
        return input;
    }

    // Inicializar el estado de las pestañas y botón de envío
    handleTabsState();
    validateForm();
    
    // Mostrar el acordeón de Bootstrap
    if (typeof bootstrap !== 'undefined' && bootstrap.Collapse) {
        const accordionItems = document.querySelectorAll('.accordion-collapse');
        accordionItems.forEach(item => {
            new bootstrap.Collapse(item, {
                toggle: false
            });
        });
    }
    
    // Inicializar el acordeón manualmente si no se está usando Bootstrap 5
    $('.accordion-button').on('click', function() {
        const target = $(this).attr('data-bs-target') || $(this).attr('data-target');
        if (!target) return;
        
        // Cerrar todos los demás acordeones del mismo grupo
        const parent = $(this).attr('data-bs-parent') || $(this).attr('data-parent');
        if (parent) {
            $(parent + ' .accordion-collapse.show').not(target).removeClass('show');
            $(parent + ' .accordion-button').not(this).addClass('collapsed').attr('aria-expanded', 'false');
        }
        
        // Alternar el acordeón actual
        $(target).toggleClass('show');
        $(this).toggleClass('collapsed');
        const isExpanded = $(this).attr('aria-expanded') === 'true';
        $(this).attr('aria-expanded', !isExpanded);
    });
}); 