<?php
// certificado_participacion.php
// Este archivo contiene la funcionalidad para generar certificados de participación

// Verificamos si hay una solicitud para exportar el certificado 
// Añadimos un parámetro para especificar qué autor queremos (si hay múltiples)
if (isset($_GET['export_certificate']) && isset($_GET['id'])) {
    // Parámetro opcional para el índice del autor específico
    $autor_index = isset($_GET['autor_index']) ? intval($_GET['autor_index']) : null;
    
    // Importante: llamamos a la función antes de cualquier salida HTML
    generarCertificadoParticipacion(intval($_GET['id']), false, $autor_index);
    // 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 certificados
if (isset($_GET['export_all_certificates']) && isset($_GET['id'])) {
    // Generar un PDF con todos los certificados
    generarTodosCertificados(intval($_GET['id']));
    // El script termina en la función
}

/**
 * Genera un certificado de participación para un trabajo específico
 * Versión mejorada con diseño HTML5/CSS3 para impresión o PDF
 * @param int $trabajo_id ID del trabajo a exportar
 * @param bool $return_html Si es true, devuelve el HTML en lugar de mostrarlo
 * @param int|null $autor_index Si se especifica, genera solo el certificado para ese autor específico
 * @return string|void HTML del certificado si $return_html es true
 */
function generarCertificadoParticipacion($trabajo_id, $return_html = false, $autor_index = null) {
    error_log("Iniciando generarCertificadoParticipacion para ID: $trabajo_id, return_html: " . ($return_html ? 'true' : 'false') . ", autor_index: " . ($autor_index !== null ? $autor_index : 'todos'));
    
    // Incluimos el archivo de utilidades de la base de datos
    require_once 'utils_database.php';
    
    // Activamos la conexión MySQL
    $conn = Activarmysql();
    if (!$conn) {
        error_log("ERROR: No se pudo conectar a la base de datos");
        return false;
    }
    
    error_log("Conexión a base de datos establecida");
    
    // 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);
    if (!$stmt) {
        error_log("ERROR: Error al preparar la consulta SQL: " . $conn->error);
        return false;
    }
    
    $stmt->bind_param("i", $trabajo_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        error_log("ERROR: No se encontró el trabajo con ID: $trabajo_id");
        // En vez de mostrar un mensaje en la página, redirigimos con un parámetro de error
        if (!$return_html) {
            header('Location: ?error=trabajo_no_encontrado');
            exit;
        }
        return false;
    }
    
    error_log("Trabajo encontrado en la base de datos");
    
    $trabajo = $result->fetch_assoc();
    
    // Á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);
        
        if ($stmt_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);
        
        if ($stmt_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'];
            }
        }
    }
    
    // Obtener los autores como objetos para mostrar sus certificados individuales
    $autores_info = [];
    
    // Autores individuales del trabajo (incluimos TODOS los 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])) {
            $titulo = !empty($trabajo[$titulo_key]) ? $trabajo[$titulo_key] : '';
            $nombre = ucwords(strtolower($trabajo[$autor_key]));
            $apellido = ucwords(strtolower($trabajo[$apellido_key]));
            
            // Nombre completo
            $nombre_completo = trim($nombre . ' ' . $apellido);
            
            // El primer autor es el ponente
            $es_ponente = ($i === 1);
            
            $autores_info[] = [
                'titulo' => $titulo,
                'nombre' => $nombre,
                'apellido' => $apellido,
                'nombre_completo' => $nombre_completo,
                'nombre_completo_con_titulo' => (!empty($titulo) ? $titulo . ' ' : '') . $nombre_completo,
                'es_ponente' => $es_ponente,
                'index' => count($autores_info)
            ];
        }
    }
    
    // Si no hay autores individuales pero hay un campo 'autores', usarlo como referencia
    if (empty($autores_info) && !empty($trabajo['autores'])) {
        $autores_texto = ucwords(strtolower($trabajo['autores']));
        $autores_array = explode(',', $autores_texto);
        
        foreach ($autores_array as $index => $autor_texto) {
            $autor_texto = trim($autor_texto);
            if (!empty($autor_texto)) {
                // El primer autor es el ponente
                $es_ponente = ($index === 0);
                
                $autores_info[] = [
                    'titulo' => '',
                    'nombre' => $autor_texto, // No podemos separar nombre y apellido sin más info
                    'apellido' => '',
                    'nombre_completo' => $autor_texto,
                    'nombre_completo_con_titulo' => $autor_texto,
                    'es_ponente' => $es_ponente,
                    'index' => count($autores_info)
                ];
            }
        }
    }
    
    $conn->close();
    
    error_log("Total de autores encontrados: " . count($autores_info));
    
    // Generar un ID único para el certificado base
    $cert_id_base = 'CERT-' . date('Y') . '-' . str_pad($trabajo_id, 4, '0', STR_PAD_LEFT);
    
    // Verificar si queremos usar TCPDF o HTML para la salida
    $use_tcpdf = false;
    
    // Si queremos generar para todos los autores
    if ($autor_index === null && !$return_html) {
        // Mostrar interfaz para seleccionar el autor
        mostrarInterfazSeleccionAutor($trabajo, $autores_info, $trabajo_id);
        exit;
    }
    
    // Seleccionar el autor específico para el certificado
    $autor_objetivo = null;
    
    if ($autor_index !== null && isset($autores_info[$autor_index])) {
        $autor_objetivo = $autores_info[$autor_index];
    } else if (count($autores_info) > 0) {
        // Por defecto, usar el primer autor (el ponente)
        $autor_objetivo = $autores_info[0];
    } else {
        error_log("ERROR: No se encontraron autores para este trabajo");
        if (!$return_html) {
            header('Location: ?error=sin_autores');
            exit;
        }
        return false;
    }
    
    // Generar un ID único para el certificado específico del autor
    $cert_id = $cert_id_base . '-A' . $autor_objetivo['index'];
    
    // Obtener la lista de coautores (todos excepto el autor actual)
    $coautores = [];
    foreach ($autores_info as $autor) {
        // No incluimos al autor objetivo en la lista de coautores
        if ($autor['index'] !== $autor_objetivo['index']) {
            $coautores[] = $autor['nombre_completo_con_titulo'];
        }
    }
    
    $lista_coautores = implode(', ', $coautores);
    
    if ($use_tcpdf && file_exists('vendor/tecnickcom/tcpdf/tcpdf.php')) {
        // Código TCPDF aquí (omitido por brevedad)
        // Se mantendría el código original TCPDF
        error_log("Usando TCPDF para generar el certificado para " . $autor_objetivo['nombre_completo']);
        if ($return_html) {
            error_log("ERROR: No se puede devolver HTML desde TCPDF");
            return false;
        }
    } else {
        // Si necesitamos devolver el HTML en lugar de mostrarlo
        if ($return_html) {
            error_log("Capturando salida HTML para retorno...");
            ob_start();
            
            try {
                // Llama a la función que genera el HTML del certificado
                // Pero modificamos la función para que no use exit()
                outputHtmlCertificateForEmail($trabajo, $autor_objetivo['nombre_completo_con_titulo'], $coautores, $area_tematica, $tipo_presentacion, $cert_id);
            } catch (Exception $e) {
                error_log("ERROR en outputHtmlCertificate: " . $e->getMessage());
                ob_end_clean();
                return false;
            }
            
            $html = ob_get_clean();
            
            if (!$html) {
                error_log("ERROR: No se pudo capturar el HTML del certificado");
                return false;
            }
            
            error_log("HTML capturado, longitud: " . strlen($html) . " bytes");
            return $html;
        } else {
            // Comportamiento original: mostrar el certificado directamente
            error_log("Mostrando certificado para " . $autor_objetivo['nombre_completo']);
            outputHtmlCertificate2($trabajo, $autor_objetivo['nombre_completo_con_titulo'], $coautores, $area_tematica, $tipo_presentacion, $cert_id);
            // La función outputHtmlCertificate termina con exit(), por lo que este código no se ejecutará
        }
    }
}

