<?php
// Inicia la sesión antes de cualquier salida
session_start();

// Configuración de errores (opcional)
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 0);

// Incluir archivos necesarios
require_once 'utils_database.php';
require_once 'utils.php';
require_once "session_check.php";

// Función para redirigir a página de login
function redirectToLogin() {
    header("Location: login.php");
    exit(); // Detiene completamente la ejecución
}

// Verificar si el usuario está logueado
if (!isset($_SESSION['usr']) || empty($_SESSION['usr'])) {
    redirectToLogin();
}

// Obtener información del usuario si está logueado
$vAreasUsuario = getDatUser($_SESSION['usr'], 9);
$vTipo = getDatUser($_SESSION['usr'], 2);
$vIdUsr = getDatUser($_SESSION['usr'], 1);

// Verificar si la sesión ha expirado (opcional)
$session_timeout = 3600; // 1 hora en segundos
if (!isset($_SESSION['last_activity']) || (time() - $_SESSION['last_activity']) > $session_timeout) {
    // La sesión ha expirado
    session_unset();     // Eliminar todas las variables de sesión
    session_destroy();   // Destruir la sesión
    redirectToLogin();
}

// Actualizar tiempo de última actividad
$_SESSION['last_activity'] = time();

// Verificación de permisos específicos (personalizar según necesidades)
function checkPermission($requiredType) {
    global $vTipo;
    if ($vTipo != $requiredType) {
        header("Location: unauthorized.php");
        exit();
    }
}

// Ejemplo de uso: checkPermission('admin'); // Para restringir a solo administradores
?>

<?php
// Incluimos el archivo de utilidades de la base de datos
require_once 'utils_database.php';

// Verificamos si hay una solicitud de exportación
$export = isset($_GET['export']) ? $_GET['export'] : '';

// Función para obtener la bandera del país
function getFlagEmoji($countryCode) {
    // Mapa de países a códigos ISO
    $countryToCode = [
        'Argentina' => 'AR',
        'Brasil' => 'BR',
        'Chile' => 'CL',
        'Colombia' => 'CO',
        'Ecuador' => 'EC',
        'España' => 'ES',
        'Mexico' => 'MX',
        'Perú' => 'PE',
        'Uruguay' => 'UY',
        'Venezuela' => 'VE',
        'Bolivia' => 'BO',
        'Paraguay' => 'PY',
        'Costa Rica' => 'CR',
        'Panamá' => 'PA',
        'Estados Unidos' => 'US',
        'United States' => 'US',
        'Canada' => 'CA',
        'Portugal' => 'PT',
        'Italia' => 'IT',
        'Francia' => 'FR',
        'Alemania' => 'DE',
        'Reino Unido' => 'GB',
        'United Kingdom' => 'GB',
        'Spain' => 'ES',
        'Peru' => 'PE',
        'Dominican Republic' => 'DO',
        'Guatemala' => 'GT',
        'Japan' => 'JP',
        'Puerto Rico' => 'PR',
        'Qatar' => 'QA',
        'Russia' => 'RU'
    ];
    
    // Si no existe en el mapa, devolvemos el código original
    $code = isset($countryToCode[$countryCode]) ? $countryToCode[$countryCode] : 'XX';
    
    // Ruta a las imágenes de banderas (suponiendo que tienes una carpeta "flags" con imágenes nombradas por código ISO)
    $flagPath = "https://flagcdn.com/48x36/" . strtolower($code) . ".png";
    
    // Devolvemos la etiqueta HTML de la imagen
    return '<img src="' . $flagPath . '" alt="' . $countryCode . '" title="' . $countryCode . '" class="flag-img" width="36" height="27">';
}

// Obtenemos los trabajos que tienen las 3 evaluaciones completas
function obtenerTrabajosEvaluados() {
    // Activamos la conexión MySQL usando la función de utils_database.php
    $conn = Activarmysql();
    
    // Consulta SQL para obtener los trabajos completamente evaluados
    $sql = "SELECT 
                id, 
                codigo,
                titulo, 
                pais,
                ((calificacion1_1 + calificacion1_2 + calificacion1_3 + calificacion1_4 + calificacion1_5 + calificacion1_6 +
                 calificacion2_1 + calificacion2_2 + calificacion2_3 + calificacion2_4 + calificacion2_5 + calificacion2_6 +
                 calificacion3_1 + calificacion3_2 + calificacion3_3 + calificacion3_4 + calificacion3_5 + calificacion3_6) / 3) as promedio_calificacion
            FROM 
                ttrabajo 
            WHERE 
                calificacion1_fecha IS NOT NULL AND 
                calificacion2_fecha IS NOT NULL AND 
                calificacion3_fecha IS NOT NULL
            ORDER BY 
                promedio_calificacion DESC, pais ASC";
    
    $result = $conn->query($sql);
    $trabajos = [];
    
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $row['promedio_calificacion'] = number_format($row['promedio_calificacion'], 2);
            $row['bandera'] = getFlagEmoji($row['pais']);
            $trabajos[] = $row;
        }
    }
    
    $conn->close();
    return $trabajos;
}

// Agrupamos los trabajos por país
function agruparTrabajosPorPais($trabajos) {
    $porPais = [];
    foreach ($trabajos as $trabajo) {
        $pais = $trabajo['pais'];
        if (!isset($porPais[$pais])) {
            $porPais[$pais] = [];
        }
        $porPais[$pais][] = $trabajo;
    }
    return $porPais;
}

