<?php
// Este archivo debe ser incluido al principio del script principal o como un archivo separado
// Nombre: abstract_scientific.php
ob_start();
// Verificar si TCPDF está disponible y cargarlo al inicio del archivo
$tcpdfInstalled = false;
if (file_exists('vendor/tecnickcom/tcpdf/tcpdf.php')) {
    require_once('vendor/tecnickcom/tcpdf/tcpdf.php');
    $tcpdfInstalled = true;
} else if (file_exists('tcpdf/tcpdf.php')) {
    require_once('tcpdf/tcpdf.php');
    $tcpdfInstalled = true;
} else if (file_exists('../tcpdf/tcpdf.php')) {
    require_once('../tcpdf/tcpdf.php');
    $tcpdfInstalled = true;
}

// Solo definimos la clase si TCPDF está disponible
if ($tcpdfInstalled) {
    // Clase personalizada para el formato de scientific magazine
    class ScientificMagazinePDF extends TCPDF {
        // Propiedades para el header y footer
        protected $codigo = '';
        protected $borderColor = array(180, 180, 180); // Color del borde en RGB
        protected $pie_info = array();
        protected $area_tematica = '';
        protected $pais_actual = '';
        
        public function setCodigo($codigo) {
            $this->codigo = $codigo;
        }
        
        public function setPieInfo($pie_info) {
            $this->pie_info = $pie_info;
        }
        
        public function setAreaTematica($area_tematica) {
            $this->area_tematica = $area_tematica;
        }
        
        public function setPaisActual($pais) {
            $this->pais_actual = $pais;
        }
        
        // Encabezado de página - estilo journal científico moderno
        public function Header() {
            // Generar un "volumen" y "número" basados en la fecha actual
            $year = date('Y');
            $month = date('n');
            $volume = $year - 2000; // Volumen basado en el año
            $issue = ceil($month/3);  // Número basado en el trimestre
            
            // Dibujar borde decorativo alrededor de la página
            $this->RoundedRect(5, 5, $this->getPageWidth()-10, $this->getPageHeight()-10, 2, '1111', '', 
                array('width' => 0.5, 'color' => $this->borderColor));
            
            // Línea decorativa superior
            $this->SetDrawColor($this->borderColor[0], $this->borderColor[1], $this->borderColor[2]);
            $this->SetLineWidth(0.2);
            $this->Line(10, 10, $this->getPageWidth()-10, 10);
            
            // Configuración de fuente
            $this->SetFont('helvetica', '', 7);
            $this->SetTextColor(60, 60, 60);
            
            // Título del journal
            $this->SetXY(12, 6);
            $journal_title = 'Panamerican Journal of Trauma';
            
            // Añadir el área temática si está disponible
            if (!empty($this->area_tematica)) {
                $journal_title .= ': ' . $this->area_tematica;
            }
            
            // Limitar el ancho para que no se sobreponga a la información del volumen
            $this->Cell($this->getPageWidth() - 130, 4, $journal_title, 0, 0, 'L');
            
            // Información del volumen (parte superior derecha)
            $this->SetXY($this->getPageWidth()-37, 6);
            $this->Cell(100, 4, date('Y-m-d') . '.' . $this->codigo, 0, 0, 'L');
            
            // Si hay un país actual, mostrarlo como título de sección
            if (!empty($this->pais_actual)) {
                $this->SetFont('helvetica', 'B', 10);
                $this->SetTextColor(40, 40, 40);
                $this->SetXY(12, 14);
                $this->Cell($this->getPageWidth() - 24, 6, 'PAÍS: ' . strtoupper($this->pais_actual), 0, 0, 'C');
            }
            
            // Información de autor corresponsal y otros datos justo debajo del encabezado
            $this->SetY(18);
            $this->SetFont('helvetica', '', 8);
            $this->SetTextColor(60, 60, 60);
            
            // Ajustamos la posición Y para el contenido principal
            $this->SetY(25); // Se ajusta según la cantidad de información mostrada
        }
        
        // Pie de página con nuevo texto Creative Commons
        public function Footer() {
            $this->SetY(-25);
            
            // Línea superior del pie de página
            $this->SetDrawColor($this->borderColor[0], $this->borderColor[1], $this->borderColor[2]);
            $this->SetLineWidth(0.2);
            $this->Line(10, $this->getPageHeight()-24, $this->getPageWidth()-10, $this->getPageHeight()-24);
            
            // Texto Creative Commons
            $this->SetFont('helvetica', '', 6);
            $this->SetTextColor(60, 60, 60);
            $this->SetXY(12, $this->getPageHeight()-22);
            $cc_text = "© The Author(s). 2024 Open Access. This article is distributed under the terms of the Creative Commons Attribution 4.0 International License (https://creativecommons.org/licenses/by-nc/4.0/), which permits unrestricted use, distribution, and non-commercial reproduction in any medium, provided you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons license, and indicate if changes were made.";
            $this->MultiCell($this->getPageWidth() - 24, 4, $cc_text, 0, 'L');
            
            // Número de página (sin etiqueta)
            $this->SetXY($this->getPageWidth()-20, $this->getPageHeight()-10);
            $this->Cell(10, 4, $this->getAliasNumPage() . '/' . $this->getAliasNbPages(), 0, 0, 'R');
        }
        
        /**
         * Dibuja un rectángulo con esquinas redondeadas
         */
        public function RoundedRect($x, $y, $w, $h, $r, $round_corner = '1111', $style = '', $border_style = array(), $fill_color = array()) {
            if (isset($border_style['all'])) {
                $border_style['all'] = $this->borderColor;
            }
            
            // Establecer color de borde
            $this->SetDrawColor($this->borderColor[0], $this->borderColor[1], $this->borderColor[2]);
            
            // Dibujar rectángulo redondeado
            parent::RoundedRect($x, $y, $w, $h, $r, $round_corner, $style, $border_style, $fill_color);
            
            // Restaurar color de dibujo
            $this->SetDrawColor(0, 0, 0);
        }
        
        /**
         * Mejora la justificación del texto para evitar espacios grandes
         * @param string $text Texto a formatear
         * @param float $line_height Altura de línea
         * @param string $alignment Alineación (L, R, C, J)
         */
        public function mejorarJustificacion($text, $line_height = 5, $alignment = 'J') {
            // Eliminar espacios múltiples
            $text = preg_replace('/\s+/', ' ', $text);
            
            // Dividir en párrafos más pequeños para mejorar justificación
            $paragraphs = explode("\n", $text);
            foreach($paragraphs as $paragraph) {
                if(strlen($paragraph) > 500) {
                    // Dividir párrafos largos en secciones
                    $sentences = preg_split('/(?<=[.!?])\s+/', $paragraph);
                    $chunk = '';
                    $char_count = 0;
                    
                    foreach($sentences as $sentence) {
                        $chunk .= $sentence . ' ';
                        $char_count += strlen($sentence);
                        
                        if($char_count > 300) {
                            $this->MultiCell(0, $line_height, trim($chunk), 0, $alignment);
                            $this->Ln(1);
                            $chunk = '';
                            $char_count = 0;
                        }
                    }
                    
                    if(!empty($chunk)) {
                        $this->MultiCell(0, $line_height, trim($chunk), 0, $alignment);
                        $this->Ln(1);
                    }
                } else {
                    $this->MultiCell(0, $line_height, $paragraph, 0, $alignment);
                    $this->Ln(1);
                }
            }
        }
        
        /**
         * Ajusta el texto para caber en una sola página con un máximo de caracteres
         * @param string $text Texto a ajustar
         * @param int $max_chars Número máximo de caracteres
         * @return string Texto ajustado
         */
        public function ajustarTexto($text, $max_chars = 800) {
            $text = strip_tags($text);
            $text = preg_replace('/\s+/', ' ', $text);
            
            if (strlen($text) > $max_chars) {
                $text = substr($text, 0, $max_chars-3) . '...';
            }
            
            return $text;
        }
    }
}

