<?php
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../config/onedrive.php';
require_once __DIR__ . '/../../includes/OneDriveStorage.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';
require_once __DIR__ . '/../../includes/flash.php';
requireRol(ROL_COORDINADOR, ROL_ADMIN, ROL_SECRETARIA);

$db     = getDB();
$user   = currentUser();
$idInst = instId();
$pageTitle = 'Fichas PPP';

// POST handler
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $accion = $_POST['accion']     ?? '';
    $idPrac = (int)($_POST['id_practica'] ?? 0);
    if ($idPrac) {
        if ($accion === 'enviar') {
            $db->prepare("UPDATE practicas SET ficha_estado='enviada', ficha_enviada_at=NOW() WHERE id_practica=:id")
               ->execute([':id' => $idPrac]);
            flashSet('ok', '✅ Ficha habilitada. El estudiante ya puede descargarla y firmarla.');
        } elseif ($accion === 'upload_final') {
            $stP = $db->prepare("SELECT ficha_estado FROM practicas WHERE id_practica=:id");
            $stP->execute([':id' => $idPrac]);
            $prac = $stP->fetch();
            if ($prac && in_array($prac['ficha_estado'], ['firmada_est','enviada','firmada_final'])) {
                if (isset($_FILES['ficha_final']) && $_FILES['ficha_final']['error'] === UPLOAD_ERR_OK) {
                    $ext = strtolower(pathinfo($_FILES['ficha_final']['name'], PATHINFO_EXTENSION));
                    if (in_array($ext, ['pdf','jpg','jpeg','png'])) {
                        $nombre  = 'ficha_final_' . $idPrac . '_' . time() . '.' . $ext;
                        try {
                            $rutaOD = OneDriveStorage::upload($_FILES['ficha_final']['tmp_name'], 'fichas_ppp', $nombre, (string)$idPrac, $idInst);
                            $db->prepare("UPDATE practicas SET ficha_estado='firmada_final', ficha_doc_final=:doc WHERE id_practica=:id")
                               ->execute([':doc' => $rutaOD, ':id' => $idPrac]);
                            flashSet('ok', '✅ Ficha firmada final subida.');
                        } catch(Exception $e) { flashSet('err', '❌ Error OneDrive: '.$e->getMessage()); }
                    } else { flashSet('err', '❌ Solo PDF, JPG o PNG.'); }
                } else { flashSet('err', '❌ Selecciona un archivo.'); }
            } else { flashSet('err', '❌ Estado incorrecto.'); }
        }
    }
    $qs = http_build_query(array_filter(['q'=>$_POST['q_prev']??''
        ,'periodo'=>$_POST['periodo_prev']??''
        ,'carrera'=>$_POST['carrera_prev']??''
        ,'fe'=>$_POST['fe_prev']??''
        ,'limit'=>$_POST['limit_prev']??'25'
        ,'page'=>$_POST['page_prev']??'1']));
    header('Location: fichas_ppp.php'.($qs?'?'.$qs:''));
    exit;
}

$q          = trim($_GET['q']       ?? '');
$filPeriodo = trim($_GET['periodo'] ?? '');
$filCarrera = trim($_GET['carrera'] ?? '');
$filFicha   = trim($_GET['fe']      ?? '');
$limitRaw   = (int)($_GET['limit'] ?? 25);
$limit      = in_array($limitRaw, [25, 50, 100, 200]) ? $limitRaw : 25;
$page       = max(1, (int)($_GET['page'] ?? 1));

