/**
 * Gestión de autores para el formulario TRAUMA 2025
 * Este script maneja la funcionalidad dinámica de la sección de autores
 */

document.addEventListener('DOMContentLoaded', function() {
    // Elementos principales
    const authorCountSelect = document.getElementById('author_count');
    const authorsContainer = document.getElementById('authors-container');
    const authorTemplate = document.getElementById('author-template');
    
    // Verificar si los elementos necesarios existen
    if (!authorCountSelect || !authorsContainer || !authorTemplate) {
        console.error('No se encontraron los elementos necesarios para la sección de autores');
        return;
    }
    
    // Comprobar si hay valores guardados en el almacenamiento local
    const savedAuthorCount = localStorage.getItem('trauma2025_author_count');
    const savedAuthors = localStorage.getItem('trauma2025_authors');
    
    // Función para generar formularios de autores
    function generateAuthorForms(count) {
        console.log(`Generando formularios para ${count} autores`);
        
        // Limpiar el contenedor
        authorsContainer.innerHTML = '';
        
        // Array para almacenar datos de autores
        let authorsData = [];
        
        // Intentar cargar datos guardados si existen
        try {
            if (savedAuthors) {
                authorsData = JSON.parse(savedAuthors);
            }
        } catch (e) {
            console.error('Error al cargar datos de autores guardados:', e);
        }
        
        // Generar formularios para cada autor
        for (let i = 0; i < count; i++) {
            const authorId = i + 1;
            const authorNumber = i + 1;
            
            // Clonar el template
            const authorHtml = authorTemplate.innerHTML
                .replace(/{AUTHOR_ID}/g, authorId)
                .replace(/{AUTHOR_NUMBER}/g, authorNumber);
            
            // Crear un div para contener el formulario del autor
            const authorDiv = document.createElement('div');
            authorDiv.innerHTML = authorHtml;
            
            // Añadir al contenedor
            const authorElement = authorDiv.firstElementChild;
            authorsContainer.appendChild(authorElement);
            
            // Rellenar con datos guardados si existen
            if (authorsData[i]) {
                const authorData = authorsData[i];
                
                // Rellenar campos de texto
                const textFields = ['name', 'email', 'institution'];
                textFields.forEach(field => {
                    const input = document.getElementById(`author_${authorId}_${field}`);
                    if (input && authorData[field]) {
                        input.value = authorData[field];
                    }
                });
                
                // Rellenar selectores
                const selectFields = ['title', 'country'];
                selectFields.forEach(field => {
                    const select = document.getElementById(`author_${authorId}_${field}`);
                    if (select && authorData[field]) {
                        select.value = authorData[field];
                    }
                });
                
                // Rellenar radio buttons
                if (authorData.is_spt_member) {
                    const radio = document.getElementById(`author_${authorId}_spt_${authorData.is_spt_member}`);
                    if (radio) {
                        radio.checked = true;
                    }
                }
            }
            
            // Añadir eventos para guardar datos cuando se modifiquen
            const inputs = authorElement.querySelectorAll('input, select');
            inputs.forEach(input => {
                input.addEventListener('change', saveAuthorsData);
            });
        }
        
        // Guardar el número de autores en el almacenamiento local
        localStorage.setItem('trauma2025_author_count', count);
        
        // Inicializar validación para los nuevos campos
        if (window.formValidator && typeof window.formValidator.initFields === 'function') {
            window.formValidator.initFields();
        }
    }
    
    // Función para guardar datos de autores
    function saveAuthorsData() {
        try {
            const authorsData = [];
            const authorCards = authorsContainer.querySelectorAll('.author-card');
            
            authorCards.forEach((card, index) => {
                const authorId = index + 1;
                const authorData = {};
                
                // Guardar campos de texto
                const textFields = ['name', 'email', 'institution'];
                textFields.forEach(field => {
                    const input = document.getElementById(`author_${authorId}_${field}`);
                    if (input) {
                        authorData[field] = input.value;
                    }
                });
                
                // Guardar selectores
                const selectFields = ['title', 'country'];
                selectFields.forEach(field => {
                    const select = document.getElementById(`author_${authorId}_${field}`);
                    if (select) {
                        authorData[field] = select.value;
                    }
                });
                
                // Guardar radio buttons
                const radioYes = document.getElementById(`author_${authorId}_spt_yes`);
                const radioNo = document.getElementById(`author_${authorId}_spt_no`);
                
                if (radioYes && radioYes.checked) {
                    authorData.is_spt_member = 'yes';
                } else if (radioNo && radioNo.checked) {
                    authorData.is_spt_member = 'no';
                }
                
                authorsData.push(authorData);
            });
            
            // Guardar en almacenamiento local
            localStorage.setItem('trauma2025_authors', JSON.stringify(authorsData));
        } catch (e) {
            console.error('Error al guardar datos de autores:', e);
        }
    }
    
    // Escuchar cambios en el selector de número de autores
    authorCountSelect.addEventListener('change', function() {
        const count = parseInt(this.value, 10);
        if (!isNaN(count) && count > 0 && count <= 10) {
            generateAuthorForms(count);
        }
    });
    
    // Si hay un valor preseleccionado o guardado, generar los formularios
    if (savedAuthorCount) {
        authorCountSelect.value = savedAuthorCount;
        generateAuthorForms(parseInt(savedAuthorCount, 10));
    } else if (authorCountSelect.value) {
        generateAuthorForms(parseInt(authorCountSelect.value, 10));
    }
    
    // Añadir botón para limpiar datos guardados (útil durante pruebas)
    const clearDataButton = document.createElement('button');
    clearDataButton.type = 'button';
    clearDataButton.className = 'btn btn-sm btn-outline clear-data-btn';
    clearDataButton.style.display = 'none'; // Oculto por defecto, útil solo en desarrollo
    clearDataButton.innerHTML = '<i class="fas fa-trash-alt"></i> Limpiar datos guardados';
    clearDataButton.addEventListener('click', function() {
        localStorage.removeItem('trauma2025_author_count');
        localStorage.removeItem('trauma2025_authors');
        location.reload();
    });
    
    // Solo añadir en entorno de desarrollo
    if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
        clearDataButton.style.display = 'block';
        authorsContainer.parentNode.insertBefore(clearDataButton, authorsContainer);
    }
});