/**
 * Muestra una interfaz para seleccionar el autor para el cual generar el certificado
 * @param array $trabajo Datos del trabajo
 * @param array $autores_info Lista de autores disponibles
 * @param int $trabajo_id ID del trabajo
 */
function mostrarInterfazSeleccionAutor($trabajo, $autores_info, $trabajo_id) {
    // Limpiar cualquier salida anterior
    ob_clean();
    
    // Título del trabajo
    $titulo_trabajo = !empty($trabajo['titulo']) ? $trabajo['titulo'] : 'Sin título';
    
    // Generar el HTML para la interfaz de selección
    header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Seleccionar Autor para Certificado</title>
    
    <!-- Fuentes de Google -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700&display=swap" rel="stylesheet">
    
    <!-- Font Awesome para iconos -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'Montserrat', sans-serif;
            background-color: #f0f2f5;
            color: #333;
            line-height: 1.6;
            padding: 30px;
        }
        
        .container {
            max-width: 900px;
            margin: 0 auto;
            background-color: white;
            padding: 30px;
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0,0,0,0.1);
        }
        
        h1 {
            color: #015a5e;
            margin-bottom: 20px;
            font-weight: 600;
            text-align: center;
        }
        
        h2 {
            color: #333;
            margin: 15px 0;
            font-weight: 500;
            font-size: 1.2rem;
        }
        
        p {
            margin-bottom: 15px;
        }
        
        .trabajo-info {
            background-color: #f7f7f7;
            padding: 15px;
            border-radius: 5px;
            margin-bottom: 25px;
        }
        
        .btn-container {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
            gap: 15px;
            margin-top: 20px;
        }
        
        .btn {
            background-color: #015a5e;
            color: white;
            border: none;
            padding: 15px 20px;
            border-radius: 5px;
            cursor: pointer;
            font-family: 'Montserrat', sans-serif;
            font-weight: 500;
            text-align: center;
            display: flex;
            flex-direction: column;
            text-decoration: none;
            transition: all 0.3s ease;
            height: 100%;
        }
        
        .btn:hover {
            background-color: #327063;
            transform: translateY(-2px);
            box-shadow: 0 5px 10px rgba(0,0,0,0.1);
        }
        
        .btn i {
            margin-bottom: 10px;
            font-size: 1.5rem;
        }
        
        .autor-nombre {
            font-weight: 600;
            margin-bottom: 5px;
        }
        
        .autor-info {
            font-size: 0.85rem;
            opacity: 0.8;
        }
        
        .btn-all {
            grid-column: 1 / -1;
            background-color: #6c757d;
        }
        
        .btn-all:hover {
            background-color: #5a6268;
        }
        
        .back-link {
            display: inline-block;
            margin-top: 20px;
            color: #015a5e;
            text-decoration: none;
        }
        
        .back-link:hover {
            text-decoration: underline;
        }
        
        @media (max-width: 768px) {
            .btn-container {
                grid-template-columns: 1fr;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Generar Certificados de Participación</h1>
        
        <div class="trabajo-info">
            <h2>Información del Trabajo</h2>
            <p><strong>Título:</strong> <?php echo htmlspecialchars($titulo_trabajo); ?></p>
            <p><strong>ID:</strong> <?php echo $trabajo_id; ?></p>
            <p><strong>Total de Autores:</strong> <?php echo count($autores_info); ?></p>
        </div>
        
        <h2>Seleccione un autor para generar su certificado:</h2>
        <div class="btn-container">
            <?php foreach ($autores_info as $index => $autor): ?>
            <a href="?export_certificate=1&id=<?php echo $trabajo_id; ?>&autor_index=<?php echo $index; ?>" class="btn">
                <i class="fas fa-certificate"></i>
                <span class="autor-nombre"><?php echo htmlspecialchars($autor['nombre_completo_con_titulo']); ?></span>
                <span class="autor-info">
                    <?php if ($autor['es_ponente']): ?>
                    <i class="fas fa-microphone"></i> Ponente
                    <?php endif; ?>
                </span>
            </a>
            <?php endforeach; ?>
            
            <a href="?export_all_certificates=1&id=<?php echo $trabajo_id; ?>" class="btn btn-all">
                <i class="fas fa-certificate"></i>
                <span class="autor-nombre">Generar para todos los autores</span>
                <span class="autor-info">Ver todos los certificados</span>
            </a>
        </div>
        
        <a href="javascript:history.back()" class="back-link">
            <i class="fas fa-arrow-left"></i> Volver
        </a>
    </div>
</body>
</html>
<?php
    exit;
}

/**
 * Genera un certificado en formato HTML que utiliza la imagen de plantilla como fondo
 * con las mismas dimensiones y ubicaciones de campos que en el certificado TCPDF
 */
function outputHtmlCertificate2($trabajo, $autor_principal, $coautores, $area_tematica, $tipo_presentacion, $cert_id) {
    // Limpiar cualquier salida anterior
    ob_clean();
    
    // Título para el navegador
    $clean_title = preg_replace('/[^a-zA-Z0-9]/', '_', $trabajo['titulo']);
    $clean_title = substr($clean_title, 0, 30);
    $autor_clean = preg_replace('/[^a-zA-Z0-9]/', '_', $autor_principal);
    $filename = 'certificado_' . (isset($trabajo['codigo']) ? $trabajo['codigo'] : '') . '_' . $autor_clean . '_' . $clean_title;
    
    // Generar el HTML para visualización directa en navegador
    header('Content-Type: text/html; charset=utf-8');
    
    // Convertir la lista de coautores
    $lista_coautores = "";
    if (is_array($coautores) && !empty($coautores)) {
        $lista_coautores = implode(', ', $coautores);
    }
    
    // Preparar el tipo de competición (por defecto)
    $tipo_competicion = "RESEARCH COMPETITION";
    
    ?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Certificate of Honor: <?php echo htmlspecialchars($autor_principal); ?></title>
    
    <!-- Fuentes de Google -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700&family=Playfair+Display:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
    
    <!-- Font Awesome para iconos -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        /* Estilos generales */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'helvetica', sans-serif;
            background-color: #f0f2f5;
            color: #333;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            padding: 20px;
        }
        
        /* Contenedor del certificado - Formato A4 Vertical */
        .certificate-container {
            width: 210mm; /* A4 portrait */
            height: 297mm; /* A4 portrait */
            position: relative;
            overflow: hidden;
            background-color: white;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
            border-radius: 8px;
        }
        
        /* Imagen de fondo del certificado */
        .certificate-background {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-image: url('assets/img/certificado_background.jpg');
            background-size: cover;
            background-position: center;
            z-index: 1;
        }
        
        /* Contenido del certificado */
        .certificate-content {
            position: relative;
            z-index: 2;
            width: 100%;
            height: 100%;
        }
        
        /* Título principal - Certificado de Honor */
        .honor-text {
            position: absolute;
            top: 62mm; /* SetY(62) en TCPDF */
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 16pt;
            font-weight: bold;
            color: #000;
        }
        
        /* Texto de presentación */
        .presentation-text {
            position: absolute;
            top: 69mm; /* SetY(69) en TCPDF */
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 16pt;
            font-weight: bold;
            color: #000;
        }
        
        /* Nombre del destinatario */
        .recipient-name {
            position: absolute;
            top: 90mm; /* SetY(90) en TCPDF */
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'LT Diploma', 'helvetica', serif;
            font-size: 24pt;
            font-weight: bold;
            font-style: italic;
            color: #000;
        }
        
        /* Lista de autores adicionales */
        .authors-list {
            position: absolute;
            top: 105mm; /* SetY(105) en TCPDF */
            left: 30mm; /* Margen de 30mm */
            width: 150mm; /* 210mm - (2 * 30mm) en TCPDF */
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 8pt;
            font-style: italic;
            color: #000;
            line-height: 4mm; /* MultiCell height en TCPDF */
        }
        
        /* Título del trabajo */
        .work-title {
            position: absolute;
            top: 118mm; /* SetY(118) en TCPDF */
            left: 20mm; /* SetX(20) en TCPDF */
            width: 170mm; /* Width en MultiCell en TCPDF */
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 14pt;
            font-weight: bold;
            color: #000;
            line-height: 6mm; /* Height en MultiCell en TCPDF */
        }
        
        /* Tipo de presentación y competición */
        .presentation-competition {
            position: absolute;
            top: 145mm; /* SetY(145) en TCPDF */
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 10pt;
            font-weight: bold;
            color: #000;
        }
        
        /* Botones de utilidad */
        .utility-buttons {
            position: fixed;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            display: flex;
            gap: 15px;
            z-index: 1000;
        }
        
        .btn {
            background-color: #015a5e;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 4px;
            cursor: pointer;
            display: flex;
            align-items: center;
            gap: 8px;
            font-family: 'helvetica', sans-serif;
            font-weight: 600;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            transition: all 0.3s ease;
        }
        
        .btn:hover {
            background-color: #327063;
            transform: translateY(-2px);
            box-shadow: 0 6px 8px rgba(0, 0, 0, 0.1);
        }
        
        /* Fuente personalizada LT Diploma */
        @font-face {
            font-family: 'LT Diploma';
            src: url('assets/fonts/LT_Diploma.ttf') format('truetype');
            font-weight: normal;
            font-style: normal;
        }
        
        /* Estilos de impresión */
        @media print {
            body {
                background: none;
                padding: 0;
                margin: 0;
            }
            
            .certificate-container {
                box-shadow: none;
                border-radius: 0;
                width: 100%;
                height: 100%;
            }
            
            .utility-buttons {
                display: none;
            }
            
            @page {
                size: portrait;
                margin: 0;
            }
        }
    </style>
</head>
<body>
    <div class="certificate-container">
        <!-- Fondo del certificado (imagen) -->
        <div class="certificate-background"></div>
        
        <!-- Contenido del certificado -->
        <div class="certificate-content">
            <!-- Textos principales - posiciones exactas del TCPDF -->
            <div class="honor-text">PROUDLY PRESENTS THIS CERTIFICATE OF HONOR</div>
            
            <div class="presentation-text">
                FOR AN OUTSTANDING <?php echo htmlspecialchars(mb_strtoupper($tipo_presentacion ?: 'ORAL PRESENTATION')); ?> TO:
            </div>
            
            <!-- Nombre del destinatario - posición exacta del TCPDF -->
            <div class="recipient-name"><?php echo htmlspecialchars($autor_principal); ?></div>
            
            <!-- Lista de autores (si hay) - posición exacta del TCPDF -->
            <?php if (!empty($lista_coautores)): ?>
            <div class="authors-list"><?php echo htmlspecialchars($lista_coautores); ?></div>
            <?php endif; ?>
            
            <!-- Título del trabajo - posición exacta del TCPDF -->
            <div class="work-title"><?php echo htmlspecialchars(mb_strtoupper($trabajo['titulo'])); ?></div>
            
            <!-- Tipo de presentación y competición - posición exacta del TCPDF -->
            <div class="presentation-competition">
                <?php echo htmlspecialchars(mb_strtoupper($tipo_presentacion ?: 'ORAL PRESENTATION')); ?> ~ <?php echo htmlspecialchars(mb_strtoupper($tipo_competicion)); ?>
            </div>
            
            <!-- ID del certificado (opcional, podría añadirse aquí) -->
            <!-- <div class="certificate-id"><?php echo htmlspecialchars($cert_id); ?></div> -->
        </div>
    </div>
    
    <!-- Botones de utilidad -->
    <div class="utility-buttons">
        <button class="btn" id="downloadBtn">
            <i class="fas fa-download"></i> Descargar PDF
        </button>
        <a href="?id=<?php echo $trabajo_id; ?>" class="btn">
            <i class="fas fa-arrow-left"></i> Volver a la selección
        </a>
    </div>
    
    <!-- Script para la funcionalidad de impresión y descarga -->
    <scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
    <script>
// Reemplaza el código del botón de descarga con esta versión
document.getElementById('downloadBtn').addEventListener('click', function() {
    // Mostrar indicador de carga
    this.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Procesando...';
    this.disabled = true;
    
    // Forzar un reposicionamiento al inicio de la página
    window.scrollTo(0, 0);
    
    // Crear un nuevo elemento temporal fuera del flujo del documento
    const tempElement = document.createElement('div');
    tempElement.style.position = 'absolute';
    tempElement.style.left = '-9999px';
    tempElement.style.top = '0';
    tempElement.style.width = '210mm';
    tempElement.style.height = '297mm';
    tempElement.style.overflow = 'hidden'; // Evitar desbordamiento
    
    // Clonar el contenido del certificado
    const originalElement = document.querySelector('.certificate-container');
    const clone = originalElement.cloneNode(true);
    
    // Asegurarse de que el clon tenga el tamaño exacto
    clone.style.margin = '0';
    clone.style.padding = '0';
    clone.style.borderRadius = '0';
    clone.style.boxShadow = 'none';
    clone.style.overflow = 'hidden'; // Evitar desbordamiento
    
    // Añadir el clon al elemento temporal
    tempElement.appendChild(clone);
    document.body.appendChild(tempElement);
    
    // Configuración específica para evitar espacios en blanco y páginas adicionales
    const pdfOptions = {
        margin: 0,
        filename: '<?php echo $filename; ?>.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { 
            scale: 2, 
            useCORS: true,
            scrollX: 0,
            scrollY: 0,
            x: 0,
            y: 0,
            width: 210 * 3.779527559, // Convertir mm a px (1 mm ≈ 3.78 px)
            height: 297 * 3.779527559,
            windowWidth: 210 * 3.779527559,
            windowHeight: 297 * 3.779527559
        },
        jsPDF: { 
            unit: 'mm', 
            format: 'a4', 
            orientation: 'portrait',
            compress: true,
            hotfixes: ['px_scaling'] // Arreglo para problemas de escala
        },
        pagebreak: { mode: 'avoid-all' } // Evitar saltos de página automáticos
    };
    
    // Generar el PDF desde el clon
    html2pdf()
        .from(clone)
        .set(pdfOptions)
        .toPdf() // Convertir a PDF y permitir más operaciones en él
        .get('pdf')
        .then((pdf) => {
            // Verificar si hay más de una página y eliminar páginas adicionales
            if (pdf.internal.getNumberOfPages() > 1) {
                for (let i = pdf.internal.getNumberOfPages(); i > 1; i--) {
                    pdf.deletePage(i);
                }
            }
            return pdf;
        })
        .save()
        .then(() => {
            // Eliminar el elemento temporal
            document.body.removeChild(tempElement);
            
            // Restaurar botón
            this.innerHTML = '<i class="fas fa-download"></i> Descargar PDF';
            this.disabled = false;
        })
        .catch(error => {
            console.error("Error al generar PDF:", error);
            // Restaurar botón incluso en caso de error
            this.innerHTML = '<i class="fas fa-download"></i> Descargar PDF';
            this.disabled = false;
        });
});
    </script>