// Verificamos si hay una solicitud de exportación
$export = isset($_GET['export']) ? $_GET['export'] : '';

// Obtenemos los datos (asegúrate que estas funciones no impriman nada)
$trabajos = obtenerTrabajosEvaluados();
$trabajosPorPais = agruparTrabajosPorPais($trabajos);

// Contamos la cantidad total de trabajos y promedio general
$totalTrabajos = count($trabajos);
$promedioGeneral = 0;
if ($totalTrabajos > 0) {
    $sumaPromedios = 0;
    foreach ($trabajos as $trabajo) {
        $sumaPromedios += floatval($trabajo['promedio_calificacion']);
    }
    $promedioGeneral = number_format($sumaPromedios / $totalTrabajos, 2);
}

// Seleccionamos los 3 mejores trabajos para el escalafón
$mejoresTrabajos = array_slice($trabajos, 0, 3);

// Contamos trabajos por país
$cantidadPorPais = [];
foreach ($trabajosPorPais as $pais => $trabajosDelPais) {
    $cantidadPorPais[$pais] = count($trabajosDelPais);
}

/* AQUÍ COMIENZAN LAS EXPORTACIONES */

// EXPORTACIÓN A EXCEL (CSV)
if ($export == 'excel') {
    // Limpiamos cualquier salida previa
    ob_end_clean();
    
    // Configuración para la salida del archivo CSV
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="resumen_cientificos_' . date('Y-m-d') . '.csv"');
    
    // Crear un manejador de archivo para PHP
    $output = fopen('php://output', 'w');
    
    // Establecer el delimitador de campos correcto para Excel
    fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF)); // Escribir BOM para UTF-8
    
    // Escribir los encabezados
    fputcsv($output, ['CÓDIGO', 'TÍTULO', 'PAÍS', 'CALIFICACIÓN']);
    
    // Escribir los datos
    foreach ($trabajos as $trabajo) {
        // Para evitar problemas con caracteres especiales
        $fila = [
            $trabajo['codigo'],
            html_entity_decode(strip_tags($trabajo['titulo']), ENT_QUOTES, 'UTF-8'),
            $trabajo['pais'],
            $trabajo['promedio_calificacion']
        ];
        fputcsv($output, $fila);
    }
    
    // También añadir una sección con los mejores trabajos
    fputcsv($output, []);  // Línea en blanco
    fputcsv($output, ['MEJORES TRABAJOS']);
    fputcsv($output, ['POSICIÓN', 'CÓDIGO', 'TÍTULO', 'PAÍS', 'CALIFICACIÓN']);
    
    for ($i = 0; $i < min(3, count($mejoresTrabajos)); $i++) {
        $trabajo = $mejoresTrabajos[$i];
        $fila = [
            ($i + 1),
            $trabajo['codigo'],
            html_entity_decode(strip_tags($trabajo['titulo']), ENT_QUOTES, 'UTF-8'),
            $trabajo['pais'],
            $trabajo['promedio_calificacion']
        ];
        fputcsv($output, $fila);
    }
    
    // Añadir estadísticas
    fputcsv($output, []);  // Línea en blanco
    fputcsv($output, ['ESTADÍSTICAS']);
    fputcsv($output, ['Total de Trabajos', $totalTrabajos]);
    fputcsv($output, ['Promedio General', $promedioGeneral]);
    fputcsv($output, ['Países Participantes', count($trabajosPorPais)]);
    
    // Distribución por países
    fputcsv($output, []);  // Línea en blanco
    fputcsv($output, ['DISTRIBUCIÓN POR PAÍSES']);
    fputcsv($output, ['PAÍS', 'CANTIDAD DE TRABAJOS']);
    
    // Ordenar países por cantidad (mayor a menor)
    arsort($cantidadPorPais);
    
    foreach ($cantidadPorPais as $pais => $cantidad) {
        fputcsv($output, [$pais, $cantidad]);
    }
    
    fclose($output);
    exit;
}

