/**
 * Maneja el conteo de palabras para TRAUMA 2025
 * Este script gestiona el conteo y validación de palabras en campos de texto
 */

document.addEventListener('DOMContentLoaded', function() {
    // Configuración de límites para cada campo de texto
    const textareaLimits = {
        'title': { min: 1, max: 30 },
        'introduction': { min: 50, max: 190 },
        'methods': { min: 30, max: 170 },
        'results': { min: 50, max: 190 },
        'conclusions': { min: 30, max: 170 }
    };
    
    // Objeto para almacenar traducciones
    let translations = {
        words: 'palabras',
        totalWords: 'Total de palabras'
    };
    
    // Función para contar palabras (considerando palabras en varios idiomas)
    function countWords(str) {
        return str.trim().split(/\s+/).filter(word => word.length > 0).length;
    }
    
    // Actualizar contadores de palabras en todos los campos relevantes
    function updateWordCounts() {
        let totalWords = 0;
        let maxTotalWords = 0;
        
        for (const [id, limits] of Object.entries(textareaLimits)) {
            const textarea = document.getElementById(id);
            if (!textarea) continue;
            
            const wordCount = countWords(textarea.value);
            const countElement = document.getElementById(`${id}-word-count`);
            if (!countElement) continue;
            
            const progressBar = countElement.querySelector('.progress');
            const countSpan = countElement.querySelector('span');
            
            // Actualizar contador y barra de progreso
            countSpan.textContent = `${wordCount}/${limits.max} ${translations.words}`;
            
            // Calcular porcentaje para la barra de progreso
            const percentage = Math.min((wordCount / limits.max) * 100, 100);
            progressBar.style.width = `${percentage}%`;
            
            // Aplicar estilo de error si no cumple con los límites
            if ((textarea.value.trim() !== '' && wordCount < limits.min) || wordCount > limits.max) {
                textarea.classList.add('error');
                countElement.classList.add('error');
            } else {
                textarea.classList.remove('error');
                countElement.classList.remove('error');
            }
            
            // Acumular para el total
            totalWords += wordCount;
            maxTotalWords += limits.max;
        }
        
        // Si existe un contador total, actualizarlo
        const totalElement = document.getElementById('total-word-count');
        if (totalElement) {
            const totalSpan = totalElement.querySelector('span');
            const totalProgressBar = totalElement.querySelector('.progress-bar');
            
            if (totalSpan) {
                totalSpan.textContent = `${translations.totalWords}: ${totalWords}/${maxTotalWords}`;
            }
            
            if (totalProgressBar) {
                const totalPercentage = (totalWords / maxTotalWords) * 100;
                totalProgressBar.style.width = `${totalPercentage}%`;
            }
            
            // Verificar si el total excede el límite
            if (totalWords > maxTotalWords) {
                totalElement.classList.add('error');
            } else {
                totalElement.classList.remove('error');
            }
        }
        
        return { 
            isValid: totalWords <= maxTotalWords && totalWords >= 1, 
            wordCounts: { 
                total: totalWords, 
                ...Object.fromEntries(Object.entries(textareaLimits).map(([id]) => {
                    const el = document.getElementById(id);
                    return [id, el ? countWords(el.value) : 0];
                }))
            } 
        };
    }
    
    // Verificar si un campo específico cumple con sus límites de palabras
    function validateWordCount(id) {
        if (!textareaLimits[id]) return true;
        
        const textarea = document.getElementById(id);
        if (!textarea) return true;
        
        const wordCount = countWords(textarea.value);
        const limits = textareaLimits[id];
        
        return (textarea.value.trim() === '' || (wordCount >= limits.min && wordCount <= limits.max));
    }
    
    // Inicializar eventos para los campos de texto
    function initWordCounters() {
        // Cargar traducciones si están disponibles en la página
        if (window.wordCounterTranslations) {
            translations = {...translations, ...window.wordCounterTranslations};
        }
        
        // Adjuntar listeners para el conteo de palabras en tiempo real
        for (const id in textareaLimits) {
            const textarea = document.getElementById(id);
            if (textarea) {
                textarea.addEventListener('input', function() {
                    updateWordCounts();
                });
                
                // Convertir título a mayúsculas automáticamente
                if (id === 'title') {
                    textarea.addEventListener('blur', function() {
                        this.value = this.value.toUpperCase();
                        updateWordCounts();
                    });
                }
            }
        }
        
        // Actualizar contadores iniciales
        updateWordCounts();
    }
    
    // Inicializar
    initWordCounters();
    
    // Exponer funciones para uso en otros scripts
    window.wordCounter = {
        countWords,
        updateWordCounts,
        validateWordCount,
        textareaLimits
    };
});