// Verificamos si hay una solicitud para exportar el abstract científico individual
if (isset($_GET['export_abstract']) && isset($_GET['id'])) {
    // Importante: llamamos a la función antes de cualquier salida HTML
    generarAbstractCientifico(intval($_GET['id']));
    // El script termina en la función, así que no se ejecutará código después
}

// Verificamos si hay una solicitud para exportar todos los abstracts
if (isset($_GET['export_all_abstracts'])) {
    // Importante: llamamos a la función antes de cualquier salida HTML
    generarTodosAbstractsCientificos();
    // El script termina en la función, así que no se ejecutará código después
}



/**
 * Genera un PDF con todos los abstracts científicos
 * Esta función obtiene todos los trabajos evaluados y los agrupa por país
 */
 
function generarTodosAbstractsCientificos() {
    global $tcpdfInstalled;
    
    // Si TCPDF no está instalado, mostramos un error
    if (!$tcpdfInstalled) {
        header('Location: ?error=pdf_library_missing');
        exit;
    }
    
    // Incluimos el archivo de utilidades de la base de datos
    require_once 'utils_database.php';
    
    // Activamos la conexión MySQL
    $conn = Activarmysql();
    
    // Verificar la conexión
    if ($conn->connect_error) {
        error_log("Error de conexión a la base de datos: " . $conn->connect_error);
        header('Location: ?error=db_connection_failed');
        exit;
    }
    
    try {
        // Consulta SQL para obtener todos los trabajos completamente evaluados
        $sql = "SELECT t.id, t.codigo, t.titulo, t.pais, t.introduccion, t.materiales, 
                t.resultados, t.conclusiones, t.email, t.inst_autor1,
                t.autor1, t.apellido_autor1, t.titulo_autor1,
                t.autor2, t.apellido_autor2, t.titulo_autor2,
                t.autor3, t.apellido_autor3, t.titulo_autor3,
                t.autor4, t.apellido_autor4, t.titulo_autor4,
                t.autor5, t.apellido_autor5, t.titulo_autor5,
                t.autor6, t.apellido_autor6, t.titulo_autor6,
                t.autor7, t.apellido_autor7, t.titulo_autor7,
                t.autor8, t.apellido_autor8, t.titulo_autor8,
                t.autor9, t.apellido_autor9, t.titulo_autor9,
                t.autor10, t.apellido_autor10, t.titulo_autor10,
                t.nombre_corresponsal, t.apellido_corresponsal,
                t.cod_tipo_competicion_propuesto, t.cod_tipo_presentacion_propuesto,
                t.area_tematica, t.fecha
                FROM ttrabajo t 
                WHERE t.calificacion1_fecha IS NOT NULL 
                AND t.calificacion2_fecha IS NOT NULL 
                AND t.calificacion3_fecha IS NOT NULL
                ORDER BY t.pais ASC, t.codigo ASC";
        
        $result = $conn->query($sql);
        
        if ($result === false) {
            error_log("Error en la consulta SQL: " . $conn->error);
            header('Location: ?error=query_error');
            exit;
        }
        
        if ($result->num_rows === 0) {
            error_log("No se encontraron trabajos evaluados");
            header('Location: ?error=no_trabajos_encontrados');
            exit;
        }
        
        // Obtener todos los trabajos
        $trabajos = [];
        while ($row = $result->fetch_assoc()) {
            $trabajos[] = $row;
        }
        
        // Crear nuevo documento PDF
        $pdf = new ScientificMagazinePDF('P', 'mm', 'A4', true, 'UTF-8', false);
        
        // Establecer información del documento
        $pdf->SetCreator('Scientific Journal');
        $pdf->SetAuthor('Scientific Journal');
        $pdf->SetTitle('Abstracts Científicos - Compilación Completa');
        $pdf->SetSubject('Scientific Papers Collection');
        $pdf->SetKeywords('scientific, research, paper, academic, collection');
        
        // Configuración de página
        $pdf->SetMargins(10, 15, 10);
        $pdf->SetHeaderMargin(5);
        $pdf->SetFooterMargin(25);
        $pdf->SetAutoPageBreak(TRUE, 30);
        
        // Variable para rastrear el país actual
        $paisActual = '';
        
        // Procesar cada trabajo
        foreach ($trabajos as $trabajo) {
                     $pdf->AddPage();
            // Establecer código del trabajo en el encabezado
            $pdf->setCodigo(isset($trabajo['codigo']) ? $trabajo['codigo'] : '');
            
            // Obtener área temática - primero intentamos obtenerla de la base de datos
            $area_tematica = '';
            if (!empty($trabajo['area_tematica'])) {
                $area_query = "SELECT descripcion FROM tarea WHERE codigo = ?";
                $stmt_area = $conn->prepare($area_query);
                if ($stmt_area) {
                    $stmt_area->bind_param("s", $trabajo['area_tematica']);
                    $stmt_area->execute();
                    $area_result = $stmt_area->get_result();
                    if ($area_result && $area_result->num_rows > 0) {
                        $area_row = $area_result->fetch_assoc();
                        $area_tematica = $area_row['descripcion'];
                    }
                    $stmt_area->close();
                }
            }
            $pdf->setAreaTematica($area_tematica);
            
            // Obtener tipos de presentación y competición
            $tipo_presentacion = "";
            $tipo_competicion = "";
            
            // Tipo de presentación
            if (!empty($trabajo['cod_tipo_presentacion_propuesto'])) {
                $sql_tipo = "SELECT descripcion_esp FROM ttipo_presentacion WHERE codigo = ?";
                $stmt_tipo = $conn->prepare($sql_tipo);
                if ($stmt_tipo) {
                    $stmt_tipo->bind_param("s", $trabajo['cod_tipo_presentacion_propuesto']);
                    $stmt_tipo->execute();
                    $result_tipo = $stmt_tipo->get_result();
                    if ($result_tipo && $result_tipo->num_rows > 0) {
                        $tipo_data = $result_tipo->fetch_assoc();
                        $tipo_presentacion = $tipo_data['descripcion_esp'];
                    }
                    $stmt_tipo->close();
                }
            }
            
            // Tipo de competición
            if (!empty($trabajo['cod_tipo_competicion_propuesto'])) {
                $sql_comp = "SELECT descripcion_esp FROM ttipo_competicion WHERE codigo = ?";
                $stmt_comp = $conn->prepare($sql_comp);
                if ($stmt_comp) {
                    $stmt_comp->bind_param("s", $trabajo['cod_tipo_competicion_propuesto']);
                    $stmt_comp->execute();
                    $result_comp = $stmt_comp->get_result();
                    if ($result_comp && $result_comp->num_rows > 0) {
                        $comp_data = $result_comp->fetch_assoc();
                        $tipo_competicion = $comp_data['descripcion_esp'];
                    }
                    $stmt_comp->close();
                }
            }
            
            // Título del artículo
            $pdf->SetFont('helvetica', 'B', 13);
            $pdf->SetTextColor(40, 40, 40);
            $pdf->MultiCell(0, 10, strtoupper($trabajo['titulo']), 0, 'C');
            $pdf->Ln(2);
            
            // Información sobre autores
            $pdf->SetFont('helvetica', '', 11);
            $pdf->SetTextColor(50, 50, 50);
            
            // Construir lista de autores
            $autores = [];
            for ($i = 1; $i <= 10; $i++) {
                $autor_key = "autor{$i}";
                $apellido_key = "apellido_autor{$i}";
                $titulo_key = "titulo_autor{$i}";
                
                if (!empty($trabajo[$autor_key]) && !empty($trabajo[$apellido_key])) {
                    $autor_info = '';
                    if (!empty($trabajo[$titulo_key])) {
                        $autor_info .= $trabajo[$titulo_key] . ' ';
                    }
                    $nombre = ucwords(strtolower($trabajo[$autor_key]));
                    $apellido = ucwords(strtolower($trabajo[$apellido_key]));
                    $autor_info .= $nombre . ' ' . $apellido;
                    
                    $autores[] = $autor_info;
                }
            }
            
            // Mostrar autores
            if (!empty($autores)) {
                $pdf->MultiCell(0, 8, implode(', ', $autores), 0, 'C');
            } else if (!empty($trabajo['autores'])) {
                $autores_texto = ucwords(strtolower($trabajo['autores']));
                $pdf->MultiCell(0, 8, $autores_texto, 0, 'C');
            }
            
            // Afiliaciones institucionales
            $pdf->Ln(2);
            if (!empty($trabajo['inst_autor1'])) {
                $pdf->SetFont('helvetica', 'I', 10);
                $pdf->SetTextColor(70, 70, 70);
                $pdf->MultiCell(0, 7, $trabajo['inst_autor1'], 0, 'C');
            }
            
            // Email de contacto
            if (!empty($trabajo['email'])) {
                $pdf->SetFont('helvetica', 'I', 10);
                $pdf->SetTextColor(70, 70, 70);
                $pdf->MultiCell(0, 7, $trabajo['email'], 0, 'C');
            }
            
            // Mostrar tipo de competición y presentación
            $pdf->SetFont('helvetica', 'I', 10);
            $pdf->SetTextColor(70, 70, 70);
            $info_adicional = "";
            if (!empty($tipo_competicion)) {
                $info_adicional .= "Competición: " . $tipo_competicion;
            }
            if (!empty($tipo_presentacion)) {
                if (!empty($info_adicional)) {
                    $info_adicional .= " | ";
                }
                $info_adicional .= "Presentación: " . $tipo_presentacion;
            }
            if (!empty($info_adicional)) {
                $pdf->MultiCell(0, 7, $info_adicional, 0, 'C');
            }
            
            $pdf->Ln(4);
            
            // INICIO SECCIONES A DOS COLUMNAS
            // Activar modo de dos columnas para todo el contenido
            $pdf->setEqualColumns(2, 93);
            $pdf->selectColumn(0);
            
            // I. INTRODUCCIÓN
            $pdf->SetFont('helvetica', 'B', 13);
            $pdf->SetTextColor(35, 35, 35);
            $pdf->Cell(0, 8, 'I. INTRODUCCIÓN', 0, 1, 'L');
            $pdf->Ln(1);
            
            // Texto de la introducción
            if (!empty($trabajo['introduccion'])) {
                $pdf->SetFont('times', '', 12);
                $pdf->SetTextColor(45, 45, 45);
                
                $intro_text = $pdf->ajustarTexto($trabajo['introduccion'], 650);
                $pdf->mejorarJustificacion($intro_text, 5.5, 'J');
                $pdf->Ln(2);
            }
            
            // II. MATERIALES Y MÉTODOS
            $pdf->SetFont('helvetica', 'B', 13);
            $pdf->SetTextColor(35, 35, 35);
            $pdf->Cell(0, 8, 'II. MATERIALES Y MÉTODOS', 0, 1, 'L');
            $pdf->Ln(1);
            
            // Texto de materiales
            if (!empty($trabajo['materiales'])) {
                $pdf->SetFont('times', '', 12);
                $pdf->SetTextColor(45, 45, 45);
                
                $materials_text = $pdf->ajustarTexto($trabajo['materiales'], 650);
                $pdf->mejorarJustificacion($materials_text, 5.5, 'J');
                $pdf->Ln(2);
            }
            
            // Cambiar a la segunda columna
            $pdf->selectColumn(1);
            
            // III. RESULTADOS
            $pdf->SetFont('helvetica', 'B', 13);
            $pdf->SetTextColor(35, 35, 35);
            $pdf->Cell(0, 8, 'III. RESULTADOS', 0, 1, 'L');
            $pdf->Ln(1);
            
            // Texto de resultados
            if (!empty($trabajo['resultados'])) {
                $pdf->SetFont('times', '', 12);
                $pdf->SetTextColor(45, 45, 45);
                
                $results_text = $pdf->ajustarTexto($trabajo['resultados'], 650);
                $pdf->mejorarJustificacion($results_text, 5.5, 'J');
                $pdf->Ln(2);
            }
            
            // IV. CONCLUSIONES
            $pdf->SetFont('helvetica', 'B', 12);
            $pdf->SetTextColor(35, 35, 35);
            $pdf->Cell(0, 8, 'IV. CONCLUSIONES', 0, 1, 'L');
            $pdf->Ln(1);
            
            // Texto de conclusiones
            if (!empty($trabajo['conclusiones'])) {
                $pdf->SetFont('times', '', 12);
                $pdf->SetTextColor(45, 45, 45);
                
                $conclusions_text = $pdf->ajustarTexto($trabajo['conclusiones'], 650);
                $pdf->mejorarJustificacion($conclusions_text, 5.5, 'J');
            }
            
            // Restaurar el ajuste de columnas para la siguiente página
            $pdf->resetColumns();
        }
        
        // Cerrar la conexión a la base de datos
        $conn->close();
        
        // Salida del PDF
        $filename = 'todos_abstracts_cientificos_' . date('Y-m-d') . '.pdf';
        $pdf->Output($filename, 'D');
        exit;
        
    } catch (Exception $e) {
        // Registrar el error
        error_log("Error al generar PDF: " . $e->getMessage());
        
        // Redirigir con un error genérico
        header('Location: ?error=pdf_generation_error');
        exit;
    }
}