// EXPORTACIÓN A PDF
if ($export == 'pdf') {
    // Limpiar cualquier salida previa que pudiera estar en el buffer
    ob_end_clean();
    
    // Verificar si está instalada la biblioteca TCPDF
    $tcpdfInstalled = false;
    
    // Intentar cargar TCPDF desde diferentes ubicaciones
    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;
    }
    
    if (!$tcpdfInstalled) {
        // Asegurarse de que no se ha enviado nada antes de este redirect
        header('Location: ?error=pdf_library_missing');
        exit;
    }
    
    // Crear una clase personalizada basada en TCPDF para agregar encabezado y pie de página
    class MYPDF extends TCPDF {
        // Encabezado de página
        public function Header() {
            // Logo (opcional)
            $image_file = 'logo.png'; // Asegúrate de tener este archivo
            if (file_exists($image_file)) {
                $this->Image($image_file, 10, 10, 30, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
            }
            
            // Título del documento
            $this->SetFont('helvetica', 'B', 14);
            $this->SetY(15);
            $this->Cell(0, 10, 'Dashboard de Resúmenes Científicos', 0, false, 'C', 0, '', 0, false, 'M', 'M');
            
            // Línea separadora
            $this->Line(10, 25, $this->getPageWidth() - 10, 25);
        }
        
        // Pie de página
        public function Footer() {
            // Posición a 15 mm del final
            $this->SetY(-15);
            // Fuente
            $this->SetFont('helvetica', 'I', 8);
            // Fecha de generación
            $this->Cell(0, 10, 'Informe generado el ' . date('d/m/Y H:i:s'), 0, false, 'L', 0, '', 0, false, 'T', 'M');
            // Número de página
            $this->Cell(0, 10, 'Página ' . $this->getAliasNumPage() . '/' . $this->getAliasNbPages(), 0, false, 'R', 0, '', 0, false, 'T', 'M');
        }
    }
    
    try {
        // Crear una nueva instancia de la clase personalizada
        $pdf = new MYPDF('P', 'mm', 'A4', true, 'UTF-8', false);
        
        // Establecer información de documento
        $pdf->SetCreator('Dashboard Resúmenes Científicos');
        $pdf->SetAuthor('Sistema de Evaluación');
        $pdf->SetTitle('Resúmenes Científicos - Trabajos Evaluados');
        $pdf->SetSubject('Reporte de Trabajos Evaluados');
        
        // Establecer márgenes
        $pdf->SetMargins(15, 30, 15);
        $pdf->SetHeaderMargin(5);
        $pdf->SetFooterMargin(10);
        $pdf->SetAutoPageBreak(TRUE, 15);
        
        // Establecer fuente
        $pdf->SetFont('helvetica', '', 10);
        
        // Agregar una página
        $pdf->AddPage();
        
        // Cabecera del PDF
        $pdf->SetFont('helvetica', 'B', 16);
        $pdf->Cell(0, 10, 'Dashboard de Resúmenes Científicos', 0, 1, 'C');
        $pdf->SetFont('helvetica', '', 12);
        $pdf->Cell(0, 6, 'Visualización de trabajos completamente evaluados', 0, 1, 'C');
        $pdf->Ln(5);
        
        // Agregar una pequeña descripción
        $pdf->SetFont('helvetica', 'I', 10);
        $pdf->MultiCell(0, 6, 'Este documento contiene un resumen de los trabajos científicos evaluados, ordenados por calificación. Se incluyen las métricas globales, el escalafón de mejores trabajos y un desglose por país de origen.', 0, 'L');
        $pdf->Ln(5);
        
        // Agregar fecha de generación
        $pdf->SetFont('helvetica', '', 10);
        $pdf->Cell(0, 6, 'Fecha de generación: ' . date('d/m/Y H:i:s'), 0, 1, 'R');
        $pdf->Ln(5);
        
        // Estadísticas globales
        $pdf->SetFont('helvetica', 'B', 14);
        $pdf->Cell(0, 10, 'Estadísticas Globales', 0, 1, 'L');
        $pdf->SetFont('helvetica', '', 12);
        
        // Crear tabla de estadísticas
        $pdf->SetFillColor(240, 240, 240);
        $pdf->Cell(60, 10, 'Total de Trabajos:', 1, 0, 'L', 1);
        $pdf->Cell(30, 10, $totalTrabajos, 1, 1, 'C', 0);
        
        $pdf->Cell(60, 10, 'Promedio General:', 1, 0, 'L', 1);
        $pdf->Cell(30, 10, $promedioGeneral, 1, 1, 'C', 0);
        
        $pdf->Cell(60, 10, 'Países Participantes:', 1, 0, 'L', 1);
        $pdf->Cell(30, 10, count($trabajosPorPais), 1, 1, 'C', 0);
        
        // Agregar una leyenda de calificaciones
        $pdf->Ln(5);
        $pdf->SetFont('helvetica', '', 10);
        $pdf->Cell(0, 6, 'Leyenda de Calificaciones:', 0, 1, 'L');
        
        // Excelente
        $pdf->SetFillColor(46, 204, 113);
        $pdf->SetTextColor(255, 255, 255);
        $pdf->Cell(30, 6, 'Excelente', 1, 0, 'C', 1);
        $pdf->SetTextColor(0, 0, 0);
        $pdf->Cell(40, 6, '>= 90', 1, 1, 'C', 0);
        
        // Bueno
        $pdf->SetFillColor(52, 152, 219);
        $pdf->SetTextColor(255, 255, 255);
        $pdf->Cell(30, 6, 'Bueno', 1, 0, 'C', 1);
        $pdf->SetTextColor(0, 0, 0);
        $pdf->Cell(40, 6, '75 - 89.99', 1, 1, 'C', 0);
        
        // Regular
        $pdf->SetFillColor(243, 156, 18);
        $pdf->SetTextColor(255, 255, 255);
        $pdf->Cell(30, 6, 'Regular', 1, 0, 'C', 1);
        $pdf->SetTextColor(0, 0, 0);
        $pdf->Cell(40, 6, '60 - 74.99', 1, 1, 'C', 0);
        
        // Deficiente
        $pdf->SetFillColor(231, 76, 60);
        $pdf->SetTextColor(255, 255, 255);
        $pdf->Cell(30, 6, 'Deficiente', 1, 0, 'C', 1);
        $pdf->SetTextColor(0, 0, 0);
        $pdf->Cell(40, 6, '< 60', 1, 1, 'C', 0);
        
        $pdf->Ln(10);
        
        // Mejores trabajos
        $pdf->SetFont('helvetica', 'B', 14);
        $pdf->Cell(0, 10, 'Escalafón de Mejores Trabajos', 0, 1, 'L');
        
        // Crear tabla para mejores trabajos
        $pdf->SetFillColor(52, 152, 219); // Azul para cabecera
        $pdf->SetTextColor(255, 255, 255);
        $pdf->SetFont('helvetica', 'B', 11);
        $pdf->Cell(15, 10, 'Pos.', 1, 0, 'C', 1);
        $pdf->Cell(30, 10, 'Código', 1, 0, 'C', 1);
        $pdf->Cell(90, 10, 'Título', 1, 0, 'C', 1);
        $pdf->Cell(30, 10, 'País', 1, 0, 'C', 1);
        $pdf->Cell(20, 10, 'Calif.', 1, 1, 'C', 1);
        
        $pdf->SetTextColor(0, 0, 0);
        $pdf->SetFont('helvetica', '', 10);
        
        // Colores para calificaciones
        $excelente = [46, 204, 113]; // verde
        $bueno = [52, 152, 219]; // azul
        $regular = [243, 156, 18]; // naranja
        $deficiente = [231, 76, 60]; // rojo
        
        // Agregar los 3 mejores trabajos
        for ($i = 0; $i < min(3, count($mejoresTrabajos)); $i++) {
            $trabajo = $mejoresTrabajos[$i];
            $calificacion = floatval($trabajo['promedio_calificacion']);
            
            // Determinar color de calificación
            if ($calificacion >= 90) {
                $fillColor = $excelente;
            } elseif ($calificacion >= 75) {
                $fillColor = $bueno;
            } elseif ($calificacion >= 60) {
                $fillColor = $regular;
            } else {
                $fillColor = $deficiente;
            }
            
            // Agregar iconos de posición
            $posicion = '';
            if ($i == 0) {
                $posicion = '1º 🥇';
            } elseif ($i == 1) {
                $posicion = '2º 🥈';
            } elseif ($i == 2) {
                $posicion = '3º 🥉';
            }
            
            $pdf->Cell(15, 10, $posicion, 1, 0, 'C', 0);
            $pdf->Cell(30, 10, $trabajo['codigo'], 1, 0, 'C', 0);
            
            // Título con posible recorte si es muy largo
            $titulo = $trabajo['titulo'];
            if (strlen($titulo) > 50) {
                $titulo = substr($titulo, 0, 47) . '...';
            }
            $pdf->Cell(90, 10, $titulo, 1, 0, 'L', 0);
            
            $pdf->Cell(30, 10, $trabajo['pais'], 1, 0, 'C', 0);
            
            // Aplicar color de fondo a la calificación
            $pdf->SetFillColor($fillColor[0], $fillColor[1], $fillColor[2]);
            $pdf->SetTextColor(255, 255, 255);
            $pdf->Cell(20, 10, $trabajo['promedio_calificacion'], 1, 1, 'C', 1);
            $pdf->SetTextColor(0, 0, 0);
        }
        
        $pdf->Ln(10);
        
        // Trabajos por país
        $pdf->SetFont('helvetica', 'B', 14);
        $pdf->Cell(0, 10, 'Trabajos por País', 0, 1, 'L');
        
        // Ordenar países por cantidad de trabajos (mayor a menor)
        arsort($cantidadPorPais);
        
        // Crear un gráfico simple de barras para mostrar cantidad por país
        $pdf->SetFont('helvetica', 'B', 10);
        $pdf->Cell(0, 6, 'Distribución de Trabajos por País', 0, 1, 'L');
        $pdf->Ln(2);
        
        // Encontrar el valor máximo para escalar el gráfico
        $maxValue = max($cantidadPorPais);
        $barMaxWidth = 120; // Ancho máximo de la barra en mm
        
        $pdf->SetFont('helvetica', '', 8);
        
        // Limitamos a los 10 primeros países para no sobrecargar el PDF
        $contador = 0;
        foreach ($cantidadPorPais as $pais => $cantidad) {
            if ($contador >= 10) break;
            
            // Calcular el ancho de la barra proporcional al valor
            $barWidth = ($cantidad / $maxValue) * $barMaxWidth;
            
            // Dibujar nombre del país
            $pdf->Cell(30, 6, $pais, 0, 0, 'R');
            
            // Dibujar el valor
            $pdf->Cell(10, 6, $cantidad, 0, 0, 'R');
            
            // Dibujar la barra
            $pdf->SetFillColor(52, 152, 219);
            $pdf->Cell($barWidth, 6, '', 0, 0, 'L', 1);
            
            $pdf->Ln(7);
            $contador++;
        }
        
        $pdf->Ln(5);
        
        // Iterar por cada país
        foreach ($trabajosPorPais as $pais => $trabajosDelPais) {
            // Verificar si necesitamos una nueva página
            if ($pdf->GetY() > 220) {
                $pdf->AddPage();
            }
            
            // Encabezado del país
            $pdf->SetFillColor(44, 62, 80); // Color oscuro para el país
            $pdf->SetTextColor(255, 255, 255);
            $pdf->SetFont('helvetica', 'B', 12);
            $pdf->Cell(150, 10, $pais, 1, 0, 'L', 1);
            $pdf->Cell(30, 10, 'Trabajos: ' . count($trabajosDelPais), 1, 1, 'C', 1);
            
            // Crear tabla de trabajos
            $pdf->SetFillColor(52, 152, 219); // Azul para cabecera
            $pdf->SetFont('helvetica', 'B', 11);
            $pdf->Cell(30, 10, 'Código', 1, 0, 'C', 1);
            $pdf->Cell(120, 10, 'Título', 1, 0, 'C', 1);
            $pdf->Cell(30, 10, 'Calificación', 1, 1, 'C', 1);
            
            $pdf->SetTextColor(0, 0, 0);
            $pdf->SetFont('helvetica', '', 10);
            
            // Ordenar trabajos por calificación (mayor a menor)
            usort($trabajosDelPais, function($a, $b) {
                return floatval($b['promedio_calificacion']) - floatval($a['promedio_calificacion']);
            });
            
            // Agregar trabajos de este país
            foreach ($trabajosDelPais as $trabajo) {
                // Verificar si necesitamos una nueva página
                if ($pdf->GetY() > 250) {
                    $pdf->AddPage();
                    
                    // Repetir encabezados
                    $pdf->SetFillColor(52, 152, 219);
                    $pdf->SetTextColor(255, 255, 255);
                    $pdf->SetFont('helvetica', 'B', 11);
                    $pdf->Cell(30, 10, 'Código', 1, 0, 'C', 1);
                    $pdf->Cell(120, 10, 'Título', 1, 0, 'C', 1);
                    $pdf->Cell(30, 10, 'Calificación', 1, 1, 'C', 1);
                    $pdf->SetTextColor(0, 0, 0);
                    $pdf->SetFont('helvetica', '', 10);
                }
                
                $calificacion = floatval($trabajo['promedio_calificacion']);
                
                // Determinar color de calificación
                if ($calificacion >= 90) {
                    $fillColor = $excelente;
                } elseif ($calificacion >= 75) {
                    $fillColor = $bueno;
                } elseif ($calificacion >= 60) {
                    $fillColor = $regular;
                } else {
                    $fillColor = $deficiente;
                }
                
                $pdf->Cell(30, 10, $trabajo['codigo'], 1, 0, 'C', 0);
                
                // Título con posible recorte si es muy largo
                $titulo = $trabajo['titulo'];
                if (strlen($titulo) > 70) {
                    $titulo = substr($titulo, 0, 67) . '...';
                }
                $pdf->Cell(120, 10, $titulo, 1, 0, 'L', 0);
                
                // Aplicar color de fondo a la calificación
                $pdf->SetFillColor($fillColor[0], $fillColor[1], $fillColor[2]);
                $pdf->SetTextColor(255, 255, 255);
                $pdf->Cell(30, 10, $trabajo['promedio_calificacion'], 1, 1, 'C', 1);
                $pdf->SetTextColor(0, 0, 0);
            }
            
            $pdf->Ln(5);
        }
        
        // Limpiar cualquier salida pendiente antes de enviar el PDF
        ob_end_clean();
        
        // Enviar el PDF al navegador
        $pdf->Output('resumen_cientificos_' . date('Y-m-d') . '.pdf', 'D');
        exit;
    } catch (Exception $e) {
        // En caso de error, manejo adecuado
        ob_end_clean(); // Asegurarse de limpiar el buffer
        echo "Error al generar el PDF: " . $e->getMessage();
        exit;
    }
}