</body>
</html>
    <?php
    exit;
}

/**
 * Genera un certificado en formato HTML extremadamente simple y compatible con HTML2PDF
 * Con soporte para imágenes y mejor presentación visual
 */
/**
 * Genera un certificado en formato HTML que utiliza la imagen de plantilla como fondo
 * con las mismas dimensiones y ubicaciones de campos que en el certificado TCPDF
 */
function outputHtmlCertificateForEmail($trabajo, $autor_principal, $coautores, $area_tematica, $tipo_presentacion, $cert_id) {
    // Limpiar cualquier salida anterior
    ob_clean();
    
    // Título para el navegador
    $clean_title = preg_replace('/[^a-zA-Z0-9]/', '_', $trabajo['titulo']);
    $clean_title = substr($clean_title, 0, 30);
    $autor_clean = preg_replace('/[^a-zA-Z0-9]/', '_', $autor_principal);
    $filename = 'certificado_' . (isset($trabajo['codigo']) ? $trabajo['codigo'] : '') . '_' . $autor_clean . '_' . $clean_title;
    
    // Generar el HTML para visualización directa en navegador
    header('Content-Type: text/html; charset=utf-8');
    
    // Convertir la lista de coautores
    $lista_coautores = "";
    if (is_array($coautores) && !empty($coautores)) {
        $lista_coautores = implode(', ', $coautores);
    }
    
    // Preparar el tipo de competición (por defecto)
    $tipo_competicion = "RESEARCH COMPETITION";
    
    ?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Certificate of Honor: <?php echo htmlspecialchars($autor_principal); ?></title>
    
    <!-- Fuentes de Google -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700&family=Playfair+Display:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
    
    <!-- Font Awesome para iconos -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <style>
        /* Estilos generales */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'helvetica', sans-serif;
            background-color: #f0f2f5;
            color: #333;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            padding: 20px;
        }
        
        /* Contenedor del certificado - Formato A4 Vertical */
        .certificate-container {
            width: 210mm; /* A4 portrait */
            height: 297mm; /* A4 portrait */
            position: relative;
            overflow: hidden;
            background-color: white;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
            border-radius: 8px;
        }
        
        /* Imagen de fondo del certificado */
        .certificate-background {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 1;
            /* La imagen debe estar disponible en la ruta especificada */
            background-image: url('assets/img/certificado_background.jpg');
            background-size: 100% 100%;
            background-position: center;
        }
        
        /* Contenido del certificado */
        .certificate-content {
            position: relative;
            z-index: 2;
            height: 100%;
            width: 100%;
        }
        
        /* Título principal - Certificado de Honor */
        .honor-text {
            position: absolute;
            top: 62mm; /* Posición exacta del TCPDF: SetY(62) */
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 16px;
            font-weight: bold;
            color: #000;
        }
        
        /* Texto de presentación */
        .presentation-text {
            position: absolute;
            top: 69mm; /* Posición exacta del TCPDF: SetY(69) */
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 16px;
            font-weight: bold;
            color: #000;
        }
        
        /* Nombre del destinatario */
        .recipient-name {
            position: absolute;
            top: 90mm; /* Posición exacta del TCPDF: SetY(90) */
            left: 0;
            width: 100%;
            height: 15mm; /* Altura exacta del TCPDF: Cell(0, 15) */
            text-align: center;
            font-family: 'LT Diploma', 'helvetica', serif;
            font-size: 24px;
            font-weight: bold;
            font-style: italic;
            color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        
        /* Lista de autores adicionales */
        .authors-list {
            position: absolute;
            top: 105mm; /* Posición exacta del TCPDF: SetY(105) */
            left: 30mm; /* Margen lateral exacto del TCPDF: $margen_lateral = 30 */
            width: 150mm; /* Ancho exacto del TCPDF: 210 - (2 * 30) = 150mm */
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 20px;
            font-style: italic;
            color: #000;
            line-height: 8mm; /* Altura de línea exacta del TCPDF: MultiCell(..., 8, ...) */
        }
        
        /* Título del trabajo */
        .work-title {
            position: absolute;
            top: 118mm; /* Posición exacta del TCPDF: SetY(118) */
            left: 20mm; /* Posición exacta del TCPDF: SetX(20) */
            width: 170mm; /* Ancho exacto del TCPDF: MultiCell(170, ...) */
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 15px;
            font-weight: bold;
            color: #000;
            line-height: 10mm; /* Altura de línea exacta del TCPDF: MultiCell(..., 10, ...) */
        }
        
        /* Tipo de presentación y competición */
        .presentation-competition {
            position: absolute;
            top: 145mm; /* Posición exacta del TCPDF: SetY(145) */
            left: 0;
            width: 100%;
            height: 10mm; /* Altura exacta del TCPDF: Cell(0, 10) */
            text-align: center;
            font-family: 'helvetica', sans-serif;
            font-size: 14px;
            font-weight: bold;
            color: #000;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        
        /* Botones de utilidad */
        .utility-buttons {
            position: fixed;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            display: flex;
            gap: 15px;
            z-index: 1000;
        }
        
        .btn {
            background-color: #015a5e;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 4px;
            cursor: pointer;
            display: flex;
            align-items: center;
            gap: 8px;
            font-family: 'helvetica', sans-serif;
            font-weight: 600;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            transition: all 0.3s ease;
        }
        
        .btn:hover {
            background-color: #327063;
            transform: translateY(-2px);
            box-shadow: 0 6px 8px rgba(0, 0, 0, 0.1);
        }
        
        /* Fuente personalizada LT Diploma (intento cargar de Google Fonts) */
        @font-face {
            font-family: 'LT Diploma';
            src: url('assets/fonts/LT_Diploma.ttf') format('truetype');
            font-weight: normal;
            font-style: normal;
        }
        
        /* Estilos de impresión */
        @media print {
            body {
                background: none;
                padding: 0;
                margin: 0;
            }
            
            .certificate-container {
                box-shadow: none;
                border-radius: 0;
                width: 100%;
                height: 100%;
            }
            
            .utility-buttons {
                display: none;
            }
            
            @page {
                size: portrait;
                margin: 0;
            }
        }
    </style>
</head>
<body>
    <div class="certificate-container">
        <!-- Fondo del certificado (imagen) -->
        <div class="certificate-background"></div>
        
        <!-- Contenido del certificado -->
        <div class="certificate-content">
            <!-- Textos principales - posiciones exactas del TCPDF -->
            <div class="honor-text">PROUDLY PRESENTS THIS CERTIFICATE OF HONOR</div>
            
            <div class="presentation-text">
                FOR AN OUTSTANDING <?php echo htmlspecialchars(mb_strtoupper($tipo_presentacion ?: 'ORAL PRESENTATION')); ?> TO:
            </div>
            
            <!-- Nombre del destinatario - posición exacta del TCPDF -->
            <div class="recipient-name"><?php echo htmlspecialchars($autor_principal); ?></div>
            
            <!-- Lista de autores (si hay) - posición exacta del TCPDF -->
            <?php if (!empty($lista_coautores)): ?>
            <div class="authors-list"><?php echo htmlspecialchars($lista_coautores); ?></div>
            <?php endif; ?>
            
            <!-- Título del trabajo - posición exacta del TCPDF -->
            <div class="work-title"><?php echo htmlspecialchars(mb_strtoupper($trabajo['titulo'])); ?></div>
            
            <!-- Tipo de presentación y competición - posición exacta del TCPDF -->
            <div class="presentation-competition">
                <?php echo htmlspecialchars(mb_strtoupper($tipo_presentacion ?: 'ORAL PRESENTATION')); ?> ~ <?php echo htmlspecialchars(mb_strtoupper($tipo_competicion)); ?>
            </div>
        </div>
    </div>
    
    <!-- Botones de utilidad -->
    <div class="utility-buttons">
        <button class="btn" id="printBtn">
            <i class="fas fa-print"></i> Imprimir
        </button>
        <button class="btn" id="downloadBtn">
            <i class="fas fa-download"></i> Descargar PDF
        </button>
    </div>
    
    <!-- Script para la funcionalidad de impresión y descarga -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // Configuración para html2pdf - Formato VERTICAL (A4)
            const pdfOptions = {
                margin: 0,
                filename: '<?php echo $filename; ?>.pdf',
                image: { type: 'jpeg', quality: 1 },
                html2canvas: { scale: 2, useCORS: true, logging: true },
                jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
            };
            
            // Elemento a convertir
            const element = document.querySelector('.certificate-container');
            
            // Botón de impresión
            document.getElementById('printBtn').addEventListener('click', function() {
                window.print();
            });
            
            // Botón de descarga PDF
            document.getElementById('downloadBtn').addEventListener('click', function() {
                // Mostrar indicador de carga
                this.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Procesando...';
                this.disabled = true;
                
                // Pequeño retraso para asegurar que la UI se actualice
                setTimeout(() => {
                    html2pdf().set(pdfOptions).from(element).save()
                        .then(() => {
                            // Restaurar botón
                            this.innerHTML = '<i class="fas fa-download"></i> Descargar PDF';
                            this.disabled = false;
                        });
                }, 100);
            });
        });
    </script>
