/**
 * CALCULADORAS MÉDICAS - LÓGICA DE NEGOCIO
 * Provee funcionalidad para la suite de herramientas flotantes.
 */

const CalculadorasMedicas = {
    isOpen: false,
    activeCalc: null,

    init: function() {
        // Event Listeners para toggles
        document.querySelectorAll('.calc-btn-toggle').forEach(btn => {
            btn.addEventListener('click', (e) => {
                const calcType = btn.dataset.calc;
                this.togglePanel(calcType, btn);
            });
        });

        // Event Listener para cerrar
        document.querySelector('.btn-close-calc').addEventListener('click', () => {
            this.closePanel();
        });

        // Inicializar Gestograma si existe
        if(document.getElementById('gesto_fum')) {
            this.initGestograma();
        }
    },

    togglePanel: function(calcType, btnElement) {
        const panel = document.getElementById('calc-main-panel');
        const allContents = document.querySelectorAll('.calc-content');
        const targetContent = document.getElementById('calc-' + calcType);

        // Si hago click en el mismo botón activo, cierro
        if (this.isOpen && this.activeCalc === calcType) {
            this.closePanel();
            return;
        }

        // Desactivar botones previos
        document.querySelectorAll('.calc-btn-toggle').forEach(b => b.classList.remove('active'));
        
        // Activar botón actual
        btnElement.classList.add('active');

        // Mostrar contenido correcto
        allContents.forEach(c => c.classList.remove('active'));
        if (targetContent) {
            targetContent.classList.add('active');
            // Actualizar título
            const title = btnElement.getAttribute('title');
            document.querySelector('.calc-header h3').textContent = title;
        }

        // Abrir panel
        panel.classList.add('open');
        this.isOpen = true;
        this.activeCalc = calcType;
    },

    closePanel: function() {
        const panel = document.getElementById('calc-main-panel');
        panel.classList.remove('open');
        document.querySelectorAll('.calc-btn-toggle').forEach(b => b.classList.remove('active'));
        this.isOpen = false;
        this.activeCalc = null;
    },

    /* =========================================
       MÓDULO GESTOGRAMA
       ========================================= */
    initGestograma: function() {
        const fumInput = document.getElementById('gesto_fum');
        const fppInput = document.getElementById('gesto_fpp');
        
        // Calcular al cambiar FUM
        fumInput.addEventListener('change', () => {
            if(fumInput.value) {
                this.calcularGestograma(fumInput.value);
            }
        });

        // Setear fecha de hoy como max para FUM por defecto? No, mejor dejar libre.
    },

    calcularGestograma: function(fumStr) {
        const fumDate = new Date(fumStr + 'T00:00:00'); // Force local time handling
        const today = new Date();
        today.setHours(0,0,0,0); // Ignorar hora
        
        // 1. Calcular Edad Gestacional (Dificultad: diferencia en milisegundos)
        const diffTime = Math.abs(today - fumDate);
        const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 
        
        // Si FUM es futuro (error), manejar
        if (fumDate > today) {
            this.mostrarResultadoGesto("Error", "La fecha no puede ser futura", "");
            return;
        }

        const semanas = Math.floor(diffDays / 7);
        const diasExtras = diffDays % 7;

        // 2. Calcular FPP (Regla de Naegele: +7 dias, -3 meses, +1 año)
        // O simplemente +280 días para aproximación estándar
        const fppDate = new Date(fumDate);
        fppDate.setDate(fumDate.getDate() + 280);
        
        const options = { year: 'numeric', month: 'long', day: 'numeric' };
        const fppStr = fppDate.toLocaleDateString('es-ES', options);

        // 3. Trimestre
        let trimestre = "1er Trimestre";
        if (semanas >= 13 && semanas < 27) trimestre = "2do Trimestre";
        if (semanas >= 27) trimestre = "3er Trimestre";

        // 4. Actualizar UI
        document.getElementById('res_semanas').innerText = `${semanas} Semanas`;
        document.getElementById('res_dias').innerText = `+ ${diasExtras} días`;
        document.getElementById('res_fpp').innerText = fppStr;
        document.getElementById('res_trimestre').innerText = trimestre;

        // 5. Barra de progreso
        const porcentaje = Math.min(100, (semanas / 40) * 100);
        document.getElementById('gesto_bar').style.width = `${porcentaje}%`;
    },

    mostrarResultadoGesto: function(main, sub, sub2) {
        document.getElementById('res_semanas').innerText = main;
        document.getElementById('res_dias').innerText = sub;
        document.getElementById('res_fpp').innerText = sub2;
    }
};

// Iniciar al cargar DOM
document.addEventListener('DOMContentLoaded', function() {
    CalculadorasMedicas.init();
});
