<?php
/**
 * Procesamiento del formulario de resúmenes científicos TRAUMA 2025
 */

// Iniciar sesión
session_start();

// Configuración
$currentLanguage = isset($_SESSION['language']) ? $_SESSION['language'] : 'es';
$translations = include('includes/translations.php');
$text = $translations[$currentLanguage];

// Configurar cabeceras
header('Content-Type: application/json');

// Variable para respuesta
$response = [
    'status' => 'error',
    'message' => '',
    'data' => null
];

// Verificar si es una solicitud POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Validar token CSRF (seguridad)
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        $response['message'] = 'Error de seguridad. Por favor, intente de nuevo.';
        echo json_encode($response);
        exit;
    }
    
    // Array para recopilar errores
    $errors = [];
    
    // Validar campos obligatorios
    $requiredFields = [
        'language' => 'Idioma',
        'title' => 'Título',
        'category' => 'Categoría',
        'presentation_type' => 'Tipo de presentación',
        'introduction' => 'Introducción',
        'methods' => 'Métodos',
        'results' => 'Resultados',
        'conclusions' => 'Conclusiones',
        'author_first_name' => 'Nombre del autor principal',
        'author_last_name' => 'Apellidos del autor principal',
        'author_email' => 'Correo electrónico del autor principal',
        'author_institution' => 'Institución del autor principal',
        'author_country' => 'País del autor principal',
        'terms_accepted' => 'Términos y condiciones'
    ];
    
    foreach ($requiredFields as $field => $label) {
        if (empty($_POST[$field])) {
            $errors[] = "El campo '$label' es obligatorio";
        }
    }
    
    // Validar email
    if (!empty($_POST['author_email']) && !filter_var($_POST['author_email'], FILTER_VALIDATE_EMAIL)) {
        $errors[] = "Ingrese un correo electrónico válido";
    }
    
    // Validar archivo
    if (!isset($_FILES['file-upload']) || $_FILES['file-upload']['error'] != 0) {
        $errors[] = "Debe adjuntar un archivo";
    } else {
        // Validar tipo y tamaño del archivo
        $maxFileSize = 10 * 1024 * 1024; // 10MB
        $allowedTypes = [
            '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',
            'image/jpeg',
            'image/png',
            'image/gif'
        ];
        
        if ($_FILES['file-upload']['size'] > $maxFileSize) {
            $errors[] = "El archivo excede el tamaño máximo permitido de 10MB";
        }
        
        $fileInfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime = finfo_file($fileInfo, $_FILES['file-upload']['tmp_name']);
        finfo_close($fileInfo);
        
        if (!in_array($mime, $allowedTypes)) {
            $errors[] = "Tipo de archivo no permitido. Formatos aceptados: PDF, DOC, DOCX, XLS, XLSX, CSV, TXT, RTF, HTML, ZIP, JPG, JPEG, PNG, GIF";
        }
    }
    
    // Validar límites de palabras
    $wordLimits = [
        '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]
    ];
    
    foreach ($wordLimits as $field => $limits) {
        if (!empty($_POST[$field])) {
            $wordCount = str_word_count(trim($_POST[$field]));
            if ($wordCount < $limits['min'] || $wordCount > $limits['max']) {
                $errors[] = "El campo '" . $requiredFields[$field] . "' debe tener entre {$limits['min']} y {$limits['max']} palabras";
            }
        }
    }
    
    // Si hay errores, devolver respuesta con errores
    if (!empty($errors)) {
        $response['message'] = 'Por favor, corrija los siguientes errores:';
        $response['data'] = $errors;
        echo json_encode($response);
        exit;
    }
    
    // Procesar archivos
    $uploadDir = 'uploads/';
    $fileName = time() . '_' . basename($_FILES['file-upload']['name']);
    $targetFilePath = $uploadDir . $fileName;
    
    // Asegurar que el directorio existe
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }
    
    // Mover archivo subido
    if (move_uploaded_file($_FILES['file-upload']['tmp_name'], $targetFilePath)) {
        // Preparar datos para guardar en la base de datos
        $abstractData = [
            'language' => $_POST['language'],
            'title' => $_POST['title'],
            'category' => $_POST['category'],
            'presentation_type' => $_POST['presentation_type'],
            'introduction' => $_POST['introduction'],
            'methods' => $_POST['methods'],
            'results' => $_POST['results'],
            'conclusions' => $_POST['conclusions'],
            'author_first_name' => $_POST['author_first_name'],
            'author_last_name' => $_POST['author_last_name'],
            'author_email' => $_POST['author_email'],
            'author_institution' => $_POST['author_institution'],
            'author_country' => $_POST['author_country'],
            'conflicts' => isset($_POST['conflicts']) ? $_POST['conflicts'] : '',
            'funding' => isset($_POST['funding']) ? $_POST['funding'] : '',
            'acknowledgments' => isset($_POST['acknowledgments']) ? $_POST['acknowledgments'] : '',
            'file_path' => $targetFilePath,
            'submission_date' => date('Y-m-d H:i:s'),
            'ip_address' => $_SERVER['REMOTE_ADDR']
        ];
        
        // Procesamiento de co-autores si existen
        if (isset($_POST['coauthor_first_name']) && is_array($_POST['coauthor_first_name'])) {
            $coauthors = [];
            for ($i = 0; $i < count($_POST['coauthor_first_name']); $i++) {
                if (!empty($_POST['coauthor_first_name'][$i]) && !empty($_POST['coauthor_last_name'][$i])) {
                    $coauthors[] = [
                        'first_name' => $_POST['coauthor_first_name'][$i],
                        'last_name' => $_POST['coauthor_last_name'][$i],
                        'email' => isset($_POST['coauthor_email'][$i]) ? $_POST['coauthor_email'][$i] : '',
                        'institution' => isset($_POST['coauthor_institution'][$i]) ? $_POST['coauthor_institution'][$i] : '',
                        'country' => isset($_POST['coauthor_country'][$i]) ? $_POST['coauthor_country'][$i] : ''
                    ];
                }
            }
            $abstractData['coauthors'] = $coauthors;
        }
        
        // Aquí iría la lógica para guardar en la base de datos
        // Por ahora, simularemos un guardado exitoso
        
        // Generar ID único para el abstract
        $abstractId = 'TRAUMA25-' . strtoupper(substr(md5(time()), 0, 8));
        
        // Enviar correo de confirmación
        // (aquí iría el código para enviar correo)
        
        // Preparar respuesta exitosa
        $response['status'] = 'success';
        $response['message'] = 'Resumen enviado con éxito';
        $response['data'] = [
            'abstract_id' => $abstractId,
            'submission_date' => date('Y-m-d H:i:s')
        ];
    } else {
        $response['message'] = 'Error al subir el archivo. Por favor, intente de nuevo.';
    }
} else {
    $response['message'] = 'Método de solicitud no válido.';
}

// Devolver respuesta
echo json_encode($response);