</body>
</html>
    <?php
    exit;
}
/**
 * Genera certificados para todos los autores en un solo PDF
 * @param int $trabajo_id ID del trabajo
 */
function generarTodosCertificados($trabajo_id) {
    error_log("Iniciando generarTodosCertificados para ID: $trabajo_id");
    
    // Incluimos el archivo de utilidades de la base de datos
    require_once 'utils_database.php';
    
    // Activamos la conexión MySQL
    $conn = Activarmysql();
    if (!$conn) {
        error_log("ERROR: No se pudo conectar a la base de datos");
        return false;
    }
    
    // Obtenemos todos los datos del trabajo usando la misma consulta que en generarCertificadoParticipacion
    $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);
    if (!$stmt) {
        error_log("ERROR: Error al preparar la consulta SQL: " . $conn->error);
        return false;
    }
    
    $stmt->bind_param("i", $trabajo_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        error_log("ERROR: No se encontró el trabajo con ID: $trabajo_id");
        header('Location: ?error=trabajo_no_encontrado');
        exit;
    }
    
    $trabajo = $result->fetch_assoc();
    
    // Replicamos el código de obtención de datos de generarCertificadoParticipacion
    // Á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);
        
        if ($stmt_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);
        
        if ($stmt_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'];
            }
        }
    }
    
    // Obtener los autores (incluimos TODOS sin excepción)
    $autores_info = [];
    
    // Autores individuales del trabajo
    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])) {
            $titulo = !empty($trabajo[$titulo_key]) ? $trabajo[$titulo_key] : '';
            $nombre = ucwords(strtolower($trabajo[$autor_key]));
            $apellido = ucwords(strtolower($trabajo[$apellido_key]));
            
            // Nombre completo
            $nombre_completo = trim($nombre . ' ' . $apellido);
            
            // El primer autor (i === 1) es el ponente
            $es_ponente = ($i === 1);
            
            $autores_info[] = [
                'titulo' => $titulo,
                'nombre' => $nombre,
                'apellido' => $apellido,
                'nombre_completo' => $nombre_completo,
                'nombre_completo_con_titulo' => (!empty($titulo) ? $titulo . ' ' : '') . $nombre_completo,
                'es_ponente' => $es_ponente,
                'index' => count($autores_info)
            ];
        }
    }
    
    $conn->close();
    
    // Si no hay autores, mostrar un error
    if (empty($autores_info)) {
        error_log("ERROR: No se encontraron autores para este trabajo");
        header('Location: ?error=sin_autores');
        exit;
    }
    
    error_log("Total de autores encontrados: " . count($autores_info));
    
    // Generar una interfaz simplificada para mostrar los certificados
    mostrarVisorCertificados($trabajo, $autores_info, $area_tematica, $tipo_presentacion, $tipo_competicion);
}

