<?php
/**
 * modules/secretaria/gen_cert_vinc.php
 * Genera y descarga el PDF del certificado de vinculación.
 * Fondo blanco — apto para impresión.
 */
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';
requireRol(ROL_SECRETARIA);

$idCert = (int)($_GET['id'] ?? 0);
if (!$idCert) { http_response_code(400); die('Certificado inválido.'); }

$db = getDB();

$st = $db->prepare("
    SELECT cv.*,
           CONCAT(u.apellidos,' ',u.nombres)  AS estudiante,
           u.cedula,
           car.nombre                          AS carrera,
           g.nombre_proyecto,
           g.horas_cumplidas,
           g.horas_requeridas,
           g.fecha_inicio,
           g.fecha_fin,
           pa.nombre                           AS periodo,
           IFNULL(org.nombre, g.org_nueva_nombre) AS organizacion,
           CONCAT(uf.apellidos,' ',uf.nombres) AS firmado_por_nombre,
           i.nombre                            AS instituto_nombre,
           i.logo                              AS instituto_logo
    FROM certificados_vinculacion cv
    JOIN grupos_vinculacion g     ON g.id_grupo      = cv.id_grupo
    JOIN estudiantes e            ON e.id_estudiante = cv.id_estudiante
    JOIN usuarios u               ON u.id_usuario    = e.id_usuario
    JOIN carreras car             ON car.id_carrera  = e.id_carrera
    LEFT JOIN periodos_academicos pa  ON pa.id_periodo    = g.id_periodo
    LEFT JOIN organizaciones_beneficiarias org ON org.id_organizacion = g.id_organizacion
    LEFT JOIN usuarios uf         ON uf.id_usuario   = cv.firmado_por
    LEFT JOIN institutos i        ON i.id_instituto  = g.id_instituto
    WHERE cv.id_cert_vinc = :id AND cv.vigente = 1
");
$st->execute([':id' => $idCert]);
$cert = $st->fetch();
if (!$cert) { http_response_code(404); die('Certificado no encontrado o anulado.'); }

// ── Buscar TCPDF ──────────────────────────────────────────────────
$tcpdfPaths = [
    BASE_PATH . '/vendor/tecnickcom/tcpdf/tcpdf.php',
    BASE_PATH . '/vendor/tcpdf/tcpdf.php',
    BASE_PATH . '/lib/tcpdf/tcpdf.php',
    'C:/xampp/htdocs/tcpdf/tcpdf.php',
];
$tcpdfLoaded = false;
foreach ($tcpdfPaths as $p) {
    if (file_exists($p)) { require_once $p; $tcpdfLoaded = true; break; }
}

if (!$tcpdfLoaded) { generarHtmlCertificado($cert); exit; }

// ── TCPDF — fondo blanco, listo para impresión ───────────────────
$pdf = new TCPDF('L', 'mm', 'A4', true, 'UTF-8', false);
$pdf->SetCreator('SIGVP');
$pdf->SetAuthor($cert['instituto_nombre'] ?? 'SIGVP');
$pdf->SetTitle('Certificado de Vinculación - ' . $cert['estudiante']);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetMargins(0, 0, 0);
$pdf->SetAutoPageBreak(false, 0);
$pdf->AddPage();

// Fondo blanco
$pdf->SetFillColor(255, 255, 255);
$pdf->Rect(0, 0, 297, 210, 'F');

// Borde exterior
$pdf->SetDrawColor(20, 20, 20);
$pdf->SetLineWidth(1.2);
$pdf->Rect(8, 8, 281, 194);
// Borde interior
$pdf->SetLineWidth(0.4);
$pdf->Rect(11, 11, 275, 188);

// ── Logo del instituto (centrado arriba) ──────────────────────────
$curY = 18;
$logoPath = '';
if (!empty($cert['instituto_logo'])) {
    $logoPath = BASE_PATH . '/uploads/institutos/' . $cert['instituto_logo'];
}
if ($logoPath && file_exists($logoPath)) {
    $pdf->Image($logoPath, 134, $curY, 28, 28, '', '', '', true, 150);
    $curY = 50;
} else {
    $curY = 20;
}

// Nombre del instituto
$pdf->SetTextColor(50, 50, 50);
$pdf->SetFont('helvetica', '', 8);
$pdf->SetXY(22, $curY);
$pdf->Cell(253, 5, strtoupper($cert['instituto_nombre'] ?? 'INSTITUTO SUPERIOR TECNOLÓGICO'), 0, 1, 'C');

// CERTIFICADO
$pdf->SetTextColor(10, 10, 10);
$pdf->SetFont('times', 'B', 32);
$pdf->SetXY(22, $curY + 7);
$pdf->Cell(253, 13, 'CERTIFICADO', 0, 1, 'C');

// Subtítulo
$tipoLabel = ['culminacion'=>'Culminación','participacion'=>'Participación','horas'=>'Horas'][$cert['tipo']] ?? 'Culminación';
$pdf->SetTextColor(60, 60, 60);
$pdf->SetFont('helvetica', '', 10);
$pdf->SetXY(22, $curY + 20);
$pdf->Cell(253, 5, 'DE VINCULACIÓN CON LA COMUNIDAD  ·  ' . strtoupper($tipoLabel), 0, 1, 'C');

// Línea separadora
$pdf->SetDrawColor(100, 100, 100);
$pdf->SetLineWidth(0.4);
$pdf->Line(75, $curY + 27, 222, $curY + 27);

// La institución certifica que:
$pdf->SetTextColor(90, 90, 90);
$pdf->SetFont('times', 'I', 10);
$pdf->SetXY(22, $curY + 30);
$pdf->Cell(253, 6, 'La institución certifica que:', 0, 1, 'C');

// Nombre estudiante
$pdf->SetTextColor(5, 5, 5);
$pdf->SetFont('times', 'B', 20);
$pdf->SetXY(22, $curY + 37);
$pdf->Cell(253, 10, strtoupper($cert['estudiante']), 0, 1, 'C');

// Cédula y carrera
$pdf->SetTextColor(80, 80, 80);
$pdf->SetFont('helvetica', '', 9);
$pdf->SetXY(22, $curY + 48);
$pdf->Cell(253, 5, 'C.I. ' . ($cert['cedula'] ?? '—') . '   ·   ' . ($cert['carrera'] ?? ''), 0, 1, 'C');

// Cuerpo — Participó con P mayúscula
$pdf->SetTextColor(25, 25, 25);
$pdf->SetFont('times', '', 11);
$fechaInicio = $cert['fecha_inicio'] ? date('d/m/Y', strtotime($cert['fecha_inicio'])) : '—';
$fechaFin    = $cert['fecha_fin']    ? date('d/m/Y', strtotime($cert['fecha_fin']))    : '—';
$horasTxt    = $cert['horas_cumplidas']
    ? 'cumpliendo ' . $cert['horas_cumplidas'] . ' horas de servicio comunitario'
    : 'completando el programa de vinculación comunitaria';
$cuerpo = "Participó en el proyecto de vinculación con la comunidad \xc2\xab{$cert['nombre_proyecto']}\xc2\xbb, "
        . "desarrollado en coordinación con {$cert['organizacion']}, "
        . "{$horasTxt}, en el período comprendido del {$fechaInicio} al {$fechaFin}.";
$pdf->SetXY(45, $curY + 55);
$pdf->MultiCell(207, 7, $cuerpo, 0, 'C', false, 1);

// Período académico
$pdf->SetTextColor(90, 90, 90);
$pdf->SetFont('helvetica', '', 8);
$pdf->SetXY(22, $curY + 80);
$pdf->Cell(253, 5, 'Período académico: ' . ($cert['periodo'] ?? '—'), 0, 1, 'C');

// CES / CACES referencia
$pdf->SetTextColor(140, 140, 140);
$pdf->SetFont('helvetica', '', 7);
$pdf->SetXY(22, $curY + 85);
$pdf->Cell(253, 4, 'CES Art. 87  ·  CACES Indicador B3', 0, 1, 'C');

// ── FIRMA — al pie del certificado ───────────────────────────────
// Línea de firma
$pdf->SetDrawColor(20, 20, 20);
$pdf->SetLineWidth(0.5);
$pdf->Line(100, 178, 197, 178);

// Nombre firmante (negrita)
$pdf->SetTextColor(10, 10, 10);
$pdf->SetFont('helvetica', 'B', 8);
$pdf->SetXY(100, 179);
$pdf->Cell(97, 4, $cert['firmado_por_nombre'] ?? 'Secretaría Académica', 0, 1, 'C');

// Cargo
$pdf->SetFont('helvetica', '', 8);
$pdf->SetTextColor(60, 60, 60);
$pdf->SetXY(100, 183);
$pdf->Cell(97, 4, 'Secretaria Académica', 0, 1, 'C');

// Instituto
$pdf->SetXY(100, 187);
$pdf->Cell(97, 4, $cert['instituto_nombre'] ?? '', 0, 1, 'C');

// QR — esquina inferior derecha
try {
    $pdf->write2DBarcode(
        $cert['url_verificacion'] ?? $cert['codigo_qr'],
        'QRCODE,H', 256, 172, 22, 22,
        ['fgcolor' => [10,10,10], 'bgcolor' => [255,255,255]], 'N'
    );
} catch (Exception $e) {}

// Pie de página: código y fecha
$pdf->SetTextColor(150, 150, 150);
$pdf->SetFont('courier', '', 6.5);
$pdf->SetXY(14, 197);
$pdf->Cell(269, 4,
    'Código: ' . $cert['codigo_qr'] . '   ·   Emitido: ' . date('d/m/Y', strtotime($cert['fecha_emision'])),
    0, 1, 'C'
);

// Guardar en BD
$nombreArchivo = 'cert_vinc_' . $idCert . '_' . $cert['id_estudiante'] . '.pdf';
$db->prepare("UPDATE certificados_vinculacion SET archivo_pdf=:arch WHERE id_cert_vinc=:id")
   ->execute([':arch' => 'certificados/' . $nombreArchivo, ':id' => $idCert]);

$pdf->Output($nombreArchivo, 'D');
exit;


// ── Fallback HTML — fondo blanco, Ctrl+P para imprimir ───────────
function generarHtmlCertificado(array $cert): void {
    $tipoLabel   = ['culminacion'=>'Culminación','participacion'=>'Participación','horas'=>'Horas'][$cert['tipo']] ?? 'Culminación';
    $fechaInicio = $cert['fecha_inicio'] ? date('d/m/Y', strtotime($cert['fecha_inicio'])) : '—';
    $fechaFin    = $cert['fecha_fin']    ? date('d/m/Y', strtotime($cert['fecha_fin']))    : '—';
    $horas       = $cert['horas_cumplidas'] ? $cert['horas_cumplidas'] . ' horas' : '—';

    // Logo en base64 si existe
    $logoHtml = '';
    if (!empty($cert['instituto_logo'])) {
        $logoPath = BASE_PATH . '/uploads/institutos/' . $cert['instituto_logo'];
        if (file_exists($logoPath)) {
            $mime    = str_ends_with(strtolower($logoPath), '.png') ? 'image/png' : 'image/jpeg';
            $b64     = base64_encode(file_get_contents($logoPath));
            $logoHtml = '<img src="data:' . $mime . ';base64,' . $b64
                      . '" style="height:52px;width:auto;display:block;margin:0 auto 5px;">';
        }
    }
    ?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Certificado — <?= htmlspecialchars($cert['estudiante']) ?></title>
<style>
  @page { size: A4 landscape; margin: 0; }
  * { box-sizing: border-box; margin: 0; padding: 0; }

  body {
    width: 297mm; height: 210mm;
    background: #fff;
    font-family: 'Georgia', 'Times New Roman', serif;
    display: flex; align-items: center; justify-content: center;
  }

  .cert {
    width: 277mm; height: 192mm;
    background: #ffffff;
    border: 1.4px solid #111;
    position: relative;
    padding: 10mm 20mm 12mm;
    text-align: center;
  }
  .cert::before {
    content: '';
    position: absolute;
    top: 3.5mm; left: 3.5mm; right: 3.5mm; bottom: 3.5mm;
    border: 0.5px solid #666;
    pointer-events: none;
  }

  .inst    { font-size: 8pt; color: #333; letter-spacing: 3px;
             text-transform: uppercase; margin-bottom: 3mm;
             font-family: Arial, sans-serif; }
  .titulo  { font-size: 30pt; font-weight: 900; color: #000;
             letter-spacing: 8px; text-transform: uppercase; margin-bottom: 2mm; }
  .subtit  { font-size: 9.5pt; color: #444; letter-spacing: 3px;
             text-transform: uppercase; margin-bottom: 3mm;
             font-family: Arial, sans-serif; }
  .linea   { width: 80mm; height: 1px; background: #aaa;
             margin: 0 auto 3mm; }
  .certifica { font-size: 9pt; color: #666; font-style: italic; margin-bottom: 2mm; }
  .nombre  { font-size: 19pt; font-weight: 700; color: #000;
             text-transform: uppercase; letter-spacing: 2px; margin-bottom: 2mm; }
  .cedula  { font-size: 8.5pt; color: #555; margin-bottom: 3mm;
             font-family: Arial, sans-serif; }
  .cuerpo  { font-size: 10.5pt; color: #111; line-height: 1.65;
             max-width: 215mm; margin: 0 auto 3mm; }
  .periodo { font-size: 8pt; color: #666; margin-bottom: 1mm;
             font-family: Arial, sans-serif; }
  .ces     { font-size: 7pt; color: #999; font-family: Arial, sans-serif; }

  /* FIRMA — posición absoluta al pie */
  .firma-wrap {
    position: absolute;
    bottom: 13mm; left: 0; right: 0;
    display: flex; justify-content: center;
  }
  .firma {
    text-align: center; width: 85mm;
    border-top: 1px solid #222;
    padding-top: 3mm;
  }
  .firma-nombre { font-size: 8.5pt; font-weight: 700; color: #111;
                  font-family: Arial, sans-serif; }
  .firma-cargo  { font-size: 8pt; color: #555;
                  font-family: Arial, sans-serif; }

  .codigo {
    position: absolute; bottom: 5mm; left: 0; right: 0;
    font-size: 6.5pt; color: #bbb;
    font-family: 'Courier New', monospace;
    text-align: center;
  }

  @media print {
    body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  }
</style>
</head>
<body>
<div class="cert">

  <?php if ($logoHtml): ?>
  <div style="margin-bottom:3mm;"><?= $logoHtml ?></div>
  <?php endif; ?>

  <div class="inst"><?= htmlspecialchars($cert['instituto_nombre'] ?? 'Instituto Superior Tecnológico') ?></div>

  <div class="titulo">Certificado</div>

  <div class="subtit">de Vinculación con la Comunidad &nbsp;·&nbsp; <?= htmlspecialchars($tipoLabel) ?></div>

  <div class="linea"></div>

  <div class="certifica">La institución certifica que:</div>

  <div class="nombre"><?= htmlspecialchars($cert['estudiante']) ?></div>

  <div class="cedula">
    C.I. <?= htmlspecialchars($cert['cedula'] ?? '—') ?>
    &nbsp;·&nbsp;
    <?= htmlspecialchars($cert['carrera'] ?? '') ?>
  </div>

  <div class="cuerpo">
    Participó en el proyecto de vinculación con la comunidad
    <em>«<?= htmlspecialchars($cert['nombre_proyecto']) ?>»</em>,
    desarrollado en coordinación con <?= htmlspecialchars($cert['organizacion'] ?? '—') ?>,
    cumpliendo <strong><?= $horas ?></strong> de servicio comunitario,
    en el período comprendido del <?= $fechaInicio ?> al <?= $fechaFin ?>.
  </div>

  <div class="periodo">Período académico: <?= htmlspecialchars($cert['periodo'] ?? '—') ?></div>
  <div class="ces">CES Art. 87 &nbsp;·&nbsp; CACES Indicador B3</div>

  <!-- Firma al pie -->
  <div class="firma-wrap">
    <div class="firma">
      <div class="firma-nombre"><?= htmlspecialchars($cert['firmado_por_nombre'] ?? 'Secretaría Académica') ?></div>
      <div class="firma-cargo">Secretaria Académica</div>
      <div class="firma-cargo"><?= htmlspecialchars($cert['instituto_nombre'] ?? '') ?></div>
    </div>
  </div>

  <div class="codigo">
    Código: <?= htmlspecialchars($cert['codigo_qr']) ?>
    &nbsp;·&nbsp; Emitido: <?= date('d/m/Y', strtotime($cert['fecha_emision'])) ?>
    <?php if ($cert['url_verificacion']): ?>
    &nbsp;·&nbsp; <?= htmlspecialchars($cert['url_verificacion']) ?>
    <?php endif; ?>
  </div>

</div>
<script>window.onload = function(){ window.print(); }</script>
</body>
</html>
    <?php
}