// ── Período activo por defecto — SOLO del instituto actual ─────────────────
if ($filPeriodo === '' && !isset($_GET['periodo'])) {
    $stActivo = $db->prepare("
        SELECT id_periodo FROM periodos_academicos
        WHERE  activo       = 1
          AND  id_instituto = :inst
        ORDER BY fecha_inicio DESC
        LIMIT 1
    ");
    $stActivo->execute([':inst' => $idInst]);
    $periodoActivo = $stActivo->fetchColumn();
    if ($periodoActivo) {
        $filPeriodo = (string)$periodoActivo;
    }
}

// ── Períodos del instituto actual únicamente ────────────────────────────────
$stPer = $db->prepare("
    SELECT id_periodo, nombre, activo
    FROM   periodos_academicos
    WHERE  id_instituto = :inst
    ORDER  BY activo DESC, fecha_inicio DESC
");
$stPer->execute([':inst' => $idInst]);
$periodos = $stPer->fetchAll();

// ── Carreras del instituto actual únicamente ────────────────────────────────
$stCarr = $db->prepare("
    SELECT id_carrera, nombre
    FROM   carreras
    WHERE  id_instituto = :inst
    ORDER  BY nombre
");
$stCarr->execute([':inst' => $idInst]);
$carreras = $stCarr->fetchAll();

// ── WHERE dinámico — el instituto es SIEMPRE obligatorio ───────────────────
// Garantiza que nunca se mezclen datos de otros institutos
if (!$idInst) {
    // Seguridad: sin instituto definido no mostramos nada
    die('Error: no se pudo determinar el instituto del coordinador.');
}

$params = [':inst' => $idInst];
$conds  = ['c.id_instituto = :inst'];   // ← siempre presente, nunca se omite

if ($q) {
    $conds[]     = "(u.nombres LIKE :q OR u.apellidos LIKE :q OR em.razon_social LIKE :q OR c.nombre LIKE :q)";
    $params[':q'] = "%$q%";
}
if ($filPeriodo) {
    $conds[]            = 'pr.id_periodo = :periodo';
    $params[':periodo']  = (int)$filPeriodo;
}
if ($filCarrera) {
    $conds[]            = 'e.id_carrera = :carrera';
    $params[':carrera']  = (int)$filCarrera;
}
if ($filFicha) {
    if ($filFicha === 'no_enviada') {
        $conds[] = "(pr.ficha_estado IS NULL OR pr.ficha_estado = 'no_enviada')";
    } else {
        $conds[]       = 'pr.ficha_estado = :fe';
        $params[':fe']  = $filFicha;
    }
}
$where = 'WHERE ' . implode(' AND ', $conds);

$stCount = $db->prepare("SELECT COUNT(*) FROM practicas pr JOIN estudiantes e ON e.id_estudiante=pr.id_estudiante JOIN usuarios u ON u.id_usuario=e.id_usuario JOIN carreras c ON c.id_carrera=e.id_carrera JOIN empresas em ON em.id_empresa=pr.id_empresa LEFT JOIN tutores t ON t.id_tutor=pr.id_tutor LEFT JOIN usuarios ut ON ut.id_usuario=t.id_usuario $where");
$stCount->execute($params);
$total     = (int)$stCount->fetchColumn();
$totalPags = max(1,(int)ceil($total/$limit));
$page      = min($page,$totalPags);
$offset    = ($page-1)*$limit;

$paramsPage = $params;
$paramsPage[':limit']  = $limit;
$paramsPage[':offset'] = $offset;
$stPrac = $db->prepare("SELECT pr.id_practica, pr.fecha_inicio, pr.fecha_fin, pr.estado, pr.horas_requeridas, pr.horas_cumplidas, pr.ficha_estado, pr.ficha_doc_est, pr.ficha_doc_final, CONCAT(u.apellidos,' ',u.nombres) AS estudiante, u.cedula, c.nombre AS carrera, em.razon_social AS empresa, CONCAT(ut.apellidos,' ',ut.nombres) AS tutor FROM practicas pr JOIN estudiantes e ON e.id_estudiante=pr.id_estudiante JOIN usuarios u ON u.id_usuario=e.id_usuario JOIN carreras c ON c.id_carrera=e.id_carrera JOIN empresas em ON em.id_empresa=pr.id_empresa LEFT JOIN tutores t ON t.id_tutor=pr.id_tutor LEFT JOIN usuarios ut ON ut.id_usuario=t.id_usuario $where ORDER BY pr.fecha_inicio DESC LIMIT :limit OFFSET :offset");
$stPrac->execute($paramsPage);
$practicas = $stPrac->fetchAll();

function badgeFicha(string $estado): string {
    return match($estado) {
        'enviada'       => '<span class="badge-ficha badge-enviada">📤 Enviada</span>',
        'firmada_est'   => '<span class="badge-ficha badge-firmada-est">✍️ Firmada por estudiante</span>',
        'firmada_final' => '<span class="badge-ficha badge-ok">✅ Firmada completa</span>',
        default         => '<span class="badge-ficha badge-none">— Sin enviar</span>',
    };
}
function urlPag(int $p): string {
    $base = array_filter(['q'=>$_GET['q']??''
        ,'periodo'=>$_GET['periodo']??''
        ,'carrera'=>$_GET['carrera']??''
        ,'fe'=>$_GET['fe']??''
        ,'limit'=>$_GET['limit']??'25'
        ,'page'=>$p]);
    return 'fichas_ppp.php?'.http_build_query($base);
}
?>
<?php $paginaActual = 'fichas_ppp'; ?>
<!DOCTYPE html>
<html lang="es">
<head>
  <?php include __DIR__.'/../../includes/head.php'; ?>
  <link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar.css">
  <link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-coordinador.css">
  <style>
    .badge-ficha{display:inline-block;padding:2px 8px;border-radius:20px;font-size:10px;font-weight:700;white-space:nowrap;}
    .badge-none{background:#f3f4f6;color:#6b7280;border:1px solid #e5e7eb;}
    .badge-enviada{background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;}
    .badge-firmada-est{background:#fefce8;color:#a16207;border:1px solid #fde68a;}
    .badge-ok{background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0;}
    .action-group{display:flex;flex-direction:column;gap:4px;min-width:190px;}
    .btn-accion{font-size:11px;padding:4px 10px;border-radius:5px;border:none;cursor:pointer;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;}
    .btn-pdf{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5;} .btn-pdf:hover{background:#fca5a5;}
    .btn-send{background:#dbeafe;color:#1e40af;border:1px solid #93c5fd;} .btn-send:hover{background:#bfdbfe;}
    .btn-down{background:#d1fae5;color:#065f46;border:1px solid #6ee7b7;} .btn-down:hover{background:#a7f3d0;}
    .upload-inline{display:flex;align-items:center;gap:4px;margin-top:2px;}
    .upload-inline input[type=file]{font-size:10px;max-width:130px;}
    .upload-inline button{font-size:10px;padding:3px 8px;border-radius:4px;border:none;background:#f59e0b;color:#fff;cursor:pointer;font-weight:700;}
    .filtros-bar{background:#f8fafc;border:1px solid #e5e7eb;border-radius:10px;padding:14px 16px;margin-bottom:16px;}
    .filtros-bar select,.filtros-bar input{font-size:12px;}
    .pag-wrap{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-top:14px;}
    .pag-info{font-size:12px;color:#6b7280;}
    .pag-btns{display:flex;gap:4px;align-items:center;flex-wrap:wrap;}
    .pag-btn{padding:5px 10px;border-radius:6px;border:1px solid #e5e7eb;background:#fff;font-size:12px;font-weight:600;color:#374151;text-decoration:none;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:.15s;}
    .pag-btn:hover{background:#f3f4f6;}
    .pag-btn.active{background:#2563eb;color:#fff;border-color:#2563eb;}
    .pag-btn.disabled{opacity:.4;pointer-events:none;}
  </style>
</head>
<body>
<?php include __DIR__.'/../../includes/navbar.php'; ?>
<div class="app-shell">
  <?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'sidebar-coordinador.php'; ?>
  <main class="main-area">

    <div class="page-header d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3">
      <div>
        <h4 class="mb-1"><i class="fa fa-file-pdf me-2" style="color:#ef4444;"></i>Fichas de Prácticas Pre Profesionales</h4>
        <p class="text-muted mb-0" style="font-size:13px;">Genera, envía y gestiona la firma de la Ficha General PPP (ISTT-PPP-002A)</p>
      </div>
      <div style="font-size:12px;color:#6b7280;">
        <i class="fa fa-list me-1"></i><strong><?= number_format($total) ?></strong> registro<?= $total!==1?'s':'' ?> encontrado<?= $total!==1?'s':'' ?>
      </div>
    </div>

    <?= flashHtml() ?>

    <!-- Leyenda -->
    <div class="d-flex gap-3 flex-wrap mb-3" style="font-size:11px;">
      <span><?= badgeFicha('no_enviada') ?> Sin enviar</span>
      <span><?= badgeFicha('enviada') ?> Estudiante puede ver y firmar</span>
      <span><?= badgeFicha('firmada_est') ?> Pendiente firma final</span>
      <span><?= badgeFicha('firmada_final') ?> Proceso completo ✅</span>
    </div>

    <!-- FILTROS -->
    <?php $hayFiltros = ($q || $filPeriodo || $filCarrera || $filFicha); ?>
    <form method="GET" id="formFiltros">
      <div class="filtros-bar">
        <div class="row g-2 align-items-end">
          <div class="col-md-3">
            <label style="font-size:11px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px;"><i class="fa fa-search me-1"></i>Buscar</label>
            <input type="text" name="q" value="<?= htmlspecialchars($q) ?>" class="form-control form-control-sm" placeholder="Estudiante, empresa, carrera...">
          </div>
          <div class="col-md-3">
            <label style="font-size:11px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px;"><i class="fa fa-calendar me-1"></i>Período / Ciclo</label>
            <select name="periodo" class="form-select form-select-sm">
              <option value="">— Todos los períodos —</option>
              <?php foreach ($periodos as $per): ?>
                <option value="<?= $per['id_periodo'] ?>" <?= $filPeriodo==$per['id_periodo']?'selected':'' ?>>
                  <?= $per['activo'] ? '🟢 ' : '' ?><?= htmlspecialchars($per['nombre']) ?><?= $per['activo'] ? ' (activo)' : '' ?>
                </option>
              <?php endforeach; ?>
            </select>
          </div>
          <div class="col-md-3">
            <label style="font-size:11px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px;"><i class="fa fa-graduation-cap me-1"></i>Carrera</label>
            <select name="carrera" class="form-select form-select-sm">
              <option value="">— Todas las carreras —</option>
              <?php foreach ($carreras as $car): ?>
                <option value="<?= $car['id_carrera'] ?>" <?= $filCarrera==$car['id_carrera']?'selected':'' ?>><?= htmlspecialchars($car['nombre']) ?></option>
              <?php endforeach; ?>
            </select>
          </div>
          <div class="col-md-2">
            <label style="font-size:11px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px;"><i class="fa fa-filter me-1"></i>Estado Ficha</label>
            <select name="fe" class="form-select form-select-sm">
              <option value="">— Todos —</option>
              <option value="no_enviada"    <?= $filFicha==='no_enviada'   ?'selected':'' ?>>Sin enviar</option>
              <option value="enviada"       <?= $filFicha==='enviada'      ?'selected':'' ?>>Enviada</option>
              <option value="firmada_est"   <?= $filFicha==='firmada_est'  ?'selected':'' ?>>Firmada por est.</option>
              <option value="firmada_final" <?= $filFicha==='firmada_final'?'selected':'' ?>>Firmada completa</option>
            </select>
          </div>
          <div class="col-md-1">
            <input type="hidden" name="limit" value="<?= $limit ?>">
            <input type="hidden" name="page"  value="1">
            <button type="submit" class="btn btn-primary btn-sm w-100"><i class="fa fa-search"></i></button>
          </div>
        </div>
        <?php if ($hayFiltros): ?>
        <div class="d-flex align-items-center gap-2 mt-2 flex-wrap" style="font-size:11px;">
          <span style="color:#6b7280;">Filtros activos:</span>
          <?php if ($q): ?><span class="badge" style="background:#e0f2fe;color:#0369a1;border:1px solid #bae6fd;">🔍 "<?= htmlspecialchars($q) ?>"</span><?php endif; ?>
          <?php if ($filPeriodo): $n=''; $esAct=false; foreach($periodos as $p) if($p['id_periodo']==$filPeriodo){$n=$p['nombre'];$esAct=(bool)$p['activo'];} ?>
            <span class="badge" style="background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0;">
              <?= $esAct ? '🟢' : '📅' ?> <?= htmlspecialchars($n) ?><?= $esAct ? ' (activo)' : '' ?>
            </span>
          <?php endif; ?>
          <?php if ($filCarrera): $n=''; foreach($carreras as $c) if($c['id_carrera']==$filCarrera) $n=$c['nombre']; ?>
            <span class="badge" style="background:#faf5ff;color:#7e22ce;border:1px solid #e9d5ff;">🎓 <?= htmlspecialchars($n) ?></span>
          <?php endif; ?>
          <?php if ($filFicha): ?>
            <span class="badge" style="background:#fefce8;color:#a16207;border:1px solid #fde68a;">📄 <?= htmlspecialchars($filFicha) ?></span>
          <?php endif; ?>
          <a href="fichas_ppp.php" class="btn btn-outline-secondary btn-sm py-0 px-2">✕ Limpiar</a>
        </div>
        <?php endif; ?>
      </div>
    </form>

    <!-- TABLA -->
    <div class="card shadow-sm border-0">
      <div class="card-body p-0">
        <table class="table table-hover mb-0" style="font-size:12px;">
          <thead style="background:#f8f9fa;">
            <tr style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">
              <th class="px-3 py-3">Estudiante</th>
              <th class="py-3">Carrera</th>
              <th class="py-3">Empresa</th>
              <th class="py-3">Horas</th>
              <th class="py-3">Estado PPP</th>
              <th class="py-3">Estado Ficha</th>
              <th class="py-3" style="min-width:210px;">Acciones</th>
            </tr>
          </thead>
          <tbody>
            <?php if (empty($practicas)): ?>
              <tr><td colspan="7" class="text-center text-muted py-5">
                <i class="fa fa-inbox fa-2x mb-2 d-block" style="color:#d1d5db;"></i>
                <?= $hayFiltros ? 'Sin resultados con los filtros aplicados. <a href="fichas_ppp.php">Limpiar filtros</a>' : 'No hay prácticas registradas aún.' ?>
              </td></tr>
            <?php else: ?>
              <?php foreach ($practicas as $p):
                $fe = $p['ficha_estado'] ?? 'no_enviada';
                $prevHidden = '<input type="hidden" name="q_prev"       value="'.htmlspecialchars($q).'">
                              <input type="hidden" name="periodo_prev" value="'.htmlspecialchars($filPeriodo).'">
                              <input type="hidden" name="carrera_prev" value="'.htmlspecialchars($filCarrera).'">
                              <input type="hidden" name="fe_prev"      value="'.htmlspecialchars($filFicha).'">
                              <input type="hidden" name="limit_prev"   value="'.$limit.'">
                              <input type="hidden" name="page_prev"    value="'.$page.'">';
              ?>
              <tr>
                <td class="px-3 py-2">
                  <strong><?= htmlspecialchars($p['estudiante']) ?></strong>
                  <div style="font-size:10px;color:#9ca3af;"><?= htmlspecialchars($p['cedula']) ?></div>
                </td>
                <td class="py-2" style="font-size:11px;"><?= htmlspecialchars($p['carrera']) ?></td>
                <td class="py-2" style="font-size:11px;"><?= htmlspecialchars($p['empresa']) ?></td>
                <td class="py-2"><span style="color:#7c3aed;font-weight:600;"><?= (int)$p['horas_cumplidas'] ?>/<?= (int)$p['horas_requeridas'] ?>h</span></td>
                <td class="py-2"><?= badgeEstado($p['estado']) ?></td>
                <td class="py-2"><?= badgeFicha($fe) ?></td>
                <td class="py-2">
                  <div class="action-group">
                    <a href="generar_ficha_ppp.php?id=<?= $p['id_practica'] ?>" target="_blank" class="btn-accion btn-pdf">
                      <i class="fa fa-file-pdf"></i> Ver / Generar PDF
                    </a>
                    <?php if ($fe === 'no_enviada'): ?>
                    <form method="POST" action="fichas_ppp.php" style="margin:0;">
                      <input type="hidden" name="accion" value="enviar">
                      <input type="hidden" name="id_practica" value="<?= $p['id_practica'] ?>">
                      <?= $prevHidden ?>
                      <button type="submit" class="btn-accion btn-send"
                              onclick="return confirm('¿Habilitar esta ficha para que el estudiante la descargue y firme?')">
                        <i class="fa fa-paper-plane"></i> Enviar al estudiante
                      </button>
                    </form>
                    <?php elseif ($fe === 'enviada'): ?>
                    <span style="font-size:10px;color:#1d4ed8;"><i class="fa fa-clock"></i> Esperando firma del estudiante</span>
                    <?php elseif ($fe === 'firmada_est'): ?>
                    <?php
                      $urlEst = null;
                      if (!empty($p['ficha_doc_est'])) {
                          if (OneDriveStorage::esOneDrive($p['ficha_doc_est'])) {
                              $urlEst = OneDriveStorage::getDownloadUrl($p['ficha_doc_est']);
                          } else {
                              $urlEst = BASE_URL . '/assets/uploads/' . ltrim($p['ficha_doc_est'], '/');
                          }
                      }
                    ?>
                    <?php if ($urlEst): ?>
                    <a href="<?= htmlspecialchars($urlEst) ?>" target="_blank" class="btn-accion btn-down" download>
                      <i class="fa fa-download"></i> Descargar (firmada por est.)
                    </a>
                    <?php endif; ?>
                    <form method="POST" action="fichas_ppp.php" enctype="multipart/form-data" style="margin:0;">
                      <input type="hidden" name="accion" value="upload_final">
                      <input type="hidden" name="id_practica" value="<?= $p['id_practica'] ?>">
                      <?= $prevHidden ?>
                      <div class="upload-inline">
                        <input type="file" name="ficha_final" accept=".pdf,.jpg,.jpeg,.png" required>
                        <button type="submit">📤 Subir firmada final</button>
                      </div>
                    </form>
                    <?php elseif ($fe === 'firmada_final'): ?>
                    <?php
                      $urlFinal = null;
                      if (!empty($p['ficha_doc_final'])) {
                          if (OneDriveStorage::esOneDrive($p['ficha_doc_final'])) {
                              $urlFinal = OneDriveStorage::getDownloadUrl($p['ficha_doc_final']);
                          } else {
                              $urlFinal = BASE_URL . '/assets/uploads/' . ltrim($p['ficha_doc_final'], '/');
                          }
                      }
                    ?>
                    <?php if ($urlFinal): ?>
                    <a href="<?= htmlspecialchars($urlFinal) ?>" target="_blank" class="btn-accion btn-down">
                      <i class="fa fa-file-pdf"></i> Ver ficha firmada final
                    </a>
                    <?php endif; ?>
                    <form method="POST" action="fichas_ppp.php" enctype="multipart/form-data" style="margin:0;">
                      <input type="hidden" name="accion" value="upload_final">
                      <input type="hidden" name="id_practica" value="<?= $p['id_practica'] ?>">
                      <?= $prevHidden ?>
                      <div class="upload-inline">
                        <input type="file" name="ficha_final" accept=".pdf,.jpg,.jpeg,.png">
                        <button type="submit">🔄 Actualizar</button>
                      </div>
                    </form>
                    <?php endif; ?>
                  </div>
                </td>
              </tr>
              <?php endforeach; ?>
            <?php endif; ?>
          </tbody>
        </table>
      </div>
    </div>

    <!-- PAGINACIÓN -->
    <?php if ($total > 0): ?>
    <div class="pag-wrap">
      <div class="pag-info">
        Mostrando <strong><?= number_format($offset+1) ?></strong>–<strong><?= number_format(min($offset+$limit,$total)) ?></strong>
        de <strong><?= number_format($total) ?></strong> · Página <strong><?= $page ?></strong> de <strong><?= $totalPags ?></strong>
      </div>
      <div class="d-flex align-items-center gap-3 flex-wrap">
        <div class="d-flex align-items-center gap-1" style="font-size:12px;color:#6b7280;">
          Mostrar
          <select style="font-size:12px;padding:4px 8px;border-radius:6px;border:1px solid #e5e7eb;" onchange="cambiarLimit(this.value)">
            <?php foreach ([25,50,100,200] as $lim): ?>
              <option value="<?= $lim ?>" <?= $limit===$lim?'selected':'' ?>><?= $lim ?></option>
            <?php endforeach; ?>
          </select>
          por página
        </div>
        <div class="pag-btns">
          <a href="<?= urlPag(1) ?>" class="pag-btn <?= $page<=1?'disabled':'' ?>" title="Primera"><i class="fa fa-angles-left"></i></a>
          <a href="<?= urlPag(max(1,$page-1)) ?>" class="pag-btn <?= $page<=1?'disabled':'' ?>"><i class="fa fa-chevron-left"></i> Anterior</a>
          <?php
          $ini=max(1,$page-2); $fin=min($totalPags,$page+2);
          if($ini>1){echo '<a href="'.urlPag(1).'" class="pag-btn">1</a>';if($ini>2) echo '<span class="pag-btn disabled" style="border:none;background:none;">…</span>';}
          for($i=$ini;$i<=$fin;$i++) echo '<a href="'.urlPag($i).'" class="pag-btn'.($i===$page?' active':'').'">'.$i.'</a>';
          if($fin<$totalPags){if($fin<$totalPags-1) echo '<span class="pag-btn disabled" style="border:none;background:none;">…</span>';echo '<a href="'.urlPag($totalPags).'" class="pag-btn">'.$totalPags.'</a>';}
          ?>
          <a href="<?= urlPag(min($totalPags,$page+1)) ?>" class="pag-btn <?= $page>=$totalPags?'disabled':'' ?>">Siguiente <i class="fa fa-chevron-right"></i></a>
          <a href="<?= urlPag($totalPags) ?>" class="pag-btn <?= $page>=$totalPags?'disabled':'' ?>" title="Última"><i class="fa fa-angles-right"></i></a>
        </div>
      </div>
    </div>
    <?php endif; ?>

    <!-- Nota -->
    <div class="mt-3 p-3 rounded" style="background:#eff6ff;border:1px solid #bfdbfe;font-size:12px;color:#1e40af;">
      <i class="fa fa-circle-info me-2"></i>
      <strong>Flujo:</strong>
      <strong>1.</strong> Genera el PDF →
      <strong>2.</strong> Clic en <em>"Enviar al estudiante"</em> →
      <strong>3.</strong> El estudiante descarga, firma y sube →
      <strong>4.</strong> Tú descargas, la autoridad firma →
      <strong>5.</strong> Subes la firmada final ✅
    </div>

  </main>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.bundle.min.js"></script>
<script>
function cambiarLimit(val){
    const url=new URL(window.location.href);
    url.searchParams.set('limit',val);
    url.searchParams.set('page','1');
    window.location.href=url.toString();
}
document.querySelectorAll('#formFiltros select[name="periodo"],#formFiltros select[name="carrera"],#formFiltros select[name="fe"]')
    .forEach(el=>el.addEventListener('change',()=>{
        document.querySelector('#formFiltros input[name="page"]').value=1;
        document.getElementById('formFiltros').submit();
    }));
</script>
</body>
</html>