/**
 * Script para generar un visor y selector de certificados para múltiples autores
 */
function mostrarVisorCertificados($trabajo, $autores_info, $area_tematica, $tipo_presentacion, $tipo_competicion) {
    // Limpiar cualquier salida anterior
    ob_clean();
    
    // Título del trabajo para el nombre del archivo
    $clean_title = preg_replace('/[^a-zA-Z0-9]/', '_', $trabajo['titulo']);
    $clean_title = substr($clean_title, 0, 30);
    
    // Generar el HTML para visualización directa en navegador
    header('Content-Type: text/html; charset=utf-8');
    
    ?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visor de Certificados</title>
    
    <!-- Fuentes de Google -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700&display=swap" rel="stylesheet">
    
    <!-- Font Awesome para iconos -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    
    <!-- jsPDF para generar PDFs -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
    
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'Montserrat', sans-serif;
            background-color: #f0f2f5;
            color: #333;
            padding: 20px;
        }
        
        .container {
            max-width: 1000px;
            margin: 0 auto;
            background-color: white;
            padding: 30px;
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0,0,0,0.1);
        }
        
        h1 {
            color: #015a5e;
            margin-bottom: 20px;
            text-align: center;
        }
        
        .tabs {
            display: flex;
            border-bottom: 2px solid #ddd;
            margin-bottom: 20px;
            overflow-x: auto;
        }
        
        .tab {
            padding: 10px 20px;
            cursor: pointer;
            background: #f5f5f5;
            border: none;
            border-radius: 5px 5px 0 0;
            margin-right: 5px;
            font-family: 'Montserrat', sans-serif;
            font-weight: 500;
            transition: all 0.3s ease;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            max-width: 200px;
        }
        
        .tab.active {
            background: #015a5e;
            color: white;
        }
        
        .tab-content {
            display: none;
        }
        
        .tab-content.active {
            display: block;
        }
        
        .iframe-container {
            width: 100%;
            height: 500px;
            border: 1px solid #ddd;
            margin-bottom: 20px;
        }
        
        iframe {
            width: 100%;
            height: 100%;
            border: none;
        }
        
        .actions {
            display: flex;
            justify-content: center;
            gap: 15px;
            margin-top: 20px;
        }
        
        .btn {
            background-color: #015a5e;
            color: white;
            border: none;
            padding: 10px 20px;
            border-radius: 4px;
            cursor: pointer;
            display: flex;
            align-items: center;
            gap: 8px;
            font-family: 'Montserrat', sans-serif;
            font-weight: 600;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            transition: all 0.3s ease;
            text-decoration: none;
            white-space: nowrap;
        }
        
        .btn:hover {
            background-color: #327063;
            transform: translateY(-2px);
            box-shadow: 0 6px 8px rgba(0,0,0,0.1);
        }
        
        .btn-secondary {
            background-color: #6c757d;
        }
        
        .btn-secondary:hover {
            background-color: #5a6268;
        }
        
        .progress-container {
            display: none;
            margin: 30px 0;
            text-align: center;
        }
        
        .progress-bar {
            width: 100%;
            height: 20px;
            background-color: #e9ecef;
            border-radius: 10px;
            overflow: hidden;
            margin-top: 10px;
        }
        
        .progress {
            height: 100%;
            background-color: #015a5e;
            width: 0%;
            transition: width 0.3s ease;
        }
        
        #downloadStatus {
            margin-top: 15px;
            text-align: center;
            font-weight: 500;
            color: #015a5e;
            display: none;
        }
        
        @media (max-width: 768px) {
            .actions {
                flex-direction: column;
            }
            
            .tab {
                padding: 8px 12px;
                font-size: 0.9rem;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Certificados de Participación</h1>
        
        <p>Se han generado certificados para los siguientes autores del trabajo:</p>
        <p><strong>Título:</strong> <?php echo htmlspecialchars($trabajo['titulo']); ?></p>
        
        <div class="tabs">
            <?php foreach ($autores_info as $index => $autor): ?>
            <button class="tab <?php echo $index === 0 ? 'active' : ''; ?>" data-tab="tab-<?php echo $index; ?>">
                <?php echo htmlspecialchars($autor['nombre_completo_con_titulo']); ?>
                <?php if ($autor['es_ponente']): ?>
                <span title="Ponente"> 🎤</span>
                <?php endif; ?>
            </button>
            <?php endforeach; ?>
        </div>
        
        <?php foreach ($autores_info as $index => $autor): ?>
            <?php 
            // Obtener la lista de coautores (todos menos el autor actual)
            $coautores = [];
            foreach ($autores_info as $coautor) {
                // No incluir al autor principal en la lista de coautores
                if ($coautor['index'] !== $autor['index']) {
                    $coautores[] = $coautor['nombre_completo_con_titulo'];
                }
            }
            
            $lista_coautores = implode(', ', $coautores);
            
            // Generar ID único para este certificado
            $cert_id = 'CERT-' . date('Y') . '-' . str_pad($trabajo['id'], 4, '0', STR_PAD_LEFT) . '-A' . $autor['index'];
            
            // Generar URL para este certificado
            $cert_url = '?export_certificate=1&id=' . $trabajo['id'] . '&autor_index=' . $autor['index'];
            ?>
            
            <div class="tab-content <?php echo $index === 0 ? 'active' : ''; ?>" id="tab-<?php echo $index; ?>">
                <div class="iframe-container">
                    <iframe src="<?php echo $cert_url; ?>" id="iframe-<?php echo $index; ?>"></iframe>
                </div>
                
                <div class="actions">
                    <a href="<?php echo $cert_url; ?>" class="btn" target="_blank">
                        <i class="fas fa-external-link-alt"></i> Abrir certificado
                    </a>
                    
                    <a href="<?php echo $cert_url; ?>" class="btn" download>
                        <i class="fas fa-download"></i> Descargar certificado
                    </a>
                </div>
            </div>
        <?php endforeach; ?>
        
        <div class="actions">
            <button id="btnDownloadAll" class="btn">
                <i class="fas fa-file-pdf"></i> Descargar todos los certificados
            </button>
            
            <a href="?id=<?php echo $trabajo['id']; ?>" class="btn btn-secondary">
                <i class="fas fa-arrow-left"></i> Volver
            </a>
        </div>
        
        <div class="progress-container" id="progress-container">
            <p id="progress-text">Generando certificados...</p>
            <div class="progress-bar">
                <div id="progress" class="progress"></div>
            </div>
            <p id="downloadStatus"></p>
        </div>
    </div>
    
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // Funcionalidad de pestañas
            const tabs = document.querySelectorAll('.tab');
            const tabContents = document.querySelectorAll('.tab-content');
            
            tabs.forEach(tab => {
                tab.addEventListener('click', function() {
                    // Remover clase activa de todas las pestañas
                    tabs.forEach(t => t.classList.remove('active'));
                    
                    // Agregar clase activa a la pestaña clickeada
                    this.classList.add('active');
                    
                    // Ocultar todos los contenidos
                    tabContents.forEach(content => content.classList.remove('active'));
                    
                    // Mostrar el contenido correspondiente
                    const tabId = this.getAttribute('data-tab');
                    document.getElementById(tabId).classList.add('active');
                });
            });
            
            // Descargar todos los certificados
            document.getElementById('btnDownloadAll').addEventListener('click', async function() {
                // Referencia a elementos de UI
                const btnDownloadAll = this;
                const progressContainer = document.getElementById('progress-container');
                const progressBar = document.getElementById('progress');
                const progressText = document.getElementById('progress-text');
                const downloadStatus = document.getElementById('downloadStatus');
                
                // Deshabilitar botón y mostrar progreso
                btnDownloadAll.disabled = true;
                btnDownloadAll.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Procesando...';
                progressContainer.style.display = 'block';
                downloadStatus.style.display = 'block';
                downloadStatus.textContent = "Iniciando proceso...";
                
                try {
                    // Obtener todos los links a certificados individuales
                    const links = Array.from(document.querySelectorAll('.tab-content a[target="_blank"]'))
                        .map(a => a.getAttribute('href'));
                    
                    if (links.length === 0) {
                        throw new Error("No se encontraron enlaces a certificados");
                    }
                    
                    downloadStatus.textContent = `Encontrados ${links.length} certificados para procesar`;
                    
                    // Inicializar jsPDF
                    const { jsPDF } = window.jspdf;
                    
                    // Crear un nuevo documento PDF
                    const pdf = new jsPDF({
                        orientation: 'portrait',
                        unit: 'mm',
                        format: 'a4'
                    });
                    
                    // Crear un iframe temporal fuera de la pantalla para cargar cada certificado
                    const tempIframe = document.createElement('iframe');
                    tempIframe.style.position = 'absolute';
                    tempIframe.style.top = '-9999px';
                    tempIframe.style.width = '1000px';
                    tempIframe.style.height = '1414px'; // Proporción A4
                    document.body.appendChild(tempIframe);
                    
                    // Procesar cada certificado secuencialmente
                    for (let i = 0; i < links.length; i++) {
                        // Actualizar progreso
                        const progress = Math.floor((i / links.length) * 100);
                        progressBar.style.width = `${progress}%`;
                        progressText.textContent = `Procesando certificado ${i+1} de ${links.length}...`;
                        downloadStatus.textContent = `Cargando certificado ${i+1}...`;
                        
                        try {
                            // Cargar el certificado en el iframe temporal
                            await new Promise((resolve, reject) => {
                                tempIframe.onload = resolve;
                                tempIframe.onerror = reject;
                                
                                // Establecer un tiempo límite por si acaso
                                const timeout = setTimeout(() => {
                                    reject(new Error("Tiempo de carga agotado"));
                                }, 10000);
                                
                                // Cargar el URL
                                tempIframe.src = links[i];
                                
                                // Limpiar el tiempo límite cuando se carga
                                tempIframe.onload = () => {
                                    clearTimeout(timeout);
                                    resolve();
                                };
                            });
                            
                            // Esperar a que el contenido del iframe se renderice completamente
                            await new Promise(resolve => setTimeout(resolve, 1000));
                            
                            downloadStatus.textContent = `Capturando certificado ${i+1}...`;
                            
                            // Seleccionar el contenedor del certificado
                            const certificateContainer = tempIframe.contentDocument.querySelector('.certificate-container');
                            
                            if (!certificateContainer) {
                                throw new Error(`No se encontró el contenedor del certificado en el iframe ${i+1}`);
                            }
                            
                            // Capturar el certificado como imagen
                            const canvas = await html2canvas(certificateContainer, {
                                scale: 2,
                                useCORS: true,
                                allowTaint: true,
                                logging: false
                            });
                            
                            downloadStatus.textContent = `Añadiendo certificado ${i+1} al PDF...`;
                            
                            // Convertir el canvas a una imagen para el PDF
                            const imgData = canvas.toDataURL('image/jpeg', 1.0);
                            
                            // Añadir una nueva página si no es la primera
                            if (i > 0) {
                                pdf.addPage();
                            }
                            
                            // Añadir la imagen al PDF
                            pdf.addImage(imgData, 'JPEG', 0, 0, 210, 297);
                            
                            downloadStatus.textContent = `Certificado ${i+1} añadido correctamente`;
                            
                        } catch (error) {
                            console.error(`Error procesando certificado ${i+1}:`, error);
                            downloadStatus.textContent = `Error en certificado ${i+1}: ${error.message}. Intentando continuar...`;
                            // Esperamos un poco antes de continuar
                            await new Promise(resolve => setTimeout(resolve, 1000));
                        }
                    }
                    
                    // Eliminar el iframe temporal
                    document.body.removeChild(tempIframe);
                    
                    // Actualizar el progreso al 100%
                    progressBar.style.width = '100%';
                    progressText.textContent = 'Generación de PDF completada';
                    downloadStatus.textContent = 'Guardando PDF...';
                    
                    // Guardar el PDF
                    pdf.save('todos_los_certificados.pdf');
                    
                    // Restaurar el botón
                    btnDownloadAll.disabled = false;
                    btnDownloadAll.innerHTML = '<i class="fas fa-file-pdf"></i> Descargar todos los certificados';
                    downloadStatus.textContent = 'PDF guardado correctamente';
                    
                } catch (error) {
                    console.error('Error general:', error);
                    progressText.textContent = 'Error al generar los certificados';
                    downloadStatus.textContent = `Error: ${error.message}. Por favor, intente nuevamente.`;
                    
                    // Restaurar el botón
                    btnDownloadAll.disabled = false;
                    btnDownloadAll.innerHTML = '<i class="fas fa-file-pdf"></i> Reintentar';
                }
            });
        });
    </script>
