/**
 * envio-certificados.js
 * Script para manejar la interfaz de usuario del sistema de envío de certificados
 */

document.addEventListener('DOMContentLoaded', function() {
    // Inicializar tooltips de Bootstrap
    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    tooltipTriggerList.map(function(tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });
    
    // Inicializar DataTables
    const tablaCertificados = new DataTable('#tabla-trabajos', {
        responsive: true,
        language: {
            url: '//cdn.datatables.net/plug-ins/1.13.4/i18n/es-ES.json'
        },
        columnDefs: [
            { orderable: false, targets: [0, 7] },
            { width: "5%", targets: 0 }
        ],
        order: [[1, 'desc']]
    });
    
    // Gestión de la selección de trabajos
    document.getElementById('select-all').addEventListener('change', function() {
        const isChecked = this.checked;
        document.querySelectorAll('.trabajo-checkbox').forEach(checkbox => {
            checkbox.checked = isChecked;
        });
        actualizarBotonEnvio();
    });
    
    document.querySelectorAll('.trabajo-checkbox').forEach(checkbox => {
        checkbox.addEventListener('change', actualizarBotonEnvio);
    });
    
    document.getElementById('btn-seleccionar-todos').addEventListener('click', function() {
        const selectAllCheckbox = document.getElementById('select-all');
        const newState = !selectAllCheckbox.checked;
        
        selectAllCheckbox.checked = newState;
        document.querySelectorAll('.trabajo-checkbox').forEach(checkbox => {
            checkbox.checked = newState;
        });
        
        actualizarBotonEnvio();
    });
    
    function actualizarBotonEnvio() {
        const seleccionados = document.querySelectorAll('.trabajo-checkbox:checked').length;
        document.getElementById('btn-enviar-seleccionados').disabled = seleccionados === 0;
    }
    
    // Envío masivo de certificados
    document.getElementById('btn-enviar-seleccionados').addEventListener('click', function() {
        const seleccionados = document.querySelectorAll('.trabajo-checkbox:checked').length;
        
        // Confirmar antes de enviar
        Swal.fire({
            title: '¿Confirmar envío masivo?',
            html: `Está a punto de enviar certificados para <strong>${seleccionados}</strong> trabajo(s).<br>
                  Esta acción enviará correos a todos los autores con email registrado.`,
            icon: 'question',
            showCancelButton: true,
            confirmButtonColor: '#015a5e',
            cancelButtonColor: '#6c757d',
            confirmButtonText: 'Sí, enviar',
            cancelButtonText: 'Cancelar'
        }).then((result) => {
            if (result.isConfirmed) {
                // Limpiar el contenedor de trabajos seleccionados
                document.getElementById('trabajos-seleccionados-container').innerHTML = '';
                
                // Agregar inputs para cada trabajo seleccionado
                document.querySelectorAll('.trabajo-checkbox:checked').forEach(checkbox => {
                    const trabajoId = checkbox.value;
                    const input = document.createElement('input');
                    input.type = 'hidden';
                    input.name = 'trabajos_seleccionados[]';
                    input.value = trabajoId;
                    document.getElementById('trabajos-seleccionados-container').appendChild(input);
                });
                
                // Mostrar barra de progreso
                document.getElementById('envio-progress-container').style.display = 'block';
                const progressBar = document.getElementById('envio-progress-bar');
                const progressText = document.getElementById('envio-progress-text');
                
                progressBar.style.width = '0%';
                progressBar.setAttribute('aria-valuenow', 0);
                progressBar.textContent = '0%';
                progressText.textContent = 'Iniciando envío de certificados...';
                
                // Simular progreso (opcional, en producción podría usar AJAX para actualización real)
                let progress = 0;
                const interval = setInterval(function() {
                    progress += 5;
                    if (progress <= 90) {
                        progressBar.style.width = progress + '%';
                        progressBar.setAttribute('aria-valuenow', progress);
                        progressBar.textContent = progress + '%';
                        progressText.textContent = 'Procesando envío de certificados...';
                    }
                    if (progress === 90) {
                        clearInterval(interval);
                    }
                }, 500);
                
                // Enviar el formulario
                setTimeout(function() {
                    document.getElementById('form-envio-masivo').submit();
                }, 1000);
            }
        });
    });
    
    // Manejadores de eventos para botones dinámicos
    document.addEventListener('click', function(event) {
        // Envío individual con confirmación
        if (event.target.closest('.enviar-individual')) {
            event.preventDefault();
            const button = event.target.closest('.enviar-individual');
            const url = button.getAttribute('href');
            const id = button.getAttribute('data-id');
            
            Swal.fire({
                title: '¿Confirmar envío?',
                html: `Está a punto de enviar certificados para el trabajo ID <strong>${id}</strong>.<br>
                      Esta acción enviará correos a todos los autores con email registrado.`,
                icon: 'question',
                showCancelButton: true,
                confirmButtonColor: '#015a5e',
                cancelButtonColor: '#6c757d',
                confirmButtonText: 'Sí, enviar',
                cancelButtonText: 'Cancelar'
            }).then((result) => {
                if (result.isConfirmed) {
                    window.location.href = url;
                }
            });
        }
        
        // Ver historial de envíos
        else if (event.target.closest('.ver-historial')) {
            const button = event.target.closest('.ver-historial');
            const id = button.getAttribute('data-id');
            
            // Limpiar contenido previo
            document.getElementById('historial-contenido').innerHTML = '<tr><td colspan="5" class="text-center"><i class="fas fa-spinner fa-spin"></i> Cargando...</td></tr>';
            
            // Mostrar el modal
            const historialModal = new bootstrap.Modal(document.getElementById('historialModal'));
            historialModal.show();
            
            // Cargar el historial vía AJAX
            fetch(`obtener_historial_envios.php?id=${id}`)
                .then(response => response.json())
                .then(data => {
                    if (data.length > 0) {
                        let html = '';
                        data.forEach(function(envio) {
                            // Estado del envío
                            const estadoClase = envio.exitoso == 1 ? 'success' : 'danger';
                            const estadoTexto = envio.exitoso == 1 ? 'Exitoso' : 'Fallido';
                            const tipoDestinatario = determinarTipoDestinatario(envio.tipo_destinatario);
                            
                            html += `<tr>
                                        <td>${formatFecha(envio.fecha_envio)}</td>
                                        <td>${envio.email_destino}</td>
                                        <td>${tipoDestinatario}</td>
                                        <td><span class="badge bg-${estadoClase}">${estadoTexto}</span></td>
                                        <td>${envio.error_mensaje || '-'}</td>
                                    </tr>`;
                        });
                        document.getElementById('historial-contenido').innerHTML = html;
                    } else {
                        document.getElementById('historial-contenido').innerHTML = '<tr><td colspan="5" class="text-center">No hay registros de envíos para este trabajo</td></tr>';
                    }
                })
                .catch(error => {
                    document.getElementById('historial-contenido').innerHTML = '<tr><td colspan="5" class="text-center text-danger">Error al cargar el historial</td></tr>';
                    console.error('Error:', error);
                });
        }
        
        // Ver emails adicionales
        else if (event.target.closest('.ver-emails')) {
            const button = event.target.closest('.ver-emails');
            const id = button.getAttribute('data-id');
            
            // Limpiar contenido previo
            document.getElementById('emails-adicionales-lista').innerHTML = '<div class="text-center"><i class="fas fa-spinner fa-spin"></i> Cargando...</div>';
            
            // Mostrar el modal
            const emailsModal = new bootstrap.Modal(document.getElementById('emailsModal'));
            emailsModal.show();
            
            // Cargar los emails vía AJAX
            fetch(`obtener_emails_autores.php?id=${id}`)
                .then(response => response.json())
                .then(data => {
                    if (Object.keys(data).length > 0) {
                        let html = '';
                        
                        // Email del corresponsal
                        if (data.email) {
                            html += `<div class="list-group-item">
                                        <div class="d-flex w-100 justify-content-between">
                                            <h6 class="mb-1">Autor Corresponsal</h6>
                                        </div>
                                        <p class="mb-1">${data.email}</p>
                                    </div>`;
                        }
                        
                        // Emails de autores adicionales
                        for (let i = 1; i <= 10; i++) {
                            if (data['email_autor' + i]) {
                                html += `<div class="list-group-item">
                                            <div class="d-flex w-100 justify-content-between">
                                                <h6 class="mb-1">Autor ${i}</h6>
                                            </div>
                                            <p class="mb-1">${data['email_autor' + i]}</p>
                                        </div>`;
                            }
                        }
                        
                        document.getElementById('emails-adicionales-lista').innerHTML = html;
                    } else {
                        document.getElementById('emails-adicionales-lista').innerHTML = '<div class="alert alert-warning">No se encontraron emails para este trabajo</div>';
                    }
                })
                .catch(error => {
                    document.getElementById('emails-adicionales-lista').innerHTML = '<div class="alert alert-danger">Error al cargar los emails</div>';
                    console.error('Error:', error);
                });
        }
    });
    
    // Funciones auxiliares
    function formatFecha(fechaStr) {
        const fecha = new Date(fechaStr);
        return fecha.toLocaleString('es-ES');
    }
    
    function determinarTipoDestinatario(tipo) {
        if (!tipo) return 'Desconocido';
        if (tipo === 'corresponsal') return 'Autor Corresponsal';
        if (tipo.startsWith('autor')) {
            const num = tipo.replace('autor', '');
            return 'Autor ' + num;
        }
        return tipo;
    }
});