/**
 * Genera un PDF con formato de abstract científico para un trabajo específico
 * @param int $trabajo_id ID del trabajo a exportar
 */
function generarAbstractCientifico($trabajo_id) {
    global $tcpdfInstalled;
    
    // Si TCPDF no está instalado, mostramos un error
    if (!$tcpdfInstalled) {
        header('Location: ?error=pdf_library_missing');
        exit;
    }
    
    // Incluimos el archivo de utilidades de la base de datos
    require_once 'utils_database.php';
    
    // Activamos la conexión MySQL
    $conn = Activarmysql();
    
    // Consulta SQL para obtener todos los datos del trabajo junto con el área temática
    $sql = "SELECT t.*, a.descripcion AS area_tematica_desc 
            FROM ttrabajo t 
            LEFT JOIN tarea a ON t.area_tematica = a.codigo 
            WHERE t.id = ?";
    
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $trabajo_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        // En vez de mostrar un mensaje en la página, redirigimos con un parámetro de error
        header('Location: ?error=trabajo_no_encontrado');
        exit;
    }
    
    $trabajo = $result->fetch_assoc();
    
    // Consultas adicionales para obtener información relacionada
    $autor_corresponsal = "";
    $fecha_usuario = "";
    if (!empty($trabajo['cod_autor_corresponsal'])) {
        $sql_autor = "SELECT nombre, apellido, fecha FROM tusuario WHERE codigo = ?";
        $stmt_autor = $conn->prepare($sql_autor);
        $stmt_autor->bind_param("i", $trabajo['cod_autor_corresponsal']);
        $stmt_autor->execute();
        $result_autor = $stmt_autor->get_result();
        if ($result_autor->num_rows > 0) {
            $autor_data = $result_autor->fetch_assoc();
            $autor_corresponsal = ucwords(strtolower($autor_data['nombre'] . ' ' . $autor_data['apellido']));
            $fecha_usuario = !empty($autor_data['fecha']) ? $autor_data['fecha'] : '';
        }
    }
    
    // Área temática - ya obtenida en la consulta principal
    $area_tematica = !empty($trabajo['area_tematica_desc']) ? $trabajo['area_tematica_desc'] : "";
    
    // Tipo de presentación
    $tipo_presentacion = "";
    if (!empty($trabajo['cod_tipo_presentacion_propuesto'])) {
        $sql_tipo = "SELECT descripcion_esp FROM ttipo_presentacion WHERE codigo = ?";
        $stmt_tipo = $conn->prepare($sql_tipo);
        $stmt_tipo->bind_param("i", $trabajo['cod_tipo_presentacion_propuesto']);
        $stmt_tipo->execute();
        $result_tipo = $stmt_tipo->get_result();
        if ($result_tipo->num_rows > 0) {
            $tipo_data = $result_tipo->fetch_assoc();
            $tipo_presentacion = $tipo_data['descripcion_esp'];
        }
    }
    
    // Tipo de competición
    $tipo_competicion = "";
    if (!empty($trabajo['cod_tipo_competicion_propuesto'])) {
        $sql_comp = "SELECT descripcion_esp FROM ttipo_competicion WHERE codigo = ?";
        $stmt_comp = $conn->prepare($sql_comp);
        $stmt_comp->bind_param("i", $trabajo['cod_tipo_competicion_propuesto']);
        $stmt_comp->execute();
        $result_comp = $stmt_comp->get_result();
        if ($result_comp->num_rows > 0) {
            $comp_data = $result_comp->fetch_assoc();
            $tipo_competicion = $comp_data['descripcion_esp'];
        }
    }
    
    $conn->close();
    
    // Crear nuevo documento PDF
    $pdf = new ScientificMagazinePDF('P', 'mm', 'A4', true, 'UTF-8', false);
    
    // Establecer información del documento
    $pdf->SetCreator('Scientific Journal');
    $pdf->SetAuthor('Scientific Journal');
    $pdf->SetTitle($trabajo['titulo']);
    $pdf->SetSubject('Scientific Paper');
    $pdf->SetKeywords('scientific, research, paper, academic');
    
    // Establecer código en el encabezado
    $pdf->setCodigo(isset($trabajo['codigo']) ? $trabajo['codigo'] : '');
    
    // Establecer área temática directamente
    $pdf->setAreaTematica($area_tematica);
    
    // Preparar fechas formateadas
    $fecha_trabajo = !empty($trabajo['fecha']) ? date('d/m/Y', strtotime($trabajo['fecha'])) : '';
    $fecha_usuario_formateada = !empty($fecha_usuario) ? date('d/m/Y', strtotime($fecha_usuario)) : '';
    
    // Establecer información para el pie de página
    $pie_info = array(
        'autor_corresponsal' => $autor_corresponsal,
        'area_tematica' => $area_tematica,
        'tipo_presentacion' => $tipo_presentacion, 
        'tipo_competicion' => $tipo_competicion,
        'fecha_trabajo' => $fecha_trabajo,
        'fecha_usuario' => $fecha_usuario_formateada
    );
    $pdf->setPieInfo($pie_info);
    
    // Configuración de página
    $pdf->SetMargins(10, 12, 10); // Mayor margen superior para acomodar la información de autor
    $pdf->SetHeaderMargin(5);
    $pdf->SetFooterMargin(25); // Mayor margen inferior para el texto de Creative Commons
    $pdf->SetAutoPageBreak(TRUE, 30);
    
    // Añadir página
    $pdf->AddPage();
    
    // Título del artículo - a una columna
    $pdf->SetFont('helvetica', 'B', 14);  // Modificado tamaño de fuente
    $pdf->SetTextColor(40, 40, 40);
    $pdf->MultiCell(0, 10, strtoupper($trabajo['titulo']), 0, 'C'); // Convertido a mayúsculas
    $pdf->Ln(2);
    
    // Información sobre autores
    $pdf->SetFont('helvetica', '', 12);  // Modificado tamaño de fuente
    $pdf->SetTextColor(50, 50, 50);
    
    // Construir lista de autores
    $autores = [];
    
    for ($i = 1; $i <= 10; $i++) {
        $autor_key = "autor{$i}";
        $apellido_key = "apellido_autor{$i}";
        $titulo_key = "titulo_autor{$i}";
        
        if (!empty($trabajo[$autor_key]) && !empty($trabajo[$apellido_key])) {
            $autor_info = '';
            if (!empty($trabajo[$titulo_key])) {
                $autor_info .= $trabajo[$titulo_key] . ' ';
            }
            $nombre = ucwords(strtolower($trabajo[$autor_key]));
            $apellido = ucwords(strtolower($trabajo[$apellido_key]));
            $autor_info .= $nombre . ' ' . $apellido;
            
            $autores[] = $autor_info;
        }
    }
    
    // Mostrar autores
    if (!empty($autores)) {
        $pdf->MultiCell(0, 8, implode(', ', $autores), 0, 'C');
    } else if (!empty($trabajo['autores'])) {
        $autores_texto = ucwords(strtolower($trabajo['autores']));
        $pdf->MultiCell(0, 8, $autores_texto, 0, 'C');
    }
    
    // Afiliaciones institucionales
    $pdf->Ln(2);
    for ($i = 1; $i <= 10; $i++) {
        $inst_key = "inst_autor{$i}";
        if (!empty($trabajo[$inst_key])) {
            $pdf->SetFont('helvetica', 'I', 10);  // Modificado tamaño de fuente
            $pdf->SetTextColor(70, 70, 70);
            $pdf->MultiCell(0, 7, $trabajo[$inst_key], 0, 'C');
            break;
        }
    }
    
    // Email de contacto
    if (!empty($trabajo['email'])) {
        $pdf->SetFont('helvetica', 'I', 10);  // Modificado tamaño de fuente
        $pdf->SetTextColor(70, 70, 70);
        $pdf->MultiCell(0, 7, $trabajo['email'], 0, 'C');
    }
    
    $pdf->Ln(4);
    
    // INICIO SECCIONES A DOS COLUMNAS
    // Activar modo de dos columnas para todo el contenido
    $pdf->setEqualColumns(2, 93);
    $pdf->selectColumn(0);
    
    // I. INTRODUCCIÓN
    $pdf->SetFont('helvetica', 'B', 13);  // Modificado tamaño de fuente
    $pdf->SetTextColor(35, 35, 35);
    $pdf->Cell(0, 8, 'I. INTRODUCCIÓN', 0, 1, 'L');
    $pdf->Ln(1);
    
    // Texto de la introducción
    if (!empty($trabajo['introduccion'])) {
        $pdf->SetFont('times', '', 14);  // Modificado tamaño de fuente
        $pdf->SetTextColor(45, 45, 45);
        
        $intro_text = $pdf->ajustarTexto($trabajo['introduccion'], 650);
        $pdf->mejorarJustificacion($intro_text, 5.5, 'J');
        $pdf->Ln(2);
    }
    
    // II. MATERIALES Y MÉTODOS
    $pdf->SetFont('helvetica', 'B', 13);  // Modificado tamaño de fuente
    $pdf->SetTextColor(35, 35, 35);
    $pdf->Cell(0, 8, 'II. MATERIALES Y MÉTODOS', 0, 1, 'L');
    $pdf->Ln(1);
    
    // Texto de materiales
    if (!empty($trabajo['materiales'])) {
        $pdf->SetFont('times', '', 14);  // Modificado tamaño de fuente
        $pdf->SetTextColor(45, 45, 45);
        
        $materials_text = $pdf->ajustarTexto($trabajo['materiales'], 650);
        $pdf->mejorarJustificacion($materials_text, 5.5, 'J');
        $pdf->Ln(2);
    }
    
    // Cambiar a la segunda columna
    $pdf->selectColumn(1);
    
    // III. RESULTADOS
    $pdf->SetFont('helvetica', 'B', 13);  // Modificado tamaño de fuente
    $pdf->SetTextColor(35, 35, 35);
    $pdf->Cell(0, 8, 'III. RESULTADOS', 0, 1, 'L');
    $pdf->Ln(1);
    
    // Texto de resultados
    if (!empty($trabajo['resultados'])) {
        $pdf->SetFont('times', '', 14);  // Modificado tamaño de fuente
        $pdf->SetTextColor(45, 45, 45);
        
        $results_text = $pdf->ajustarTexto($trabajo['resultados'], 650);
        $pdf->mejorarJustificacion($results_text, 5.5, 'J');
        $pdf->Ln(2);
    }
    
    // IV. CONCLUSIONES
    $pdf->SetFont('helvetica', 'B', 13);  // Modificado tamaño de fuente
    $pdf->SetTextColor(35, 35, 35);
    $pdf->Cell(0, 8, 'IV. CONCLUSIONES', 0, 1, 'L');
    $pdf->Ln(1);
    
    // Texto de conclusiones
    if (!empty($trabajo['conclusiones'])) {
        $pdf->SetFont('times', '', 14);  // Modificado tamaño de fuente
        $pdf->SetTextColor(45, 45, 45);
        
        $conclusions_text = $pdf->ajustarTexto($trabajo['conclusiones'], 650);
        $pdf->mejorarJustificacion($conclusions_text, 5.5, 'J');
    }
    
    // Salida del PDF con nombre personalizado
    $clean_title = preg_replace('/[^a-zA-Z0-9]/', '_', $trabajo['titulo']);
    $clean_title = substr($clean_title, 0, 30);
    $filename = 'paper_' . (isset($trabajo['codigo']) ? $trabajo['codigo'] : '') . '_' . $clean_title . '.pdf';
    $pdf->Output($filename, 'D');
    exit;
}
?>