</body>
</html>
    <?php
    exit;
}

/**
 * Genera el HTML de un certificado individual (sin cabeceras HTTP)
 * Esta función es utilizada internamente por generarPDFMultiple
 */
function generarHTMLCertificado($trabajo, $autor_principal, $lista_coautores, $area_tematica, $tipo_presentacion, $tipo_competicion, $cert_id) {
    // Preparar el tipo de competición (por defecto)
    if (empty($tipo_competicion)) {
        $tipo_competicion = "RESEARCH COMPETITION";
    }
    
    ?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Certificate</title>
    <style>
        /* Estilos generales */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'helvetica', Arial, sans-serif;
            width: 210mm;
            height: 297mm;
            position: relative;
            overflow: hidden;
            background-color: white;
        }
        
        /* Contenedor del certificado - Formato A4 Vertical */
        .certificate-container {
            width: 210mm;
            height: 297mm;
            position: relative;
            overflow: hidden;
        }
        
        /* Imagen de fondo del certificado */
        .certificate-background {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-image: url('assets/img/certificado_background.jpg');
            background-size: cover;
            background-position: center;
            z-index: 1;
        }
        
        /* Contenido del certificado */
        .certificate-content {
            position: relative;
            z-index: 2;
            width: 100%;
            height: 100%;
        }
        
        /* Título principal - Certificado de Honor */
        .honor-text {
            position: absolute;
            top: 62mm;
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', Arial, sans-serif;
            font-size: 16pt;
            font-weight: bold;
            color: #000;
        }
        
        /* Texto de presentación */
        .presentation-text {
            position: absolute;
            top: 69mm;
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', Arial, sans-serif;
            font-size: 16pt;
            font-weight: bold;
            color: #000;
        }
        
        /* Nombre del destinatario */
        .recipient-name {
            position: absolute;
            top: 90mm;
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'LT Diploma', 'helvetica', Arial, serif;
            font-size: 24pt;
            font-weight: bold;
            font-style: italic;
            color: #000;
        }
        
        /* Lista de autores adicionales */
        .authors-list {
            position: absolute;
            top: 105mm;
            left: 30mm;
            width: 150mm;
            text-align: center;
            font-family: 'helvetica', Arial, sans-serif;
            font-size: 8pt;
            font-style: italic;
            color: #000;
            line-height: 4mm;
        }
        
        /* Título del trabajo */
        .work-title {
            position: absolute;
            top: 118mm;
            left: 20mm;
            width: 170mm;
            text-align: center;
            font-family: 'helvetica', Arial, sans-serif;
            font-size: 14pt;
            font-weight: bold;
            color: #000;
            line-height: 6mm;
        }
        
        /* Tipo de presentación y competición */
        .presentation-competition {
            position: absolute;
            top: 145mm;
            left: 0;
            width: 100%;
            text-align: center;
            font-family: 'helvetica', Arial, sans-serif;
            font-size: 10pt;
            font-weight: bold;
            color: #000;
        }
        
        /* Fuente personalizada LT Diploma (definición de fuente) */
        @font-face {
            font-family: 'LT Diploma';
            src: url('assets/fonts/LT_Diploma.ttf') format('truetype');
            font-weight: normal;
            font-style: normal;
        }
    </style>
