<?php
// modules/tutor/dashboard.php
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';
require_once __DIR__ . '/../../includes/flash.php';
requireRol(ROL_TUTOR);
$idInst = instId();

$user      = currentUser();
$db        = getDB();
$pageTitle = 'Dashboard Tutor';

// ── Datos del instituto ───────────────────────────────────────
$stInstTutor = $db->prepare("SELECT nombre, logo FROM institutos WHERE id_instituto = :id LIMIT 1");
$stInstTutor->execute([':id' => $idInst ?: 1]);
$instTutor   = $stInstTutor->fetch() ?: [];
$logoTutor   = $instTutor['logo'] ?? '';
$nombreTutor = $instTutor['nombre'] ?? 'SIGVP';
$logoUrlTutor = $logoTutor ? BASE_URL . '/uploads/institutos/' . $logoTutor : '';

// ── Verificar si existe registro en tabla tutores ───────────
$stTutor = $db->prepare("SELECT id_tutor FROM tutores WHERE id_usuario = :uid");
$stTutor->execute([':uid' => $user['id']]);
$tutor = $stTutor->fetch();

$bitPendientes      = [];
$bitRecientes       = [];
$informesPendientes = [];
$trabajosInv        = [];
$totalEst           = 0;
$totalVal           = 0;
$totalObs           = 0;
$totalBitPend       = 0;
$totalInformesPend  = 0;
$totalInv           = 0;

