/**
 * Maneja la subida de archivos para TRAUMA 2025
 * Este script gestiona las interacciones de carga de archivos y validación
 */

document.addEventListener('DOMContentLoaded', function() {
    // Elementos DOM principales
    const fileUploads = document.querySelectorAll('input[type="file"]');
    
    // Límite de tamaño de archivo en bytes (10MB)
    const MAX_FILE_SIZE = 10 * 1024 * 1024;
    
    // Tipos de archivo permitidos 
    const ALLOWED_TYPES = [
        // Documentos
        'application/pdf', 
        'application/msword', 
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'text/csv',
        'text/plain',
        'application/rtf',
        'text/html',
        'application/zip',
        // Imágenes
        'image/jpeg',
        'image/png',
        'image/gif'
    ];
    
    // Formatear tamaño de archivo
    function formatFileSize(bytes) {
        if (bytes === 0) return '0 Bytes';
        
        const k = 1024;
        const sizes = ['Bytes', 'KB', 'MB', 'GB'];
        const i = Math.floor(Math.log(bytes) / Math.log(k));
        
        return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
    }
    
    // Validar archivo por tipo y tamaño
    function validateFile(file) {
        // Validar tamaño
        if (file.size > MAX_FILE_SIZE) {
            return {
                valid: false,
                error: 'file_size_exceeded',
                errorMessage: 'El archivo excede el tamaño máximo permitido (10MB)'
            };
        }
        
        // Validar tipo
        if (!ALLOWED_TYPES.includes(file.type)) {
            return {
                valid: false,
                error: 'file_type_not_allowed',
                errorMessage: 'Tipo de archivo no permitido'
            };
        }
        
        return {
            valid: true
        };
    }
    
    // Configurar inputs de archivo
    fileUploads.forEach(fileUpload => {
        const fileId = fileUpload.id;
        const fileNameElement = document.getElementById(`${fileId}-name`) || document.getElementById('file-name');
        const errorElement = document.getElementById(`${fileId}-error`) || document.getElementById('file-error');
        
        if (fileUpload && fileNameElement) {
            fileUpload.addEventListener('change', function() {
                if (this.files.length > 0) {
                    const file = this.files[0];
                    const fileSize = formatFileSize(file.size);
                    
                    // Mostrar información del archivo
                    fileNameElement.innerHTML = `<i class="fas fa-file"></i> ${file.name} (${fileSize})`;
                    
                    // Validar el archivo
                    const validation = validateFile(file);
                    
                    if (!validation.valid && errorElement) {
                        errorElement.textContent = validation.errorMessage;
                        errorElement.style.display = 'block';
                        fileNameElement.classList.add('error');
                    } else {
                        if (errorElement) {
                            errorElement.style.display = 'none';
                        }
                        fileNameElement.classList.remove('error');
                    }
                } else {
                    // Resetear cuando no hay archivo seleccionado
                    fileNameElement.innerHTML = `<i class="fas fa-file-alt"></i> Ningún archivo seleccionado`;
                    if (errorElement) {
                        errorElement.style.display = 'none';
                    }
                }
            });
        }
    });
    
    // Configurar botones de carga de archivo personalizados
    document.querySelectorAll('.file-upload-btn').forEach(button => {
        const targetInput = document.getElementById(button.getAttribute('for'));
        
        if (targetInput) {
            button.addEventListener('click', function(e) {
                e.preventDefault();
                targetInput.click();
            });
        }
    });
    
    // Prevención de arrastrar y soltar archivos fuera de las zonas designadas
    document.addEventListener('dragover', function(e) {
        e.preventDefault();
    });
    
    document.addEventListener('drop', function(e) {
        e.preventDefault();
    });
    
    // Implementar áreas de drop zone (opcional)
    document.querySelectorAll('.drop-zone').forEach(dropZone => {
        const fileInput = dropZone.querySelector('input[type="file"]');
        
        if (fileInput) {
            dropZone.addEventListener('dragover', function(e) {
                e.preventDefault();
                this.classList.add('drop-zone-hover');
            });
            
            dropZone.addEventListener('dragleave', function() {
                this.classList.remove('drop-zone-hover');
            });
            
            dropZone.addEventListener('drop', function(e) {
                e.preventDefault();
                this.classList.remove('drop-zone-hover');
                
                if (e.dataTransfer.files.length) {
                    fileInput.files = e.dataTransfer.files;
                    // Disparar evento de cambio para activar la validación
                    const event = new Event('change', { bubbles: true });
                    fileInput.dispatchEvent(event);
                }
            });
        }
    });
    
    // Exponer funciones para uso en otros scripts
    window.fileUploader = {
        validateFile,
        formatFileSize
    };
});