</head>
<body>
    <div class="certificate-container">
        <!-- Fondo del certificado (imagen) -->
        <div class="certificate-background"></div>
        
        <!-- Contenido del certificado -->
        <div class="certificate-content">
            <!-- Textos principales - posiciones exactas del TCPDF -->
            <div class="honor-text">PROUDLY PRESENTS THIS CERTIFICATE OF HONOR</div>
            
            <div class="presentation-text">
                FOR AN OUTSTANDING <?php echo htmlspecialchars(mb_strtoupper($tipo_presentacion ?: 'ORAL PRESENTATION')); ?> TO:
            </div>
            
            <!-- Nombre del destinatario - posición exacta del TCPDF -->
            <div class="recipient-name"><?php echo htmlspecialchars($autor_principal); ?></div>
            
            <!-- Lista de autores (si hay) - posición exacta del TCPDF -->
            <?php if (!empty($lista_coautores)): ?>
            <div class="authors-list"><?php echo htmlspecialchars($lista_coautores); ?></div>
            <?php endif; ?>
            
            <!-- Título del trabajo - posición exacta del TCPDF -->
            <div class="work-title"><?php echo htmlspecialchars(mb_strtoupper($trabajo['titulo'])); ?></div>
            
            <!-- Tipo de presentación y competición - posición exacta del TCPDF -->
            <div class="presentation-competition">
                <?php echo htmlspecialchars(mb_strtoupper($tipo_presentacion ?: 'ORAL PRESENTATION')); ?> ~ <?php echo htmlspecialchars(mb_strtoupper($tipo_competicion)); ?>
            </div>
            
            <!-- ID del certificado (opcional, podría añadirse aquí) -->
            <!-- <div class="certificate-id"><?php echo htmlspecialchars($cert_id); ?></div> -->
        </div>
    </div>
</body>
</html>
    <?php
}
?>