if ($tutor) {
    $tid = $tutor['id_tutor'];

    // Bitácoras enviadas pendientes de validar
    $stPend = $db->prepare("
        SELECT b.id_bitacora, b.semana_numero, b.horas_semana,
               b.actividades, b.logros, b.dificultades,
               b.created_at,
               CONCAT(uu.nombres,' ',uu.apellidos) AS estudiante,
               em.razon_social AS empresa
        FROM   bitacoras b
        JOIN   practicas pr  ON pr.id_practica  = b.id_practica
        JOIN   estudiantes e ON e.id_estudiante = pr.id_estudiante
        JOIN   usuarios uu   ON uu.id_usuario   = e.id_usuario
        JOIN   empresas em   ON em.id_empresa   = pr.id_empresa
        WHERE  pr.id_tutor = :tid AND b.estado = 'enviada'
        ORDER  BY b.created_at ASC
        LIMIT  8
    ");
    $stPend->execute([':tid' => $tid]);
    $bitPendientes = $stPend->fetchAll();
    $totalBitPend  = count($bitPendientes);

    // Últimas bitácoras validadas/observadas
    $stRec = $db->prepare("
        SELECT b.semana_numero, b.estado, b.fecha_validacion,
               CONCAT(uu.nombres,' ',uu.apellidos) AS estudiante
        FROM   bitacoras b
        JOIN   practicas pr  ON pr.id_practica  = b.id_practica
        JOIN   estudiantes e ON e.id_estudiante = pr.id_estudiante
        JOIN   usuarios uu   ON uu.id_usuario   = e.id_usuario
        WHERE  pr.id_tutor = :tid AND b.estado IN ('validada','observada')
        ORDER  BY b.fecha_validacion DESC
        LIMIT  5
    ");
    $stRec->execute([':tid' => $tid]);
    $bitRecientes = $stRec->fetchAll();

    // Contadores por estado de bitácoras
    $stStats = $db->prepare("
        SELECT b.estado, COUNT(*) AS total
        FROM   bitacoras b
        JOIN   practicas pr ON pr.id_practica = b.id_practica
        WHERE  pr.id_tutor = :tid
        GROUP  BY b.estado
    ");
    $stStats->execute([':tid' => $tid]);
    $statsB = array_column($stStats->fetchAll(), 'total', 'estado');

    $totalVal = (int)($statsB['validada']  ?? 0);
    $totalObs = (int)($statsB['observada'] ?? 0);

    // Estudiantes activos asignados
    $stEst = $db->prepare("
        SELECT COUNT(DISTINCT pr.id_estudiante) AS total
        FROM   practicas pr
        WHERE  pr.id_tutor = :tid
          AND  pr.estado IN ('aprobado','en_progreso','informe_enviado')
    ");
    $stEst->execute([':tid' => $tid]);
    $totalEst = (int)$stEst->fetchColumn();

    // Informes finales pendientes de revisar
    $stInf = $db->prepare("
        SELECT pr.id_practica,
               CONCAT(uu.nombres,' ',uu.apellidos) AS estudiante,
               em.razon_social  AS empresa,
               c.nombre         AS carrera,
               inf.fecha_entrega
        FROM   practicas pr
        JOIN   estudiantes est ON est.id_estudiante = pr.id_estudiante
        JOIN   usuarios uu     ON uu.id_usuario     = est.id_usuario
        JOIN   carreras c      ON c.id_carrera      = est.id_carrera
        JOIN   empresas em     ON em.id_empresa     = pr.id_empresa
        JOIN   informes_finales inf ON inf.id_practica = pr.id_practica
        WHERE  pr.id_tutor = :tid
          AND  pr.estado   = 'informe_enviado'
          AND  (inf.estado_tutor IS NULL OR inf.estado_tutor = 'pendiente')
        ORDER  BY inf.fecha_entrega ASC
        LIMIT  10
    ");
    $stInf->execute([':tid' => $tid]);
    $informesPendientes  = $stInf->fetchAll();
    $totalInformesPend   = count($informesPendientes);

    // ── CES/CACES: Progreso de horas + convenio por estudiante ──
    $estudiantesProgreso = $db->prepare("
        SELECT pr.id_practica,
               CONCAT(uu.apellidos,' ',uu.nombres)   AS estudiante,
               em.razon_social                        AS empresa,
               c.nombre                               AS carrera,
               pr.horas_cumplidas,
               pr.horas_requeridas,
               pr.estado,
               ROUND(pr.horas_cumplidas / NULLIF(pr.horas_requeridas,0) * 100, 1) AS pct_horas,
               -- Convenio vigente de la empresa
               EXISTS (
                   SELECT 1 FROM convenios cv
                   WHERE cv.id_empresa = pr.id_empresa
                     AND cv.estado = 'vigente'
                     AND cv.fecha_vencimiento >= CURDATE()
               ) AS tiene_convenio,
               -- Última bitácora enviada o validada
               (SELECT MAX(b2.created_at) FROM bitacoras b2
                WHERE b2.id_practica = pr.id_practica
                  AND b2.estado IN ('enviada','validada','observada')
               ) AS ultima_bitacora,
               -- Bitácoras pendientes de validar de este estudiante
               (SELECT COUNT(*) FROM bitacoras b3
                WHERE b3.id_practica = pr.id_practica
                  AND b3.estado = 'enviada'
               ) AS bit_pendientes
        FROM   practicas pr
        JOIN   estudiantes e  ON e.id_estudiante  = pr.id_estudiante
        JOIN   usuarios uu    ON uu.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
        WHERE  pr.id_tutor = :tid
          AND  pr.estado IN ('aprobado','en_progreso','informe_enviado')
        ORDER  BY pct_horas ASC
    ");
    $estudiantesProgreso->execute([':tid' => $tid]);
    $estudiantesProgreso = $estudiantesProgreso->fetchAll();

    // Estudiantes sin bitácora en los últimos 14 días
    $sinBitReciente = array_filter($estudiantesProgreso, function($e) {
        if (!$e['ultima_bitacora']) return true;
        return (time() - strtotime($e['ultima_bitacora'])) > (14 * 86400);
    });
    $cntSinBit = count($sinBitReciente);

    // Estudiantes con convenio vencido/sin convenio
    $sinConvenio = array_filter($estudiantesProgreso, fn($e) => !$e['tiene_convenio']);
    $cntSinConv  = count($sinConvenio);
    try {
        $stInv = $db->prepare("
            SELECT t.id_titulacion, t.tema, t.estado, t.estado_trabajo,
                   t.nota_trabajo, t.pdf_trabajo, t.obs_tutor_trabajo,
                   t.updated_at,
                   CONCAT(u.apellidos,' ',u.nombres) AS estudiante,
                   u.email   AS estudiante_email,
                   u.cedula  AS estudiante_cedula,
                   car.nombre AS carrera
            FROM   titulaciones t
            JOIN   estudiantes est ON est.id_estudiante = t.id_estudiante
            JOIN   usuarios u      ON u.id_usuario      = est.id_usuario
            JOIN   carreras car    ON car.id_carrera     = est.id_carrera
            WHERE  t.modalidad  = 'trabajo_investigacion'
              AND  t.id_tutor   = :uid
            ORDER  BY t.updated_at DESC
        ");
        $stInv->execute([':uid' => $user['id']]);
        $trabajosInv = $stInv->fetchAll();
    } catch (Exception $e) { $trabajosInv = []; }
    $totalInv = count($trabajosInv);
}


// Acción rápida: calificar trabajo de investigación
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['accion']) && $_POST['accion'] === 'calificar_trabajo') {
    $idTit  = (int)($_POST['id_titulacion'] ?? 0);
    $nota100 = (float)($_POST['nota_trabajo'] ?? 0);
    $obs    = trim($_POST['obs_tutor'] ?? '');
    if ($idTit && $nota100 >= 0 && $nota100 <= 100) {
        $estadoTrab = $nota100 >= 70 ? 'aprobado_tutor' : 'rechazado_tutor';
        $db->prepare("UPDATE titulaciones SET nota_trabajo=:n, obs_tutor_trabajo=:o, estado_trabajo=:e, updated_at=NOW() WHERE id_titulacion=:id")
           ->execute([':n' => round($nota100, 2), ':o' => $obs, ':e' => $estadoTrab, ':id' => $idTit]);
        registrarAudit($user['id'], 'calificar_trabajo_investigacion', 'titulaciones', $idTit);
        $msg = $nota100 >= 70
            ? "✅ Trabajo aprobado con nota {$nota100}/100."
            : "❌ Trabajo reprobado con nota {$nota100}/100. El estudiante fue notificado.";
        flashSet('ok', $msg);
    }
    header('Location: dashboard.php#inv'); exit;
}

// Acción rápida: validar/observar desde dashboard
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $tutor) {
    $id     = (int)($_POST['id_bitacora'] ?? 0);
    $accion = in_array($_POST['accion'] ?? '', ['validada','observada']) ? $_POST['accion'] : null;
    $coment = trim($_POST['comentario'] ?? '');
    if ($id && $accion) {
        $db->prepare("UPDATE bitacoras SET estado=:e, comentario_tutor=:c, fecha_validacion=NOW() WHERE id_bitacora=:id")
           ->execute([':e' => $accion, ':c' => $coment, ':id' => $id]);
        registrarAudit($user['id'], $accion . '_bitacora', 'bitacoras', $id);
        flashSet('ok', $accion === 'validada' ? 'Bitácora validada correctamente.' : 'Observación enviada al estudiante.');
    }
    header('Location: dashboard.php'); exit;
}
?>
<?php $paginaActual = 'dashboard'; ?>
<!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-tutor.css">
</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-tutor.php'; ?>

  <main class="main-area">
    <?= flashHtml() ?>
    <!-- ── ENCABEZADO CON LOGO, INSTITUTO Y FECHA ── -->
    <div style="display:flex;align-items:center;justify-content:space-between;
                background:#fff;border:1px solid #e2e8f0;border-radius:12px;
                padding:16px 24px;margin-bottom:24px;
                box-shadow:0 1px 3px rgba(0,0,0,.06);">

      <!-- LOGO -->
      <div style="flex-shrink:0;">
        <?php if (!empty($logoUrlTutor)): ?>
          <img src="<?= htmlspecialchars($logoUrlTutor) ?>"
               alt="Logo <?= htmlspecialchars($nombreTutor) ?>"
               style="height:72px;width:72px;object-fit:contain;border-radius:10px;
                      border:1px solid #e2e8f0;padding:4px;background:#f8fafc;">
        <?php else: ?>
          <div style="height:72px;width:72px;background:#1a3a6b;border-radius:10px;
                      display:flex;align-items:center;justify-content:center;font-size:32px;">🏫</div>
        <?php endif; ?>
      </div>

      <!-- NOMBRE DEL INSTITUTO -->
      <div style="flex:1;text-align:center;padding:0 20px;">
        <div style="font-size:11px;font-weight:700;letter-spacing:1.5px;
                    text-transform:uppercase;color:#94a3b8;margin-bottom:4px;">
          Panel Tutor Académico
        </div>
        <div style="font-size:19px;font-weight:900;color:#1e293b;line-height:1.2;">
          <?= htmlspecialchars($nombreTutor) ?>
        </div>
        <div style="font-size:12px;color:#64748b;margin-top:4px;">
          <?= htmlspecialchars($user['nombre'] ?? '') ?>
        </div>
      </div>

      <!-- FECHA Y HORA -->
      <div style="flex-shrink:0;text-align:center;background:#f8fafc;
                  border:1px solid #e2e8f0;border-radius:12px;
                  padding:12px 20px;min-width:130px;">
        <div style="font-size:22px;font-weight:800;color:#1e293b;line-height:1;" id="tutor-hora">
          <?= date('H:i:s') ?>
        </div>
        <div style="font-size:11px;color:#94a3b8;margin-top:4px;font-weight:600;" id="tutor-fecha">
          <?= date('d/m/Y') ?>
        </div>
        <div style="font-size:10px;color:#cbd5e1;margin-top:2px;" id="tutor-dia">
          <?= ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'][date('w')] ?>
        </div>
      </div>

    </div>

    <?php if (!$tutor): ?>
    <!-- Tutor sin registro -->
    <div class="alert-dark-danger p-3 mb-4">
      <i class="fa fa-circle-exclamation me-2"></i>
      Tu cuenta no tiene un perfil de tutor configurado. Contacta al administrador para completar tu registro.
    </div>

    <?php else: ?>

    <!-- ── STAT CARDS ── -->
    <div class="row g-3 mb-4">
      <div class="col-6 col-lg-3">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:#2ea8ff;"><?= $totalEst ?></div>
            <div class="stat-label">Estudiantes activos</div>
          </div>
          <div class="stat-icon">🎓</div>
        </div>
      </div>
      <div class="col-6 col-lg-3">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:#f7b93e;"><?= $totalBitPend ?></div>
            <div class="stat-label">Bitácoras pendientes</div>
          </div>
          <div class="stat-icon">📬</div>
        </div>
      </div>
      <div class="col-6 col-lg-3">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:#3dffa0;"><?= $totalVal ?></div>
            <div class="stat-label">Bitácoras validadas</div>
          </div>
          <div class="stat-icon">✅</div>
        </div>
      </div>
      <div class="col-6 col-lg-3">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:#ff9d93;"><?= $totalObs ?></div>
            <div class="stat-label">Con observaciones</div>
          </div>
          <div class="stat-icon">💬</div>
        </div>
      </div>
    </div>

    <?php if ($totalBitPend > 0): ?>
    <div class="alert-dark-warn p-3 mb-3">
      <i class="fa fa-book-open me-2"></i>
      Tienes <strong><?= $totalBitPend ?></strong> bitácora(s) pendiente(s) de validación.
      <a href="bitacoras.php" style="color:#f7b93e;font-weight:600;"> Revisar ahora →</a>
    </div>
    <?php endif; ?>

    <?php if ($totalInformesPend > 0): ?>
    <div class="alert-dark-warn p-3 mb-4" style="border-left:3px solid #f59e0b;">
      <i class="fa fa-file-circle-check me-2" style="color:#f59e0b;"></i>
      Tienes <strong><?= $totalInformesPend ?></strong> informe(s) final(es) esperando tu revisión.
      <a href="evaluaciones.php" style="color:#f59e0b;font-weight:600;"> Revisar informes →</a>
    </div>
    <?php endif; ?>

    <?php
      $invPendPDF = array_filter($trabajosInv, fn($t) => ($t['estado_trabajo'] ?? '') === 'entregado');
    ?>
    <?php if (!empty($invPendPDF)): ?>
    <div class="alert-dark-warn p-3 mb-4" style="border-left:3px solid #8b5cf6;">
      <i class="fa fa-microscope me-2" style="color:#8b5cf6;"></i>
      Tienes <strong><?= count($invPendPDF) ?></strong> trabajo(s) de investigación con PDF entregado pendiente de tu revisión.
      <a href="#inv" style="color:#a78bfa;font-weight:600;"> Ver trabajos →</a>
    </div>
    <?php endif; ?>

    <!-- ══════════════════════════════════════════════════════
         BLOQUE CES/CACES — Seguimiento de estudiantes
    ══════════════════════════════════════════════════════ -->

    <!-- Alertas CES -->
    <?php if ($cntSinConv > 0): ?>
    <div class="ces-alert ces-alert-red mb-3">
      <i class="fa fa-triangle-exclamation fa-lg"></i>
      <span>
        <strong><?= $cntSinConv ?> estudiante(s)</strong> realizan su práctica en empresa
        <strong>sin convenio vigente</strong>.
      </span>
    </div>
    <?php endif; ?>

    <?php if ($cntSinBit > 0): ?>
    <div class="ces-alert ces-alert-yellow mb-3">
      <i class="fa fa-calendar-xmark fa-lg"></i>
      <span>
        <strong><?= $cntSinBit ?> estudiante(s)</strong> llevan más de
        <strong>14 días sin bitácora</strong>. El seguimiento semanal es obligatorio según normativa.
      </span>
    </div>
    <?php elseif (!empty($estudiantesProgreso)): ?>
    <div class="ces-alert ces-alert-green mb-3">
      <i class="fa fa-circle-check fa-lg"></i>
      <span>Todos tus estudiantes tienen bitácoras recientes. Seguimiento al día. ✓</span>
    </div>
    <?php endif; ?>

    <!-- Tabla CES: progreso por estudiante -->
    <?php if (!empty($estudiantesProgreso)): ?>
    <div class="page-header d-flex justify-content-between align-items-center mb-2">
      <div>
        <h4 style="font-size:15px;">
          <i class="fa fa-chart-line me-2" style="color:#2ea8ff;"></i>
          Seguimiento CES — Mis estudiantes
        </h4>
        <p>Avance de horas, bitácoras y convenio por empresa</p>
      </div>
      <span style="font-size:10px;font-weight:700;padding:3px 10px;border-radius:20px;
                   background:rgba(46,168,255,.1);color:#2ea8ff;border:1px solid rgba(46,168,255,.3);">
        <?= count($estudiantesProgreso) ?> estudiante(s) activo(s)
      </span>
    </div>

    <div class="tbl-wrap mb-4">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>Estudiante</th>
            <th>Carrera</th>
            <th>Empresa</th>
            <th style="text-align:center;">Conv.</th>
            <th style="min-width:130px;">Avance horas</th>
            <th style="text-align:center;">Bitácoras</th>
            <th style="text-align:center;">Últ. bitácora</th>
            <th style="text-align:center;">Estado</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach ($estudiantesProgreso as $ep):
            $pct    = (float)($ep['pct_horas'] ?? 0);
            $pctCol = $pct >= 80 ? '#10b981' : ($pct >= 40 ? '#f59e0b' : '#ef4444');

            // Estado bitácora reciente
            $diasSinBit = null;
            if ($ep['ultima_bitacora']) {
              $diasSinBit = (int)ceil((time() - strtotime($ep['ultima_bitacora'])) / 86400);
            }
            if ($diasSinBit === null) {
              $bitChip = '<span class="bit-chip bit-nunca">Sin envíos</span>';
            } elseif ($diasSinBit > 14) {
              $bitChip = '<span class="bit-chip bit-atras">'.$diasSinBit.'d atrás</span>';
            } else {
              $bitChip = '<span class="bit-chip bit-ok">Al día</span>';
            }
          ?>
          <tr style="<?= ($pct < 50 && ($ep['estado'] ?? '') === 'en_progreso') ? 'background:rgba(239,68,68,.03);' : '' ?>">
            <td>
              <?php if ($pct < 50): ?>
                <span style="display:inline-block;width:7px;height:7px;border-radius:50%;
                             background:#ef4444;margin-right:5px;vertical-align:middle;"></span>
              <?php endif; ?>
              <strong style="font-size:12px;"><?= htmlspecialchars($ep['estudiante']) ?></strong>
            </td>
            <td style="color:#8b949e;font-size:11px;"><?= htmlspecialchars($ep['carrera']) ?></td>
            <td style="font-size:11px;"><?= htmlspecialchars($ep['empresa']) ?></td>

            <!-- Convenio -->
            <td style="text-align:center;">
              <?php if ($ep['tiene_convenio']): ?>
                <span class="conv-chip conv-ok"><i class="fa fa-check"></i> OK</span>
              <?php else: ?>
                <span class="conv-chip conv-no"><i class="fa fa-xmark"></i> N/A</span>
              <?php endif; ?>
            </td>

            <!-- Barra de horas -->
            <td>
              <div style="display:flex;align-items:center;gap:6px;">
                <div class="prog-mini">
                  <div class="prog-mini-fill" style="width:<?= min(100,$pct) ?>%;background:<?= $pctCol ?>;"></div>
                </div>
                <span style="font-size:11px;font-weight:700;color:<?= $pctCol ?>;white-space:nowrap;">
                  <?= (int)$ep['horas_cumplidas'] ?>/<?= (int)$ep['horas_requeridas'] ?>h
                </span>
              </div>
              <div style="font-size:10px;color:<?= $pctCol ?>;margin-top:2px;"><?= $pct ?>%</div>
            </td>

            <!-- Bitácoras pendientes de validar -->
            <td style="text-align:center;">
              <?php if ($ep['bit_pendientes'] > 0): ?>
                <span style="font-weight:700;color:#f59e0b;"><?= $ep['bit_pendientes'] ?> ⏳</span>
              <?php else: ?>
                <span style="color:#10b981;font-weight:700;">✓</span>
              <?php endif; ?>
            </td>

            <!-- Última bitácora -->
            <td style="text-align:center;"><?= $bitChip ?></td>

            <!-- Estado práctica -->
            <td style="text-align:center;">
              <?php
                $stColors = [
                  'aprobado'        => '#2563eb',
                  'en_progreso'     => '#d97706',
                  'informe_enviado' => '#7c3aed',
                ];
                $stLabels = [
                  'aprobado'        => 'Aprobado',
                  'en_progreso'     => 'En progreso',
                  'informe_enviado' => 'Informe enviado',
                ];
                $sc = $stColors[$ep['estado']] ?? '#94a3b8';
                $sl = $stLabels[$ep['estado']]  ?? $ep['estado'];
              ?>
              <span style="font-size:9px;font-weight:700;padding:2px 7px;border-radius:10px;
                           background:<?= $sc ?>18;color:<?= $sc ?>;border:1px solid <?= $sc ?>44;">
                <?= $sl ?>
              </span>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

    <!-- ── BITÁCORAS PENDIENTES ── -->
    <div class="page-header d-flex justify-content-between align-items-center">
      <div>
        <h4 style="font-size:15px;">Bitácoras pendientes de validación</h4>
        <p>Valida u observa las bitácoras directamente desde aquí</p>
      </div>
      <a href="bitacoras.php" class="btn btn-sm btn-outline-secondary">
        Ver todas <i class="fa fa-arrow-right ms-1"></i>
      </a>
    </div>

    <div class="tbl-wrap mb-4">
      <table class="table table-borderless mb-0">
        <thead>
          <tr>
            <th>Estudiante</th>
            <th>Empresa</th>
            <th>Semana</th>
            <th>Horas</th>
            <th>Enviada</th>
            <th>Acciones</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($bitPendientes)): ?>
          <tr>
            <td colspan="6" class="text-center py-5">
              <div style="font-size:28px;margin-bottom:8px;">🎉</div>
              <div style="color:#8b949e;font-size:13px;">¡Sin bitácoras pendientes! Todo al día.</div>
            </td>
          </tr>
          <?php else: foreach ($bitPendientes as $b): ?>
          <tr>
            <td><strong style="font-size:13px;"><?= htmlspecialchars($b['estudiante']) ?></strong></td>
            <td style="font-size:12px;color:#8b949e;"><?= htmlspecialchars($b['empresa']) ?></td>
            <td><strong>Sem. <?= $b['semana_numero'] ?></strong></td>
            <td style="font-weight:600;"><?= $b['horas_semana'] ?>h</td>
            <td style="font-size:12px;color:#8b949e;"><?= date('d/m/Y H:i', strtotime($b['created_at'])) ?></td>
            <td>
              <div class="d-flex gap-1">
                <button class="btn btn-sm btn-success btn-validar-rapido" data-id="<?= $b['id_bitacora'] ?>" title="Validar">
                  <i class="fa fa-check me-1"></i>Validar
                </button>
                <button class="btn btn-sm btn-outline-secondary btn-ver"
                  data-id="<?= $b['id_bitacora'] ?>"
                  data-estudiante="<?= htmlspecialchars($b['estudiante']) ?>"
                  data-semana="<?= $b['semana_numero'] ?>"
                  data-horas="<?= $b['horas_semana'] ?>"
                  data-actividades="<?= htmlspecialchars($b['actividades']) ?>"
                  data-logros="<?= htmlspecialchars($b['logros'] ?? '') ?>"
                  data-dificultades="<?= htmlspecialchars($b['dificultades'] ?? '') ?>">
                  <i class="fa fa-eye"></i>
                </button>
              </div>
            </td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ── INFORMES PENDIENTES ── -->
    <?php if (!empty($informesPendientes)): ?>
    <div class="page-header d-flex justify-content-between align-items-center mb-0 mt-2">
      <div>
        <h4 style="font-size:15px;"><i class="fa fa-file-circle-check me-2" style="color:#f59e0b;"></i>Informes finales por revisar</h4>
        <p>Los estudiantes han enviado su informe y esperan tu revisión</p>
      </div>
      <a href="evaluaciones.php" class="btn btn-sm btn-outline-secondary">
        Ir a Evaluaciones <i class="fa fa-arrow-right ms-1"></i>
      </a>
    </div>
    <div class="tbl-wrap mb-4">
      <table class="table table-borderless mb-0" style="font-size:13px;">
        <thead>
          <tr>
            <th>Estudiante</th>
            <th>Carrera</th>
            <th>Empresa</th>
            <th>Fecha envío</th>
            <th>Acción</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach ($informesPendientes as $inf): ?>
          <tr>
            <td><strong><?= htmlspecialchars($inf['estudiante']) ?></strong></td>
            <td style="font-size:12px;color:#8b949e;"><?= htmlspecialchars($inf['carrera']) ?></td>
            <td style="font-size:12px;color:#8b949e;"><?= htmlspecialchars($inf['empresa']) ?></td>
            <td style="font-size:12px;color:#8b949e;">
              <?= $inf['fecha_entrega'] ? date('d/m/Y', strtotime($inf['fecha_entrega'])) : '—' ?>
            </td>
            <td>
              <a href="evaluaciones.php" class="btn btn-sm btn-outline-secondary">
                <i class="fa fa-file-circle-check me-1" style="color:#f59e0b;"></i>Revisar
              </a>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

    <!-- ── TRABAJOS DE INVESTIGACIÓN ASIGNADOS ── -->
    <?php if ($totalInv > 0): ?>
    <div id="inv" class="page-header d-flex justify-content-between align-items-center mb-0 mt-2">
      <div>
        <h4 style="font-size:15px;">
          <i class="fa fa-microscope me-2" style="color:#8b5cf6;"></i>Trabajos de Investigación
        </h4>
        <p>Estudiantes asignados a ti como tutor de titulación</p>
      </div>
      <span style="font-size:11px;padding:3px 12px;border-radius:20px;background:#f5f3ff;color:#7c3aed;border:1px solid #ddd6fe;font-weight:700;">
        <?= $totalInv ?> estudiante(s)
      </span>
    </div>

    <div class="tbl-wrap mb-4">
      <table class="table table-borderless mb-0" style="font-size:13px;">
        <thead>
          <tr>
            <th>Estudiante</th>
            <th>Carrera</th>
            <th>Tema del trabajo</th>
            <th>Estado titulación</th>
            <th>Estado del trabajo</th>
            <th class="text-center">Nota /100</th>
            <th>Última act.</th>
            <th class="text-center">Acciones</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach ($trabajosInv as $ti):
            $esTrabPend = ($ti['estado_trabajo'] ?? '') === 'entregado';
            // Estado de la titulación
            $estTitColor = match($ti['estado']) {
              'aprobado'  => ['#dcfce7','#15803d','#86efac'],
              'enviada'   => ['#dbeafe','#1d4ed8','#93c5fd'],
              'rechazado' => ['#fee2e2','#dc2626','#fca5a5'],
              default     => ['#f1f5f9','#64748b','#e2e8f0'],
            };
            // Estado del trabajo
            $estTrabLabel = match($ti['estado_trabajo'] ?? '') {
              'entregado'      => ['📄 PDF Entregado','#fee2e2','#dc2626'],
              'aprobado_tutor' => ['✓ Aprobado','#dcfce7','#15803d'],
              'rechazado_tutor'=> ['✗ Rechazado','#fee2e2','#dc2626'],
              default          => ['Sin entregar','#f1f5f9','#94a3b8'],
            };
            $nota100 = $ti['nota_trabajo'] !== null ? round((float)$ti['nota_trabajo'], 1) : null;
          ?>
          <tr style="<?= $esTrabPend ? 'background:rgba(220,38,38,0.04);' : '' ?>">
            <td>
              <?php if ($esTrabPend): ?>
                <span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:#dc2626;margin-right:5px;animation:pulse-red 1.4s infinite;"></span>
              <?php endif; ?>
              <strong><?= htmlspecialchars($ti['estudiante']) ?></strong>
              <div style="font-size:10px;color:#8b949e;"><?= htmlspecialchars($ti['estudiante_email']) ?></div>
              <div style="font-size:10px;color:#8b949e;font-family:monospace;"><?= htmlspecialchars($ti['estudiante_cedula']) ?></div>
            </td>
            <td style="font-size:12px;color:#6b7280;"><?= htmlspecialchars($ti['carrera']) ?></td>
            <td style="font-size:12px;max-width:200px;">
              <?php if ($ti['tema']): ?>
                <span title="<?= htmlspecialchars($ti['tema']) ?>">
                  <?= htmlspecialchars(mb_substr($ti['tema'], 0, 60)) ?><?= mb_strlen($ti['tema']) > 60 ? '…' : '' ?>
                </span>
              <?php else: ?>
                <span style="color:#9ca3af;">Sin tema</span>
              <?php endif; ?>
            </td>
            <td>
              <span style="font-size:11px;padding:2px 10px;border-radius:20px;font-weight:700;
                background:<?= $estTitColor[0] ?>;color:<?= $estTitColor[1] ?>;border:1px solid <?= $estTitColor[2] ?>;">
                <?= ucfirst($ti['estado']) ?>
              </span>
            </td>
            <td>
              <span style="font-size:11px;padding:2px 10px;border-radius:20px;font-weight:700;
                background:<?= $estTrabLabel[1] ?>;color:<?= $estTrabLabel[2] ?>;
                <?= $esTrabPend ? 'border:1.5px solid #dc2626;animation:pulse-border 1.4s infinite;' : '' ?>">
                <?= $estTrabLabel[0] ?>
              </span>
            </td>
            <td class="text-center">
              <?php if ($nota100 !== null): ?>
                <span style="font-size:16px;font-weight:900;color:<?= $nota100 >= 70 ? '#16a34a' : '#dc2626' ?>;">
                  <?= number_format($nota100, 1) ?>
                </span>
                <span style="font-size:10px;color:#9ca3af;">/100</span>
                <?php if ($nota100 < 70): ?>
                  <div style="font-size:9px;color:#dc2626;font-weight:700;">REPROBADO</div>
                <?php endif; ?>
              <?php else: ?>
                <span style="color:#9ca3af;font-size:12px;">—</span>
              <?php endif; ?>
            </td>
            <td style="font-size:11px;color:#6b7280;">
              <?= $ti['updated_at'] ? date('d/m/Y', strtotime($ti['updated_at'])) : '—' ?>
            </td>
            <td class="text-center">
              <div class="d-flex gap-1 justify-content-center">
                <?php if ($ti['pdf_trabajo']): ?>
                <button class="btn btn-sm btn-ver-pdf"
                  style="background:#dc2626;color:#fff;border:none;border-radius:6px;padding:4px 10px;font-size:11px;font-weight:700;"
                  data-id="<?= $ti['id_titulacion'] ?>"
                  data-estudiante="<?= htmlspecialchars($ti['estudiante']) ?>"
                  data-tema="<?= htmlspecialchars($ti['tema'] ?? '') ?>"
                  data-pdf="<?= htmlspecialchars(BASE_URL . '/uploads/trabajos/' . $ti['pdf_trabajo']) ?>"
                  data-nota="<?= $nota100 ?? '' ?>"
                  data-obs="<?= htmlspecialchars($ti['obs_tutor_trabajo'] ?? '') ?>">
                  <i class="fa fa-file-pdf me-1"></i>Ver PDF
                </button>
                <?php endif; ?>
                <?php if ($esTrabPend): ?>
                <button class="btn btn-sm btn-calificar"
                  style="background:#1d4ed8;color:#fff;border:none;border-radius:6px;padding:4px 10px;font-size:11px;font-weight:700;"
                  data-id="<?= $ti['id_titulacion'] ?>"
                  data-estudiante="<?= htmlspecialchars($ti['estudiante']) ?>"
                  data-tema="<?= htmlspecialchars($ti['tema'] ?? '') ?>"
                  data-pdf="<?= $ti['pdf_trabajo'] ? htmlspecialchars(BASE_URL . '/uploads/trabajos/' . $ti['pdf_trabajo']) : '' ?>"
                  data-nota="<?= $nota100 ?? '' ?>"
                  data-obs="<?= htmlspecialchars($ti['obs_tutor_trabajo'] ?? '') ?>">
                  <i class="fa fa-star me-1"></i>Calificar
                </button>
                <?php endif; ?>
              </div>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

    <!-- ── ACCESOS RÁPIDOS ── -->
    <div class="row g-3">
      <div class="col-6 col-lg-3">
        <a href="mis_estudiantes.php" class="stat-card text-decoration-none" style="flex-direction:column;align-items:flex-start;gap:6px;">
          <div style="font-size:20px;">👥</div>
          <div><div style="font-weight:600;font-size:13px;">Mis Estudiantes</div><div class="stat-label"><?= $totalEst ?> activo(s)</div></div>
        </a>
      </div>
      <div class="col-6 col-lg-3">
        <a href="bitacoras.php" class="stat-card text-decoration-none" style="flex-direction:column;align-items:flex-start;gap:6px;">
          <div style="font-size:20px;">📓</div>
          <div><div style="font-weight:600;font-size:13px;">Bitácoras</div><div class="stat-label"><?= $totalBitPend ?> pendiente(s)</div></div>
        </a>
      </div>
      <div class="col-6 col-lg-3">
        <a href="evaluaciones.php" class="stat-card text-decoration-none" style="flex-direction:column;align-items:flex-start;gap:6px;">
          <div style="font-size:20px;">⭐</div>
          <div><div style="font-weight:600;font-size:13px;">Evaluaciones</div><div class="stat-label">Calificar prácticas</div></div>
        </a>
      </div>
      <div class="col-6 col-lg-3">
        <a href="<?= BASE_URL ?>/auth/cambiar_password.php" class="stat-card text-decoration-none" style="flex-direction:column;align-items:flex-start;gap:6px;">
          <div style="font-size:20px;">🔒</div>
          <div><div style="font-weight:600;font-size:13px;">Mi Contraseña</div><div class="stat-label">Cambiar clave</div></div>
        </a>
      </div>
    </div>

    <?php endif; // fin if($tutor) ?>
  </main>
</div>

<!-- ── MODAL VER BITÁCORA ── -->
<div class="modal fade" id="modalBit" tabindex="-1">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="m-titulo">Bitácora</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body">
        <div class="row g-2 mb-3" style="font-size:13px;">
          <div class="col-4">
            <div style="font-size:10px;color:#8b949e;text-transform:uppercase;">Estudiante</div>
            <div id="m-est" style="font-weight:600;"></div>
          </div>
          <div class="col-4">
            <div style="font-size:10px;color:#8b949e;text-transform:uppercase;">Semana</div>
            <div id="m-sem"></div>
          </div>
          <div class="col-4">
            <div style="font-size:10px;color:#8b949e;text-transform:uppercase;">Horas</div>
            <div id="m-hrs" style="font-weight:700;"></div>
          </div>
        </div>
        <hr style="border-color:#30363d;">
        <div class="mb-3">
          <div class="form-label">Actividades</div>
          <div id="m-act" style="background:#0d1117;border:1px solid #30363d;border-radius:8px;padding:12px;font-size:13px;white-space:pre-wrap;line-height:1.7;"></div>
        </div>
        <hr style="border-color:#30363d;">
        <form method="POST" id="formAcc">
          <input type="hidden" name="id_bitacora" id="f-bid">
          <div class="mb-3">
            <label class="form-label">Comentario para el estudiante <small style="color:#8b949e;">(opcional)</small></label>
            <textarea name="comentario" id="f-com" class="form-control" rows="3" placeholder="Retroalimentación, observaciones..."></textarea>
          </div>
          <div class="d-flex gap-2">
            <button type="submit" name="accion" value="validada" class="btn btn-success flex-fill">
              <i class="fa fa-circle-check me-2"></i>Validar
            </button>
            <button type="submit" name="accion" value="observada" class="btn btn-outline-secondary flex-fill">
              <i class="fa fa-message me-2"></i>Observar
            </button>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>

<!-- ── MODAL VER PDF + CALIFICAR ── -->
<div class="modal fade" id="modalPDF" tabindex="-1" style="z-index:1060;">
  <div class="modal-dialog modal-xl modal-dialog-centered">
    <div class="modal-content" style="background:#0d1117;border:1px solid #30363d;border-radius:12px;overflow:hidden;">
      <div class="modal-header" style="background:#161b22;border-bottom:1px solid #30363d;padding:14px 20px;">
        <div>
          <h5 class="modal-title mb-0" style="color:#e6edf3;font-size:14px;font-weight:700;">
            <i class="fa fa-file-pdf me-2" style="color:#dc2626;"></i>
            <span id="mp-titulo">Trabajo de Investigación</span>
          </h5>
          <div id="mp-subtitulo" style="font-size:11px;color:#8b949e;margin-top:2px;"></div>
        </div>
        <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body p-0" style="display:flex;height:82vh;">

        <!-- Panel izquierdo: visor PDF -->
        <div style="flex:1;background:#1a1a2e;border-right:1px solid #30363d;display:flex;flex-direction:column;">
          <div style="padding:10px 14px;background:#161b22;border-bottom:1px solid #30363d;display:flex;gap:8px;align-items:center;">
            <span style="font-size:11px;color:#8b949e;font-weight:600;">DOCUMENTO PDF</span>
            <a id="mp-pdf-link" href="#" target="_blank" class="btn btn-sm ms-auto"
               style="background:#dc2626;color:#fff;font-size:10px;padding:3px 10px;border-radius:6px;text-decoration:none;">
              <i class="fa fa-external-link me-1"></i>Abrir en nueva pestaña
            </a>
          </div>
          <iframe id="mp-iframe" src="" style="flex:1;border:none;width:100%;"></iframe>
        </div>

        <!-- Panel derecho: calificación -->
        <div style="width:320px;display:flex;flex-direction:column;background:#0d1117;">
          <div style="padding:14px 16px;background:#161b22;border-bottom:1px solid #30363d;">
            <div style="font-size:11px;color:#8b949e;font-weight:700;letter-spacing:.5px;text-transform:uppercase;">
              Calificación del Tutor
            </div>
          </div>
          <div style="flex:1;overflow-y:auto;padding:16px;">

            <!-- Nota actual si existe -->
            <div id="mp-nota-actual" style="display:none;margin-bottom:16px;padding:12px;background:#161b22;border-radius:8px;border:1px solid #30363d;text-align:center;">
              <div style="font-size:10px;color:#8b949e;margin-bottom:4px;">NOTA ACTUAL</div>
              <div id="mp-nota-num" style="font-size:28px;font-weight:900;"></div>
              <div style="font-size:10px;color:#8b949e;">/100 puntos</div>
            </div>

            <!-- Alerta mínimo -->
            <div style="background:#3b0000;border:1px solid #dc2626;border-radius:8px;padding:10px 12px;margin-bottom:16px;font-size:12px;color:#fca5a5;">
              <i class="fa fa-circle-info me-1"></i>
              <strong>Mínimo aprobatorio: 70/100</strong><br>
              <span style="font-size:10px;color:#f87171;">Puntaje menor a 70 marca el trabajo como Reprobado.</span>
            </div>

            <form method="POST" id="formCalificar">
              <input type="hidden" name="accion" value="calificar_trabajo">
              <input type="hidden" name="id_titulacion" id="mp-id">

              <div class="mb-3">
                <label style="font-size:11px;color:#8b949e;font-weight:700;letter-spacing:.4px;text-transform:uppercase;display:block;margin-bottom:6px;">
                  Calificación (0 – 100)
                </label>
                <div style="position:relative;">
                  <input type="number" name="nota_trabajo" id="mp-nota-input"
                    min="0" max="100" step="0.5"
                    class="form-control"
                    style="background:#161b22;border:1.5px solid #30363d;color:#e6edf3;font-size:28px;font-weight:900;text-align:center;padding:12px;border-radius:8px;height:64px;"
                    placeholder="00">
                  <span style="position:absolute;right:12px;top:50%;transform:translateY(-50%);color:#8b949e;font-size:12px;">/100</span>
                </div>
                <!-- Barra visual -->
                <div style="margin-top:8px;background:#21262d;border-radius:4px;height:6px;overflow:hidden;">
                  <div id="mp-barra" style="height:100%;width:0%;background:#dc2626;border-radius:4px;transition:width .3s,background .3s;"></div>
                </div>
                <div id="mp-resultado" style="margin-top:6px;font-size:12px;font-weight:700;text-align:center;color:#8b949e;">
                  Ingresa una nota
                </div>
              </div>

              <div class="mb-3">
                <label style="font-size:11px;color:#8b949e;font-weight:700;letter-spacing:.4px;text-transform:uppercase;display:block;margin-bottom:6px;">
                  Observaciones / Comentarios
                </label>
                <textarea name="obs_tutor" id="mp-obs" rows="5"
                  class="form-control"
                  style="background:#161b22;border:1px solid #30363d;color:#e6edf3;font-size:12px;border-radius:8px;resize:vertical;"
                  placeholder="Retroalimentación al estudiante sobre su trabajo de investigación..."></textarea>
              </div>

              <button type="submit" id="mp-submit" class="btn w-100"
                style="background:#1d4ed8;color:#fff;font-weight:700;font-size:13px;padding:10px;border-radius:8px;border:none;">
                <i class="fa fa-paper-plane me-2"></i>Guardar calificación
              </button>
              <div style="margin-top:10px;font-size:10px;color:#6b7280;text-align:center;">
                El estudiante será notificado automáticamente
              </div>
            </form>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<style>
@keyframes pulse-red {
  0%,100%{opacity:1;transform:scale(1);}
  50%{opacity:.5;transform:scale(1.4);}
}
@keyframes pulse-border {
  0%,100%{box-shadow:0 0 0 0 rgba(220,38,38,.4);}
  50%{box-shadow:0 0 0 4px rgba(220,38,38,0);}
}

/* ── WIDGETS CES/CACES ── */
.ces-alert {
  display:flex;align-items:center;gap:10px;
  border-radius:10px;padding:11px 16px;
  margin-bottom:14px;font-size:13px;font-weight:600;
  border:1.5px solid;
}
.ces-alert-red  { background:rgba(220,38,38,.06);border-color:rgba(220,38,38,.25);color:#b91c1c; }
.ces-alert-yellow { background:rgba(245,158,11,.06);border-color:rgba(245,158,11,.3);color:#92400e; }
.ces-alert-green { background:rgba(16,185,129,.06);border-color:rgba(16,185,129,.25);color:#065f46; }

.prog-mini { background:#e9eef5;border-radius:3px;height:5px;overflow:hidden;flex:1; }
.prog-mini-fill { height:5px;border-radius:3px; }

.conv-chip {
  font-size:9px;font-weight:700;padding:2px 7px;
  border-radius:4px;border:1px solid;white-space:nowrap;
}
.conv-ok  { background:rgba(16,185,129,.1);color:#047857;border-color:rgba(16,185,129,.3); }
.conv-no  { background:rgba(220,38,38,.1); color:#b91c1c;border-color:rgba(220,38,38,.3); }

.bit-chip {
  font-size:9px;font-weight:700;padding:2px 7px;
  border-radius:4px;border:1px solid;white-space:nowrap;
}
.bit-ok    { background:rgba(16,185,129,.1);color:#047857;border-color:rgba(16,185,129,.3); }
.bit-atras { background:rgba(245,158,11,.1);color:#92400e;border-color:rgba(245,158,11,.3); }
.bit-nunca { background:rgba(220,38,38,.1); color:#b91c1c;border-color:rgba(220,38,38,.3); }
</style>

<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>
// ── Datos PHP → JS ──────────────────────────────────────────────
var notifPDFs = <?= json_encode(array_values(array_filter($trabajosInv, fn($t) => ($t['estado_trabajo'] ?? '') === 'entregado'))) ?>;
var totalPDFPend = notifPDFs.length;

$(function () {

  // ── INYECTAR NOTIFICACIONES ROJAS EN EL DROPDOWN DEL NAVBAR ──
  if (totalPDFPend > 0) {
    // Esperar a que el dropdown esté en DOM
    setTimeout(function() {
      // Buscar el contenedor de notificaciones (texto "Sin notificaciones nuevas")
      var $noNotif = $(':contains("Sin notificaciones nuevas")').last();
      var $dropMenu = $noNotif.closest('ul, div[class*="dropdown"]');
      if (!$dropMenu.length) $dropMenu = $noNotif.parent();

      // Construir items de notificación
      var html = '';
      notifPDFs.forEach(function(t) {
        var nombre = t.estudiante || '—';
        var tema   = t.tema ? t.tema.substring(0,50) + (t.tema.length>50?'…':'') : 'Sin tema';
        html += '<div style="display:flex;align-items:flex-start;gap:10px;padding:10px 14px;border-bottom:1px solid #f3e8e8;cursor:pointer;background:#fff9f9;" '
              + 'onclick="window.location.href=\'dashboard.php#inv\'">'
              + '<div style="width:32px;height:32px;border-radius:50%;background:#fee2e2;display:flex;align-items:center;justify-content:center;flex-shrink:0;">'
              + '<i class="fa fa-file-pdf" style="color:#dc2626;font-size:14px;"></i></div>'
              + '<div style="flex:1;min-width:0;">'
              + '<div style="font-size:12px;font-weight:700;color:#111;">PDF entregado para revisión</div>'
              + '<div style="font-size:11px;color:#555;margin-top:1px;">' + nombre + '</div>'
              + '<div style="font-size:10px;color:#888;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">' + tema + '</div>'
              + '</div>'
              + '<span style="width:8px;height:8px;border-radius:50%;background:#dc2626;flex-shrink:0;margin-top:4px;"></span>'
              + '</div>';
      });

      // Encabezado especial
      var header = '<div style="padding:8px 14px;background:#fef2f2;border-bottom:2px solid #dc2626;display:flex;align-items:center;gap:8px;">'
        + '<i class="fa fa-bell" style="color:#dc2626;"></i>'
        + '<span style="font-size:12px;font-weight:700;color:#dc2626;">' + totalPDFPend + ' PDF' + (totalPDFPend>1?'s':'') + ' pendiente' + (totalPDFPend>1?'s':'') + ' de calificación</span>'
        + '</div>';

      // Reemplazar "Sin notificaciones nuevas"
      $noNotif.closest('div,li').replaceWith(header + html);

      // Poner badge rojo en el ícono del bell
      var $bell = $('i.fa-bell, i.fa-bell-o, button[id*="notif"], a[id*="notif"]').first();
      if ($bell.length && !$bell.find('+ .badge-notif-red').length) {
        $bell.parent().css('position','relative');
        if (!$('#badge-notif-red').length) {
          $bell.parent().append(
            '<span id="badge-notif-red" style="position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;border-radius:8px;background:#dc2626;color:#fff;font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;line-height:1;padding:0 3px;border:1.5px solid #fff;">'
            + totalPDFPend + '</span>'
          );
        }
      }
    }, 300);
  }

  // ── ABRIR MODAL VER PDF ──────────────────────────────────────
  $(document).on('click', '.btn-ver-pdf', function () {
    var d = $(this).data();
    abrirModalPDF(d);
  });

  $(document).on('click', '.btn-calificar', function () {
    var d = $(this).data();
    abrirModalPDF(d);
    // Scroll al panel de calificación
    setTimeout(function(){ document.getElementById('mp-nota-input').focus(); }, 500);
  });

  function abrirModalPDF(d) {
    $('#mp-titulo').text(d.estudiante || 'Estudiante');
    $('#mp-subtitulo').text(d.tema || 'Sin tema registrado');
    $('#mp-id').val(d.id);
    $('#mp-obs').val(d.obs || '');
    // Iframe PDF
    if (d.pdf) {
      $('#mp-iframe').attr('src', d.pdf);
      $('#mp-pdf-link').attr('href', d.pdf);
    } else {
      $('#mp-iframe').attr('src', '');
      $('#mp-pdf-link').attr('href', '#');
    }
    // Nota actual
    if (d.nota !== '' && d.nota !== undefined && d.nota !== null) {
      var n = parseFloat(d.nota);
      $('#mp-nota-num').text(n.toFixed(1)).css('color', n >= 70 ? '#16a34a' : '#dc2626');
      $('#mp-nota-actual').show();
      $('#mp-nota-input').val(n);
      actualizarBarra(n);
    } else {
      $('#mp-nota-actual').hide();
      $('#mp-nota-input').val('');
      actualizarBarra(0);
    }
    new bootstrap.Modal('#modalPDF').show();
  }

  // Barra de nota en tiempo real
  $('#mp-nota-input').on('input', function() {
    actualizarBarra(parseFloat($(this).val()) || 0);
  });

  function actualizarBarra(n) {
    n = Math.min(100, Math.max(0, n));
    var pct = n;
    var color = n >= 70 ? '#16a34a' : (n >= 50 ? '#f59e0b' : '#dc2626');
    $('#mp-barra').css({width: pct + '%', background: color});
    if (n === 0) {
      $('#mp-resultado').text('Ingresa una nota').css('color','#8b949e');
    } else if (n >= 70) {
      $('#mp-resultado').html('<i class="fa fa-circle-check me-1" style="color:#16a34a;"></i>APROBADO — ' + n.toFixed(1) + '/100').css('color','#16a34a');
      $('#mp-submit').css('background','#16a34a');
    } else {
      $('#mp-resultado').html('<i class="fa fa-circle-xmark me-1" style="color:#dc2626;"></i>REPROBADO — ' + n.toFixed(1) + '/100 (mín. 70)').css('color','#dc2626');
      $('#mp-submit').css('background','#dc2626');
    }
  }

  // ── MODAL BITÁCORA ───────────────────────────────────────────
  $(document).on('click', '.btn-ver', function () {
    var d = $(this).data();
    $('#m-titulo').text('Bitácora — Semana ' + d.semana);
    $('#m-est').text(d.estudiante);
    $('#m-sem').text('Semana ' + d.semana);
    $('#m-hrs').text(d.horas + ' h');
    var act = d.actividades;
    try { act = JSON.parse(act); } catch(e) {}
    if (Array.isArray(act) && act.length) {
      var diasNom = ['','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo'];
      var thS = 'padding:6px 10px;border-bottom:2px solid #30363d;color:#8b949e;font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;background:#161b22;';
      var tbl = '<table style="width:100%;border-collapse:collapse;font-size:12.5px;border:1px solid #30363d;border-radius:8px;overflow:hidden;">'
              + '<thead><tr>'
              + '<th style="' + thS + '">Fecha</th>'
              + '<th style="' + thS + 'text-align:center;">Horas</th>'
              + '<th style="' + thS + '">Actividades</th>'
              + '</tr></thead><tbody>';
      $.each(act, function(i, dia) {
        var feriado = parseInt(dia.horas) === 0;
        var dt = new Date(dia.fecha + 'T12:00:00');
        var diaNom = diasNom[dt.getDay() === 0 ? 7 : dt.getDay()];
        var fechaStr = dia.fecha.split('-').reverse().join('/');
        var rowBg = feriado ? 'background:#1a1500;' : (i%2===0 ? 'background:#0d1117;' : 'background:#161b22;');
        tbl += '<tr style="' + rowBg + '">'
          + '<td style="padding:8px 10px;border-bottom:1px solid #30363d;">'
          +   '<strong style="color:#e6edf3;">' + fechaStr + '</strong>'
          +   '<div style="font-size:10px;color:#8b949e;">' + diaNom + '</div>'
          +   (feriado ? '<span style="font-size:9px;padding:1px 6px;border-radius:4px;background:#f7b93e20;color:#f7b93e;font-weight:700;">FERIADO</span>' : '')
          + '</td>'
          + '<td style="padding:8px 10px;border-bottom:1px solid #30363d;text-align:center;font-weight:700;color:' + (feriado ? '#f7b93e' : '#2ea8ff') + ';">'
          +   (feriado ? '—' : dia.horas + 'h')
          + '</td>'
          + '<td style="padding:8px 10px;border-bottom:1px solid #30363d;color:#e6edf3;">' + (dia.descripcion || '<span style="color:#8b949e;">—</span>') + '</td>'
          + '</tr>';
      });
      tbl += '</tbody></table>';
      $('#m-act').html(tbl);
    } else {
      $('#m-act').text(typeof act === 'string' && act.trim() ? act : '—');
    }
    $('#f-bid').val(d.id);
    $('#f-com').val('');
    new bootstrap.Modal('#modalBit').show();
  });

  // Validar rápido sin modal
  $(document).on('click', '.btn-validar-rapido', function () {
    var $btn = $(this);
    var id   = $btn.data('id');
    if (!confirm('¿Validar esta bitácora sin comentario?')) return;
    $btn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i>');
    var $form = $('<form method="POST">');
    $form.append('<input name="id_bitacora" value="' + id + '">');
    $form.append('<input name="accion" value="validada">');
    $form.append('<input name="comentario" value="">');
    $('body').append($form);
    $form.submit();
  });

});

// Reloj en tiempo real
(function(){
  var dias = ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'];
  function tick() {
    var n  = new Date();
    var hh = String(n.getHours()).padStart(2,'0');
    var mm = String(n.getMinutes()).padStart(2,'0');
    var ss = String(n.getSeconds()).padStart(2,'0');
    var dd = String(n.getDate()).padStart(2,'0');
    var mo = String(n.getMonth()+1).padStart(2,'0');
    var yy = n.getFullYear();
    document.getElementById('tutor-hora').textContent  = hh+':'+mm+':'+ss;
    document.getElementById('tutor-fecha').textContent = dd+'/'+mo+'/'+yy;
    document.getElementById('tutor-dia').textContent   = dias[n.getDay()];
  }
  setInterval(tick, 1000);
  tick();
})();
</script>
</body>
</html>