?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dashboard de Resúmenes Científicos</title>
    
    <!-- Bootstrap y Font Awesome -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        :root {
            --primary-color: #377970;
            --secondary-color: #16222A;
            --accent-color: #e74c3c;
            --light-color: #ecf0f1;
            --dark-color: #383838;
        }
        
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: #f5f7fa;
            color: var(--dark-color);
        }
        
        .dashboard-header {
            background: linear-gradient(to right, var(--primary-color), var(--secondary-color));
            color: white;
            padding: 1.5rem;
            margin-bottom: 2rem;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
        }
        
        .card {
            border-radius: 10px;
            border: none;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            overflow: hidden;
            margin-bottom: 1.5rem;
        }
        
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
        }
        
        .card-header {
            background-color: var(--secondary-color);
            color: white;
            font-weight: 600;
            padding: 1rem;
            border-bottom: none;
            display: flex;
            justify-content: space-between;
            align-items: center;
            text-align: center;
        }
        
        .country-header {
            cursor: pointer;
        }
        
        .card-body {
            padding: 1.5rem;
        }
        
        .table {
            width: 100%;
            border-collapse: separate;
            border-spacing: 0;
        }
        
        .table th {
            background-color: var(--light-color);
            color: var(--dark-color);
            font-weight: 600;
            padding: 0.75rem 1rem;
            border: none;
            text-align: center;
        }
        
        .table td {
            padding: 0.75rem 1rem;
            border-top: 1px solid #e0e5e9;
            vertical-align: middle;
        }
        
        .table td.titulo {
            text-align: justify;
            text-transform: uppercase;
        }
        
        .table tr:hover {
            background-color: rgba(52, 152, 219, 0.05);
        }
        
        .stats-card {
            text-align: center;
            padding: 1.5rem;
            border-radius: 15px;
            background: linear-gradient(145deg, var(--light-color), #ffffff);
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
            transition: transform 0.3s ease;
        }
        
        .stats-card:hover {
            transform: translateY(-5px);
        }
        
        .stats-card h3 {
            font-size: 3rem;
            font-weight: 700;
            margin-bottom: 0.5rem;
            color: var(--secondary-color);
            text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
        }
        
        .stats-card p {
            color: #7f8c8d;
            margin-bottom: 0;
            font-size: 1.2rem;
            font-weight: 500;
        }
        
        .trabajos-count {
            display: flex;
            flex-direction: column;
            align-items: center;
            background-color: rgba(255, 255, 255, 0.2);
            padding: 0.5rem 1rem;
            border-radius: 15px;
            min-width: 80px;
        }
        
        .count-number {
            font-size: 2rem;
            font-weight: 700;
            line-height: 1;
            color: white;
            text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
        }
        
        .count-label {
            font-size: 0.9rem;
            color: rgba(255, 255, 255, 0.9);
        }
        
        .calificacion {
            font-weight: bold;
            min-width: 50px;
            text-align: center;
            display: inline-block;
            padding: 0.25rem 0.5rem;
            border-radius: 4px;
        }
        
        .excelente {
            background-color: #2ecc71;
            color: white;
        }
        
        .bueno {
            background-color: #3498db;
            color: white;
        }
        
        .regular {
            background-color: #f39c12;
            color: white;
        }
        
        .deficiente {
            background-color: #e74c3c;
            color: white;
        }
        
        .flag-img {
            margin-right: 0.5rem;
            vertical-align: middle;
            border: 1px solid #ddd;
            border-radius: 2px;
        }
        
        .trophy {
            font-size: 1.8rem;
            margin-right: 0.5rem;
        }
        
        .gold {
            color: #FFD700;
            text-shadow: 0 0 5px rgba(255, 215, 0, 0.5);
        }
        
        .silver {
            color: #C0C0C0;
            text-shadow: 0 0 5px rgba(192, 192, 192, 0.5);
        }
        
        .bronze {
            color: #CD7F32;
            text-shadow: 0 0 5px rgba(205, 127, 50, 0.5);
        }
        
        .deficient-medal {
            color: #95a5a6;
            font-size: 1.6rem;
            text-shadow: 0 0 5px rgba(149, 165, 166, 0.5);
        }
        
        .podium {
            background: linear-gradient(to right, var(--primary-color), var(--secondary-color));
            border-radius: 15px;
            color: white;
            padding: 2rem 0;
            margin-bottom: 2rem;
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
        }
        
        .podium-header {
            text-align: center;
            margin-bottom: 1.5rem;
        }
        
        .podium-header h2 {
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 2px;
            margin-bottom: 0;
            text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
        }
        
        .podium-positions {
            display: flex;
            justify-content: center;
            align-items: flex-end;
            gap: 1rem;
            padding: 0 1rem;
        }
        
        .podium-position {
            text-align: center;
            padding: 1rem;
            border-radius: 10px;
            transition: transform 0.3s ease;
            width: 100%;
            max-width: 300px;
        }
        
        .podium-position:hover {
            transform: translateY(-10px);
        }
        
        .position-1 {
            background-color: rgba(255, 215, 0, 0.3);
            border: 2px solid #FFD700;
            height: 300px;
            display: flex;
            flex-direction: column;
            justify-content: flex-end;
            z-index: 3;
        }
        
        .position-2 {
            background-color: rgba(192, 192, 192, 0.3);
            border: 2px solid #C0C0C0;
            height: 250px;
            display: flex;
            flex-direction: column;
            justify-content: flex-end;
            z-index: 2;
        }
        
        .position-3 {
            background-color: rgba(205, 127, 50, 0.3);
            border: 2px solid #CD7F32;
            height: 250px;
            display: flex;
            flex-direction: column;
            justify-content: flex-end;
            z-index: 1;
        }
        
        .position-trophy {
            font-size: 3rem;
            margin-bottom: 0.5rem;
        }
        
        .position-number {
            font-size: 2.5rem;
            font-weight: 800;
            margin-bottom: 0.5rem;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        }
        
        .position-codigo {
            font-size: 1.2rem;
            font-weight: 600;
            margin-bottom: 0.5rem;
            background: rgba(255, 255, 255, 0.2);
            padding: 0.3rem 0.8rem;
            border-radius: 30px;
            display: inline-block;
        }
        
        .position-calificacion {
            font-size: 1.5rem;
            font-weight: 700;
            margin-bottom: 0.5rem;
        }
        
        .position-pais {
            display: flex;
            align-items: center;
            justify-content: center;
            margin-top: 0.5rem;
        }
        
        .position-flag {
            margin-right: 0.5rem;
        }
        
        .truncate-text {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            max-width: 100%;
        }
        
        .position-title {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            max-width: 100%;
            background: rgba(255, 255, 255, 0.2);
            padding: 5px 10px;
            border-radius: 5px;
            margin: 5px 0;
            cursor: help;
        }
        
        /* Botones de exportación */
        .export-buttons {
            margin-bottom: 20px;
            display: flex;
            justify-content: flex-end;
            gap: 10px;
        }
        
        .btn-export {
            display: flex;
            align-items: center;
            gap: 8px;
            padding: 8px 16px;
            border-radius: 8px;
            font-weight: 600;
            text-decoration: none;
            transition: all 0.3s ease;
            box-shadow: 0 2px 5px rgba(0,0,0,0.15);
        }
        
        .btn-pdf {
            background-color: #e74c3c;
            color: white;
            border: none;
        }
        
        .btn-pdf:hover {
            background-color: #c0392b;
            color: white;
            transform: translateY(-2px);
            box-shadow: 0 4px 8px rgba(0,0,0,0.2);
        }
        
        .btn-excel {
            background-color: #27ae60;
            color: white;
            border: none;
        }
        
        .btn-excel:hover {
            background-color: #2ecc71;
            color: white;
            transform: translateY(-2px);
            box-shadow: 0 4px 8px rgba(0,0,0,0.2);
        }
        
        /* Efecto para botón descargando */
        .btn-export.downloading {
            pointer-events: none;
            opacity: 0.8;
            position: relative;
        }
        
        .btn-export.downloading:after {
            content: "";
            position: absolute;
            width: 100%;
            height: 2px;
            bottom: 0;
            left: 0;
            background: white;
            animation: loading 2s infinite;
        }
        
        @keyframes loading {
            0% { width: 0; left: 0; }
            50% { width: 100%; left: 0; }
            100% { width: 0; left: 100%; }
        }
        
        @media (max-width: 991px) {
            .podium-positions {
                flex-direction: column;
                align-items: center;
            }
            
            .podium-position {
                height: auto !important;
                width: 100%;
                max-width: 100%;
            }
            
            .export-buttons {
                justify-content: center;
                flex-wrap: wrap;
            }
        }
    </style>
</head>
<body>
    <div class="dashboard-header">
        <div class="container">
            <h1><i class="fas fa-chart-line me-2"></i> Dashboard de Resúmenes Científicos</h1>
            <p>Visualización de trabajos completamente evaluados por país</p>
        </div>
    </div>
    
    <div class="container">
        <?php if(isset($_GET['error']) && $_GET['error'] == 'pdf_library_missing'): ?>
        <div class="alert alert-danger alert-dismissible fade show" role="alert">
            <strong><i class="fas fa-exclamation-triangle"></i> Error:</strong> No se pudo generar el PDF porque falta la biblioteca TCPDF. Contacte al administrador.
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
        <?php endif; ?>
        
        <!-- Botones de exportación -->
        <div class="export-buttons">
            <a href="?export=pdf" class="btn btn-export btn-pdf">
                <i class="fas fa-file-pdf"></i> Exportar a PDF
            </a>
            <a href="?export=excel" class="btn btn-export btn-excel">
                <i class="fas fa-file-excel"></i> Exportar a CSV
            </a>
        </div>
        
        <!-- Escalafón de Mejores Trabajos -->
        <div class="podium">
            <div class="podium-header">
                <h2><i class="fas fa-award me-2"></i> Escalafón de Mejores Trabajos</h2>
            </div>
            <div class="podium-positions">
                <?php if(isset($mejoresTrabajos[1])): ?>
                <div class="podium-position position-2">
                    <div class="position-trophy"><i class="fas fa-trophy silver"></i></div>
                    <div class="position-number">2</div>
                    <div class="position-codigo"><?php echo $mejoresTrabajos[1]['codigo']; ?></div>
                    <div class="position-calificacion"><?php echo $mejoresTrabajos[1]['promedio_calificacion']; ?></div>
                    <div class="position-title" data-bs-toggle="tooltip" data-bs-placement="top" title="<?php echo htmlspecialchars($mejoresTrabajos[1]['titulo']); ?>">
                        <?php echo strtoupper(substr(htmlspecialchars($mejoresTrabajos[1]['titulo']), 0, 20)); ?>...
                    </div>
                    <div class="position-pais">
                        <span class="position-flag"><?php echo $mejoresTrabajos[1]['bandera']; ?></span>
                        <?php echo $mejoresTrabajos[1]['pais']; ?>
                    </div>
                </div>
                <?php endif; ?>
                
                <?php if(isset($mejoresTrabajos[0])): ?>
                <div class="podium-position position-1">
                    <div class="position-trophy"><i class="fas fa-trophy gold"></i></div>
                    <div class="position-number">1</div>
                    <div class="position-codigo"><?php echo $mejoresTrabajos[0]['codigo']; ?></div>
                    <div class="position-calificacion"><?php echo $mejoresTrabajos[0]['promedio_calificacion']; ?></div>
                    <div class="position-title" data-bs-toggle="tooltip" data-bs-placement="top" title="<?php echo htmlspecialchars($mejoresTrabajos[0]['titulo']); ?>">
                        <?php echo strtoupper(substr(htmlspecialchars($mejoresTrabajos[0]['titulo']), 0, 20)); ?>...
                    </div>
                    <div class="position-pais">
                        <span class="position-flag"><?php echo $mejoresTrabajos[0]['bandera']; ?></span>
                        <?php echo $mejoresTrabajos[0]['pais']; ?>
                    </div>
                </div>
                <?php endif; ?>
                
                <?php if(isset($mejoresTrabajos[2])): ?>
                <div class="podium-position position-3">
                    <div class="position-trophy"><i class="fas fa-trophy bronze"></i></div>
                    <div class="position-number">3</div>
                    <div class="position-codigo"><?php echo $mejoresTrabajos[2]['codigo']; ?></div>
                    <div class="position-calificacion"><?php echo $mejoresTrabajos[2]['promedio_calificacion']; ?></div>
                    <div class="position-title" data-bs-toggle="tooltip" data-bs-placement="top" title="<?php echo htmlspecialchars($mejoresTrabajos[2]['titulo']); ?>">
                        <?php echo strtoupper(substr(htmlspecialchars($mejoresTrabajos[2]['titulo']), 0, 20)); ?>...
                    </div>
                    <div class="position-pais">
                        <span class="position-flag"><?php echo $mejoresTrabajos[2]['bandera']; ?></span>
                        <?php echo $mejoresTrabajos[2]['pais']; ?>
                    </div>
                </div>
                <?php endif; ?>
            </div>
        </div>
        
        <!-- Estadísticas Globales -->
        <div class="row mb-4">
            <div class="col-md-4">
                <div class="card stats-card">
                    <h3><?php echo $totalTrabajos; ?></h3>
                    <p>Total de Trabajos Evaluados</p>
                </div>
            </div>
            <div class="col-md-4">
                <div class="card stats-card">
                    <h3><?php echo $promedioGeneral; ?></h3>
                    <p>Promedio General de Calificaciones</p>
                </div>
            </div>
            <div class="col-md-4">
                <div class="card stats-card">
                    <h3><?php echo count($trabajosPorPais); ?></h3>
                    <p>Países Participantes</p>
                </div>
            </div>
        </div>
        
        <!-- Trabajos por País -->
        <?php foreach ($trabajosPorPais as $pais => $trabajosDelPais): ?>
            <div class="card mb-4">
                <div class="card-header country-header" data-bs-toggle="collapse" data-bs-target="#collapse-<?php echo md5($pais); ?>">
                    <h4 class="mb-0">
                        <?php echo getFlagEmoji($pais); ?>
                        <?php echo $pais; ?>
                    </h4>
                    <div class="trabajos-count">
                        <span class="count-number"><?php echo count($trabajosDelPais); ?></span>
                        <span class="count-label"><i class="fas fa-file-alt ms-1"></i></span>
                    </div>
                </div>
                <div class="collapse show" id="collapse-<?php echo md5($pais); ?>">
                    <div class="card-body">
                        <div class="table-responsive">
                            <table class="table">
                                <thead>
                                    <tr>
                                        <th>CÓDIGO</th>
                                        <th>TÍTULO</th>
                                        <th>CALIFICACIÓN</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php foreach ($trabajosDelPais as $trabajo): ?>
                                        <tr>
                                            <td class="text-center"><?php echo $trabajo['codigo']; ?></td>
                                            <td class="titulo"><?php echo strtoupper(htmlspecialchars($trabajo['titulo'])); ?></td>
                                            <td class="text-center">
                                                <?php
                                                    $calificacion = floatval($trabajo['promedio_calificacion']);
                                                    $clase = '';
                                                    $trophy = '';
                                                    
                                                    if ($calificacion >= 90) {
                                                        $clase = 'excelente';
                                                        $trophy = '<i class="fas fa-trophy gold trophy" title="Excelente"></i>';
                                                    } elseif ($calificacion >= 75) {
                                                        $clase = 'bueno';
                                                        $trophy = '<i class="fas fa-trophy silver trophy" title="Bueno"></i>';
                                                    } elseif ($calificacion >= 60) {
                                                        $clase = 'regular';
                                                        $trophy = '<i class="fas fa-trophy bronze trophy" title="Regular"></i>';
                                                    } else {
                                                        $clase = 'deficiente';
                                                        $trophy = '<i class="fas fa-medal deficient-medal" title="Por mejorar"></i>';
                                                    }
                                                ?>
                                                <?php echo $trophy; ?>
                                                <span class="calificacion <?php echo $clase; ?>">
                                                    <?php echo number_format($trabajo['promedio_calificacion'], 2); ?>
                                                </span>
                                            </td>
                                        </tr>
                                    <?php endforeach; ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        <?php endforeach; ?>
    </div>

    <!-- Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
    
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // Habilitar tooltips en todo el documento
            const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
            tooltipTriggerList.forEach(function(tooltipTriggerEl) {
                new bootstrap.Tooltip(tooltipTriggerEl, {
                    trigger: 'hover',
                    placement: 'top',
                    html: true
                });
            });
            
            // Alternar visibilidad de secciones
            const countryHeaders = document.querySelectorAll('.country-header');
            countryHeaders.forEach(header => {
                header.addEventListener('click', function() {
                    const target = this.getAttribute('data-bs-target');
                    const content = document.querySelector(target);
                    if (content.classList.contains('show')) {
                        content.classList.remove('show');
                    } else {
                        content.classList.add('show');
                    }
                });
            });
            
            // Animación para botones de exportación
            const exportButtons = document.querySelectorAll('.btn-export');
            exportButtons.forEach(button => {
                button.addEventListener('click', function(e) {
                    // Animación visual antes de la descarga
                    this.classList.add('downloading');
                    
                    // Mostrar mensaje de procesamiento para archivos grandes
                    const format = this.classList.contains('btn-pdf') ? 'PDF' : 'CSV';
                    const processingMsg = document.createElement('div');
                    processingMsg.className = 'alert alert-info alert-dismissible fade show mt-3';
                    processingMsg.innerHTML = `
                        <strong><i class="fas fa-spinner fa-spin"></i> Procesando...</strong> 
                        Generando archivo ${format}. Esto puede tomar unos segundos.
                        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                    `;
                    
                    // Insertar mensaje después de los botones de exportación
                    document.querySelector('.export-buttons').insertAdjacentElement('afterend', processingMsg);
                    
                    // El mensaje se eliminará automáticamente cuando la descarga comience
                    setTimeout(() => {
                        const alerts = document.querySelectorAll('.alert');
                        alerts.forEach(alert => {
                            if (alert.classList.contains('alert-info')) {
                                try {
                                    const bsAlert = new bootstrap.Alert(alert);
                                    bsAlert.close();
                                } catch(e) {
                                    alert.remove();
                                }
                            }
                        });
                    }, 5000);
                });
            });
        });
    </script>
</body>
</html>