<?php
// modules/gestor_ppp/reportes.php
// Reportes completos del Gestor de Prácticas Pre-Profesionales
// Exporta: CSV compatible Excel (BOM UTF-8) + impresión
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_GESTOR_PPP);
$idInst = instId();

$db        = getDB();
$user      = currentUser();
$pageTitle = 'Reportes PPP';

// ── Catálogos ──────────────────────────────────────────────────────────
$periodos = $db->query(
    "SELECT id_periodo, nombre FROM periodos_academicos WHERE 1=1" . instCond() . " ORDER BY id_periodo DESC"
)->fetchAll();

$carreras = $db->query(
    "SELECT id_carrera, nombre FROM carreras WHERE 1=1" . instCond() . " ORDER BY nombre"
)->fetchAll();

// ── Parámetros GET ─────────────────────────────────────────────────────
$tipo   = $_GET['tipo']    ?? 'calificados';   // calificados | estado | ces | bitacoras
$idPer  = (int)($_GET['periodo'] ?? 0);
$idCar  = (int)($_GET['carrera'] ?? 0);
$export = $_GET['export']  ?? '';              // '' | csv | excel

// Período activo por defecto
if (!$idPer) {
    $pa    = $db->query("SELECT id_periodo FROM periodos_academicos WHERE activo=1" . ($idInst ? " AND id_instituto=$idInst" : "") . " LIMIT 1")->fetch();
    $idPer = $pa ? (int)$pa['id_periodo'] : ($periodos[0]['id_periodo'] ?? 0);
}

$perNombre = '';
foreach ($periodos as $p) {
    if ($p['id_periodo'] == $idPer) { $perNombre = $p['nombre']; break; }
}

// ── Cláusulas WHERE reutilizables ──────────────────────────────────────
$wPer  = $idPer  ? "AND p.id_periodo = $idPer"   : '';
$wCar  = $idCar  ? "AND est.id_carrera = $idCar" : '';
$wInst = $idInst ? "AND c.id_instituto = $idInst"  : '';

// ══════════════════════════════════════════════════════════════════════
//  PESTAÑA 1: NÓMINA DE CALIFICADOS (el core del gestor)
// ══════════════════════════════════════════════════════════════════════
$calificados = [];
if ($tipo === 'calificados') {
    $calificados = $db->query("
        SELECT
            CONCAT(u.apellidos, ' ', u.nombres)     AS estudiante,
            u.cedula,
            u.email,
            c.nombre                                AS carrera,
            em.razon_social                         AS empresa,
            pa.nombre                               AS periodo,
            p.fecha_inicio,
            p.fecha_fin,
            p.horas_requeridas,
            p.horas_cumplidas,
            p.modalidad,
            p.area_practica,
            p.estado,
            p.nota_bitacoras,
            p.nota_informe,
            p.nota_tutor_empresa,
            p.nota_tutor_academico,
            p.nota_final,
            p.fecha_calificacion,
            CONCAT(ug.nombres, ' ', ug.apellidos)   AS calificado_por,
            CONCAT(ut.nombres, ' ', ut.apellidos)   AS tutor_academico
        FROM   practicas p
        JOIN   estudiantes est  ON est.id_estudiante = p.id_estudiante
        JOIN   usuarios u       ON u.id_usuario      = est.id_usuario
        JOIN   carreras c       ON c.id_carrera      = est.id_carrera
        JOIN   empresas em      ON em.id_empresa     = p.id_empresa
        JOIN   periodos_academicos pa ON pa.id_periodo = p.id_periodo
        LEFT JOIN tutores t     ON t.id_tutor        = p.id_tutor
        LEFT JOIN usuarios ut   ON ut.id_usuario     = t.id_usuario
        LEFT JOIN usuarios ug   ON ug.id_usuario     = p.calificado_por
        WHERE  p.estado IN ('calificado','completado')
        $wPer $wCar $wInst
        ORDER  BY u.apellidos, u.nombres
    ")->fetchAll();

    // ── EXPORTAR CSV ──────────────────────────────────────────────────
    if ($export === 'csv' && !empty($calificados)) {
        $filename = 'ppp_calificados_' . date('Ymd_His') . '.csv';
        header('Content-Type: text/csv; charset=utf-8');
        header("Content-Disposition: attachment; filename=\"$filename\"");
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM para Excel
        fputcsv($out, [
            'Apellidos y Nombres', 'Cédula', 'Email', 'Carrera',
            'Empresa', 'Período', 'Modalidad', 'Área',
            'F. Inicio', 'F. Fin', 'Hs. Req.', 'Hs. Cum.',
            'Nota Bitácoras (20%)', 'Nota Informe (25%)',
            'Nota Empresa (30%)', 'Nota Tutor (25%)',
            'NOTA FINAL', 'Estado', 'F. Calificación',
            'Tutor Académico', 'Calificado por'
        ], ';');
        foreach ($calificados as $r) {
            fputcsv($out, [
                $r['estudiante'], $r['cedula'], $r['email'], $r['carrera'],
                $r['empresa'], $r['periodo'],
                $r['modalidad'] ?? '', $r['area_practica'] ?? '',
                $r['fecha_inicio'] ?? '', $r['fecha_fin'] ?? '',
                $r['horas_requeridas'], $r['horas_cumplidas'],
                number_format($r['nota_bitacoras'] ?? 0, 2),
                number_format($r['nota_informe']   ?? 0, 2),
                number_format($r['nota_tutor_empresa']   ?? 0, 2),
                number_format($r['nota_tutor_academico']     ?? 0, 2),
                number_format($r['nota_final']     ?? 0, 2),
                $r['estado'],
                $r['fecha_calificacion'] ?? '',
                $r['tutor_academico'] ?? '',
                $r['calificado_por']  ?? ''
            ], ';');
        }
        fclose($out);
        exit;
    }

    // ── EXPORTAR EXCEL (HTML tabla con cabecera MIME) ──────────────────
    if ($export === 'excel' && !empty($calificados)) {
        $filename = 'ppp_calificados_' . date('Ymd_His') . '.xls';
        header('Content-Type: application/vnd.ms-excel; charset=utf-8');
        header("Content-Disposition: attachment; filename=\"$filename\"");
        echo "\xEF\xBB\xBF"; // BOM
        echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
                     xmlns:x="urn:schemas-microsoft-com:office:excel"
                     xmlns="http://www.w3.org/TR/REC-html40">
              <head><meta charset="UTF-8"></head><body>';
        echo '<table border="1">';
        // Cabecera
        echo '<tr style="background:#1e3a5f;color:#ffffff;font-weight:bold;">';
        foreach ([
            'N°','Apellidos y Nombres','Cédula','Email','Carrera','Empresa',
            'Período','Modalidad','F. Inicio','F. Fin',
            'Hs. Req.','Hs. Cum.',
            'Bitácoras 20%','Informe 25%','Empresa 30%','Tutor 25%',
            'NOTA FINAL','ESTADO','F. Calificación','Tutor Académico'
        ] as $h) {
            echo "<th>$h</th>";
        }
        echo '</tr>';
        $totNota = 0; $cnt = 0;
        foreach ($calificados as $i => $r) {
            $aprobado = ($r['nota_final'] ?? 0) >= 7;
            $bgColor  = $aprobado ? '#e8f5e9' : '#ffebee';
            $ntColor  = $aprobado ? '#2e7d32' : '#c62828';
            echo "<tr style=\"background:$bgColor;\">";
            echo '<td style="text-align:center;">' . ($i + 1) . '</td>';
            echo '<td><b>' . htmlspecialchars($r['estudiante']) . '</b></td>';
            echo '<td style="font-family:monospace;">' . htmlspecialchars($r['cedula']) . '</td>';
            echo '<td>' . htmlspecialchars($r['email']) . '</td>';
            echo '<td>' . htmlspecialchars($r['carrera']) . '</td>';
            echo '<td>' . htmlspecialchars($r['empresa']) . '</td>';
            echo '<td>' . htmlspecialchars($r['periodo']) . '</td>';
            echo '<td>' . htmlspecialchars(ucfirst($r['modalidad'] ?? '')) . '</td>';
            echo '<td>' . ($r['fecha_inicio'] ? date('d/m/Y', strtotime($r['fecha_inicio'])) : '—') . '</td>';
            echo '<td>' . ($r['fecha_fin']    ? date('d/m/Y', strtotime($r['fecha_fin']))    : '—') . '</td>';
            echo '<td style="text-align:center;">' . $r['horas_requeridas'] . '</td>';
            echo '<td style="text-align:center;font-weight:bold;">' . $r['horas_cumplidas'] . '</td>';
            echo '<td style="text-align:center;">' . number_format($r['nota_bitacoras'] ?? 0, 2) . '</td>';
            echo '<td style="text-align:center;">' . number_format($r['nota_informe']   ?? 0, 2) . '</td>';
            echo '<td style="text-align:center;">' . number_format($r['nota_tutor_empresa']   ?? 0, 2) . '</td>';
            echo '<td style="text-align:center;">' . number_format($r['nota_tutor_academico']     ?? 0, 2) . '</td>';
            echo '<td style="text-align:center;font-weight:bold;font-size:14px;color:' . $ntColor . ';">'
                 . number_format($r['nota_final'] ?? 0, 2) . '</td>';
            echo '<td style="text-align:center;">' . strtoupper($r['estado']) . '</td>';
            echo '<td>' . ($r['fecha_calificacion'] ? date('d/m/Y', strtotime($r['fecha_calificacion'])) : '—') . '</td>';
            echo '<td>' . htmlspecialchars($r['tutor_academico'] ?? '—') . '</td>';
            echo '</tr>';
            if ($r['nota_final']) { $totNota += $r['nota_final']; $cnt++; }
        }
        // Fila de totales
        if ($cnt > 0) {
            echo '<tr style="background:#1e3a5f;color:#fff;font-weight:bold;">';
            echo '<td colspan="11" style="text-align:right;">PROMEDIO GENERAL:</td>';
            echo '<td></td>';
            echo '<td colspan="4" style="text-align:center;">Promedio nota final:</td>';
            echo '<td style="text-align:center;font-size:14px;">' . number_format($totNota / $cnt, 2) . '</td>';
            echo '<td colspan="3"></td>';
            echo '</tr>';
        }
        echo '</table></body></html>';
        exit;
    }
}

// ══════════════════════════════════════════════════════════════════════
//  PESTAÑA 2: ESTADO GENERAL (todas las prácticas)
// ══════════════════════════════════════════════════════════════════════
$resumen    = null;
$porEstado  = [];
$porCarrera = [];
if ($tipo === 'estado') {
    $resumen = $db->query("
        SELECT
            COUNT(*)                                      AS total,
            SUM(p.estado = 'postulado')                   AS postulados,
            SUM(p.estado = 'aprobado')                    AS aprobados,
            SUM(p.estado = 'en_progreso')                 AS en_progreso,
            SUM(p.estado IN ('completado','calificado'))  AS finalizados,
            SUM(p.estado = 'rechazado')                   AS rechazados,
            SUM(p.nota_final IS NOT NULL)                 AS calificados,
            ROUND(AVG(CASE WHEN p.nota_final IS NOT NULL THEN p.nota_final END), 2) AS prom_nota,
            SUM(p.nota_final >= 7)                        AS aprobados_nota,
            SUM(p.nota_final < 7 AND p.nota_final IS NOT NULL) AS reprobados_nota
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        WHERE 1=1 $wPer $wCar
    ")->fetch();

    $porEstado = $db->query("
        SELECT p.estado, COUNT(*) AS n
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        WHERE 1=1 $wPer $wCar $wInst
        GROUP BY p.estado
        ORDER BY n DESC
    ")->fetchAll();

    $porCarrera = $db->query("
        SELECT c.nombre AS carrera,
               COUNT(p.id_practica)                            AS total,
               SUM(p.estado IN ('completado','calificado'))    AS finalizados,
               SUM(p.estado = 'en_progreso')                   AS en_progreso,
               SUM(p.nota_final IS NOT NULL)                   AS calificados,
               ROUND(AVG(CASE WHEN p.nota_final IS NOT NULL THEN p.nota_final END), 2) AS prom_nota,
               SUM(p.nota_final >= 7)                          AS aprobados_nota
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        JOIN carreras c      ON c.id_carrera      = est.id_carrera
        WHERE 1=1 $wPer $wCar $wInst
        GROUP BY c.id_carrera
        ORDER BY c.nombre
    ")->fetchAll();
}

// ══════════════════════════════════════════════════════════════════════
//  PESTAÑA 3: REPORTE CES (formato oficial)
// ══════════════════════════════════════════════════════════════════════
$datosCES = [];
if ($tipo === 'ces') {
    $datosCES = $db->query("
        SELECT c.nombre AS carrera, c.horas_minimas,
               pa.nombre AS periodo,
               COUNT(p.id_practica)                             AS total,
               SUM(p.estado IN ('completado','calificado'))     AS completados,
               SUM(p.estado = 'en_progreso')                    AS en_progreso,
               SUM(p.estado = 'rechazado')                      AS rechazados,
               SUM(p.horas_cumplidas >= p.horas_requeridas)     AS horas_ok,
               SUM(p.horas_cumplidas)                           AS total_horas,
               ROUND(AVG(p.horas_cumplidas), 1)                 AS prom_horas,
               SUM(p.nota_final IS NOT NULL)                    AS calificados,
               ROUND(AVG(CASE WHEN p.nota_final IS NOT NULL THEN p.nota_final END), 2) AS prom_nota,
               SUM(p.nota_final >= 7)                           AS aprobados,
               SUM(p.nota_final < 7 AND p.nota_final IS NOT NULL) AS reprobados
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        JOIN carreras c      ON c.id_carrera      = est.id_carrera
        JOIN periodos_academicos pa ON pa.id_periodo = p.id_periodo
        WHERE 1=1 $wPer $wCar $wInst
        GROUP BY c.id_carrera, pa.id_periodo
        ORDER BY c.nombre, pa.nombre DESC
    ")->fetchAll();

    // Exportar CES a CSV
    if ($export === 'csv' && !empty($datosCES)) {
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="ppp_reporte_ces_' . date('Ymd') . '.csv"');
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF) . chr(0xBB) . chr(0xBF));
        fputcsv($out, [
            'Carrera','Período','Horas mínimas','Total matriculados',
            'Completados','En progreso','Rechazados',
            'Cumplen horas','Total horas','Prom. horas',
            'Calificados','Prom. nota','Aprobados','Reprobados',
            '% Completitud','Indicador CES'
        ], ';');
        foreach ($datosCES as $r) {
            $pct   = $r['total'] > 0 ? round($r['completados'] / $r['total'] * 100) : 0;
            $cesOk = $pct >= 70 && $r['prom_horas'] >= $r['horas_minimas'] ? 'CUMPLE' : 'NO CUMPLE';
            fputcsv($out, [
                $r['carrera'], $r['periodo'], $r['horas_minimas'],
                $r['total'], $r['completados'], $r['en_progreso'], $r['rechazados'],
                $r['horas_ok'], $r['total_horas'], $r['prom_horas'],
                $r['calificados'], $r['prom_nota'] ?? 0,
                $r['aprobados'], $r['reprobados'],
                "$pct%", $cesOk
            ], ';');
        }
        fclose($out);
        exit;
    }
}

// ══════════════════════════════════════════════════════════════════════
//  PESTAÑA 4: SEGUIMIENTO BITÁCORAS
// ══════════════════════════════════════════════════════════════════════
$datosBit = [];
if ($tipo === 'bitacoras') {
    $datosBit = $db->query("
        SELECT CONCAT(u.apellidos, ' ', u.nombres) AS estudiante,
               c.nombre AS carrera, em.razon_social AS empresa,
               p.id_practica,
               p.horas_requeridas, p.horas_cumplidas, p.estado AS estado_practica,
               COUNT(b.id_bitacora)          AS total_bit,
               SUM(b.estado='validada')      AS validadas,
               SUM(b.estado='enviada')       AS enviadas,
               SUM(b.estado='observada')     AS observadas,
               SUM(b.estado='borrador')      AS borradores,
               COALESCE(SUM(b.horas_semana),0) AS horas_registradas,
               MAX(b.updated_at)            AS ultima_bitacora
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        JOIN usuarios u      ON u.id_usuario      = est.id_usuario
        JOIN carreras c      ON c.id_carrera      = est.id_carrera
        JOIN empresas em     ON em.id_empresa     = p.id_empresa
        LEFT JOIN bitacoras b ON b.id_practica    = p.id_practica
        WHERE p.estado IN ('aprobado','en_progreso','informe_enviado')
        $wPer $wCar
        GROUP BY p.id_practica
        ORDER BY c.nombre, u.apellidos
    ")->fetchAll();
}

// Tabs de navegación
$navItems = [
    'calificados' => ['ico' => '🏆', 'label' => 'Calificados',  'desc' => 'Nómina con notas · exportable'],
    'estado'      => ['ico' => '📊', 'label' => 'Estado',       'desc' => 'Resumen general por carrera'],
    'ces'         => ['ico' => '🗂️', 'label' => 'CES',          'desc' => 'Reporte oficial · exportable'],
    'bitacoras'   => ['ico' => '📓', 'label' => 'Bitácoras',    'desc' => 'Seguimiento semanal activo'],
];

$stColor = [
    'borrador'        => '#94a3b8',
    'postulado'       => '#2563eb',
    'aprobado'        => '#059669',
    'en_progreso'     => '#d97706',
    'informe_enviado' => '#7c3aed',
    'calificado'      => '#db2777',
    'completado'      => '#059669',
    'rechazado'       => '#dc2626',
];
?>
<?php $paginaActual = 'reportes'; ?>
<!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-gestor-ppp.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-gestor-ppp.php'; ?>

  <!-- MAIN -->
  <main class="main-area">

    <div class="page-header d-flex justify-content-between align-items-start flex-wrap gap-2">
      <div>
        <h4><i class="fa fa-chart-bar me-2" style="color:var(--accent);"></i>Reportes PPP</h4>
        <p>Estadísticas y exportaciones del proceso de prácticas preprofesionales</p>
      </div>
      <div class="d-flex gap-2 align-items-center">
        <span style="font-size:11px;color:var(--text-2);">Período activo:</span>
        <span class="badge-estado st-aprobado"><?= htmlspecialchars($perNombre ?: 'Todos') ?></span>
      </div>
    </div>

    <!-- Tabs -->
    <div class="d-flex gap-2 mb-4 flex-wrap">
      <?php foreach ($navItems as $k => $n): ?>
      <a href="?tipo=<?= $k ?>&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>"
         class="text-decoration-none"
         style="background:<?= $tipo===$k ? 'var(--card-alt)' : 'var(--card)' ?>;
                border:1px solid <?= $tipo===$k ? 'var(--accent)' : 'var(--border)' ?>;
                border-radius:var(--r-lg); padding:10px 16px; transition:.15s;
                color:<?= $tipo===$k ? 'var(--accent)' : 'var(--text-2)' ?>;">
        <div style="font-size:18px; margin-bottom:2px;"><?= $n['ico'] ?></div>
        <div style="font-size:12px; font-weight:700;"><?= $n['label'] ?></div>
        <div style="font-size:10px; opacity:.65;"><?= $n['desc'] ?></div>
      </a>
      <?php endforeach; ?>
    </div>

    <!-- Filtros -->
    <form method="GET" class="d-flex gap-2 mb-4 flex-wrap align-items-end"
          style="background:var(--card); border:1px solid var(--border);
                 border-radius:var(--r-lg); padding:14px 18px;">
      <input type="hidden" name="tipo" value="<?= htmlspecialchars($tipo) ?>">

      <div>
        <label class="form-label">Período académico</label>
        <select name="periodo" class="form-select form-select-sm" style="min-width:160px;">
          <option value="0">Todos los períodos</option>
          <?php foreach ($periodos as $p): ?>
          <option value="<?= $p['id_periodo'] ?>" <?= $idPer==$p['id_periodo']?'selected':'' ?>>
            <?= htmlspecialchars($p['nombre']) ?>
          </option>
          <?php endforeach; ?>
        </select>
      </div>

      <div>
        <label class="form-label">Carrera</label>
        <select name="carrera" class="form-select form-select-sm" style="min-width:200px;">
          <option value="0">Todas las carreras</option>
          <?php foreach ($carreras as $c): ?>
          <option value="<?= $c['id_carrera'] ?>" <?= $idCar==$c['id_carrera']?'selected':'' ?>>
            <?= htmlspecialchars($c['nombre']) ?>
          </option>
          <?php endforeach; ?>
        </select>
      </div>

      <div class="d-flex gap-2">
        <button type="submit" class="btn btn-primary btn-sm">
          <i class="fa fa-filter me-1"></i>Aplicar
        </button>
        <?php if ($tipo === 'calificados'): ?>
        <a href="?tipo=calificados&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>&export=excel"
           class="btn btn-sm" style="background:#1e6f1e;color:#fff;border:none;">
          <i class="fa fa-file-excel me-1"></i>Excel
        </a>
        <a href="?tipo=calificados&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>&export=csv"
           class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-download me-1"></i>CSV
        </a>
        <?php elseif ($tipo === 'ces'): ?>
        <a href="?tipo=ces&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>&export=csv"
           class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-download me-1"></i>CSV CES
        </a>
        <?php endif; ?>
        <button type="button" onclick="window.print()" class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-print me-1"></i>Imprimir
        </button>
      </div>
    </form>

    <!-- ════════════════════════════════════════════════════════
         TAB 1: NÓMINA DE CALIFICADOS
    ════════════════════════════════════════════════════════ -->
    <?php if ($tipo === 'calificados'): ?>

    <?php
    $totNota = 0; $cntNota = 0; $aprobados = 0; $reprobados = 0;
    foreach ($calificados as $r) {
        if ($r['nota_final'] !== null) {
            $totNota += $r['nota_final']; $cntNota++;
            if ($r['nota_final'] >= 7) $aprobados++; else $reprobados++;
        }
    }
    $promGlobal = $cntNota > 0 ? round($totNota / $cntNota, 2) : null;
    ?>

    <!-- Mini KPIs -->
    <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:var(--accent);"><?= count($calificados) ?></div><div class="stat-label">Calificados</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:var(--green);"><?= $aprobados ?></div><div class="stat-label">Aprobados (≥ 7)</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:var(--red);"><?= $reprobados ?></div><div class="stat-label">Reprobados (< 7)</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:<?= $promGlobal ? ($promGlobal>=7?'var(--green)':'var(--red)') : 'var(--text-2)' ?>;">
              <?= $promGlobal ? number_format($promGlobal, 2) : '—' ?>
            </div>
            <div class="stat-label">Promedio general</div>
          </div>
          <div class="stat-icon">📊</div>
        </div>
      </div>
    </div>

    <!-- Tabla de calificados -->
    <div style="font-size:12px; color:var(--text-2); margin-bottom:8px;">
      <?= count($calificados) ?> estudiante(s) calificado(s)
      <?= $perNombre ? "· $perNombre" : '' ?>
    </div>

    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>#</th>
            <th>Estudiante</th>
            <th>Carrera</th>
            <th>Empresa</th>
            <th style="text-align:center;">Horas</th>
            <th style="text-align:center; font-size:10px;">Bitácoras<br>20%</th>
            <th style="text-align:center; font-size:10px;">Informe<br>25%</th>
            <th style="text-align:center; font-size:10px;">Empresa<br>30%</th>
            <th style="text-align:center; font-size:10px;">Tutor<br>25%</th>
            <th style="text-align:center; font-weight:800; font-size:13px;">NOTA</th>
            <th style="text-align:center;">Estado</th>
            <th>F. Calificación</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($calificados)): ?>
          <tr><td colspan="12" class="text-center text-muted py-5">
            No hay estudiantes calificados con los filtros seleccionados.
          </td></tr>
          <?php else: foreach ($calificados as $i => $r):
            $nota   = $r['nota_final'];
            $ntColor = $nota ? ($nota >= 7 ? 'var(--green)' : 'var(--red)') : 'var(--text-2)';
            $aprueba = $nota && $nota >= 7;
          ?>
          <tr style="border-left:3px solid <?= $aprueba ? 'var(--green)' : ($nota ? 'var(--red)' : 'var(--border)') ?>;">
            <td style="color:var(--text-2);"><?= $i + 1 ?></td>
            <td>
              <strong><?= htmlspecialchars($r['estudiante']) ?></strong>
              <div style="font-size:10px;color:var(--text-2);font-family:monospace;"><?= htmlspecialchars($r['cedula']) ?></div>
            </td>
            <td style="font-size:11px;color:var(--text-2);"><?= htmlspecialchars($r['carrera']) ?></td>
            <td style="font-size:11px;"><?= htmlspecialchars($r['empresa']) ?></td>
            <td style="text-align:center;">
              <span style="font-weight:700; color:<?= $r['horas_cumplidas'] >= $r['horas_requeridas'] ? 'var(--green)' : 'var(--yellow)' ?>;">
                <?= $r['horas_cumplidas'] ?>
              </span>
              <span style="color:var(--text-2);">/<?= $r['horas_requeridas'] ?></span>
            </td>
            <td style="text-align:center;"><?= $r['nota_bitacoras'] ? number_format($r['nota_bitacoras'], 1) : '—' ?></td>
            <td style="text-align:center;"><?= $r['nota_informe']   ? number_format($r['nota_informe'],   1) : '—' ?></td>
            <td style="text-align:center;"><?= $r['nota_tutor_empresa']   ? number_format($r['nota_tutor_empresa'],   1) : '—' ?></td>
            <td style="text-align:center;"><?= $r['nota_tutor_academico']     ? number_format($r['nota_tutor_academico'],     1) : '—' ?></td>
            <td style="text-align:center;">
              <span style="font-size:16px; font-weight:800; color:<?= $ntColor ?>;">
                <?= $nota ? number_format($nota, 2) : '—' ?>
              </span>
              <?php if ($nota): ?>
              <div style="font-size:9px; font-weight:700; color:<?= $ntColor ?>; text-transform:uppercase; letter-spacing:.5px;">
                <?= $aprueba ? 'APROBADO' : 'REPROBADO' ?>
              </div>
              <?php endif; ?>
            </td>
            <td style="text-align:center;">
              <span class="badge-estado st-<?= $r['estado'] ?>"><?= $r['estado'] ?></span>
            </td>
            <td style="font-size:11px;color:var(--text-2);">
              <?= $r['fecha_calificacion'] ? date('d/m/Y', strtotime($r['fecha_calificacion'])) : '—' ?>
            </td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
        <?php if ($cntNota > 0): ?>
        <tfoot>
          <tr style="background:var(--card-alt);border-top:2px solid var(--border);">
            <td colspan="9" style="text-align:right;font-weight:700;color:var(--text-2);">
              Promedio general (<?= $cntNota ?> calificados):
            </td>
            <td style="text-align:center;font-size:18px;font-weight:800;
                        color:<?= $promGlobal >= 7 ? 'var(--green)' : 'var(--red)' ?>;">
              <?= number_format($promGlobal, 2) ?>
            </td>
            <td colspan="2"></td>
          </tr>
        </tfoot>
        <?php endif; ?>
      </table>
    </div>

    <!-- Desglose de notas por componente -->
    <?php if (!empty($calificados) && $cntNota > 0):
      $avgBit = round(array_sum(array_column($calificados, 'nota_bitacoras')) / $cntNota, 2);
      $avgInf = round(array_sum(array_column($calificados, 'nota_informe'))   / $cntNota, 2);
      $avgEmp = round(array_sum(array_column($calificados, 'nota_tutor_empresa'))   / $cntNota, 2);
      $avgTut = round(array_sum(array_column($calificados, 'nota_tutor_academico'))     / $cntNota, 2);
    ?>
    <div class="tbl-wrap p-4 mt-4">
      <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                  color:var(--text-2);margin-bottom:14px;">Promedio por componente de evaluación</div>
      <div class="row g-3">
        <?php foreach ([
          ['Bitácoras', '20%', $avgBit, '#4fc3f7'],
          ['Informe Final', '25%', $avgInf, '#ab47bc'],
          ['Evaluación Empresa', '30%', $avgEmp, '#ff7043'],
          ['Evaluación Tutor', '25%', $avgTut, '#66bb6a'],
        ] as [$lbl, $peso, $avg, $color]):
          $barW = round($avg / 10 * 100);
        ?>
        <div class="col-6 col-lg-3">
          <div style="background:var(--card-alt);border-radius:var(--r-lg);padding:14px;border:1px solid var(--border);">
            <div style="font-size:10px;color:var(--text-2);text-transform:uppercase;letter-spacing:.5px;">
              <?= $lbl ?> <span style="color:<?= $color ?>;">·  <?= $peso ?></span>
            </div>
            <div style="font-size:24px;font-weight:800;color:<?= $color ?>;margin:6px 0;">
              <?= number_format($avg, 2) ?>
            </div>
            <div style="background:var(--border);border-radius:4px;height:6px;">
              <div style="width:<?= $barW ?>%;height:6px;border-radius:4px;background:<?= $color ?>;"></div>
            </div>
          </div>
        </div>
        <?php endforeach; ?>
      </div>
    </div>
    <?php endif; ?>

    <!-- ════════════════════════════════════════════════════════
         TAB 2: ESTADO GENERAL
    ════════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'estado' && $resumen): ?>
    <?php $tot = max(1, $resumen['total']); ?>

    <div class="row g-3 mb-4">
      <?php
      $kpis = [
        ['v' => $resumen['total'],       'l' => 'Total prácticas',    'ico' => '📋', 'c' => 'var(--accent)'],
        ['v' => $resumen['en_progreso'], 'l' => 'En progreso',        'ico' => '⚡', 'c' => 'var(--yellow)'],
        ['v' => $resumen['finalizados'], 'l' => 'Finalizadas',        'ico' => '✅', 'c' => 'var(--green)'],
        ['v' => $resumen['calificados'], 'l' => 'Con nota',           'ico' => '🏆', 'c' => '#ec4899'],
        ['v' => $resumen['aprobados_nota'], 'l' => 'Aprobados (≥ 7)','ico' => '🎓', 'c' => 'var(--green)'],
        ['v' => $resumen['prom_nota'] ?: '—', 'l' => 'Prom. nota',   'ico' => '📊', 'c' => 'var(--accent)'],
      ];
      foreach ($kpis as $k): ?>
      <div class="col-6 col-lg-4">
        <div class="stat-card">
          <div><div class="stat-num" style="color:<?= $k['c'] ?>;"><?= $k['v'] ?></div><div class="stat-label"><?= $k['l'] ?></div></div>
          <div class="stat-icon"><?= $k['ico'] ?></div>
        </div>
      </div>
      <?php endforeach; ?>
    </div>

    <!-- Por estado -->
    <div class="tbl-wrap p-4 mb-4">
      <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--text-2);margin-bottom:14px;">
        Distribución por estado
      </div>
      <div class="d-flex flex-wrap gap-3">
        <?php foreach ($porEstado as $e):
          $c   = $stColor[$e['estado']] ?? 'var(--text-2)';
          $pct = round($e['n'] / $tot * 100);
        ?>
        <div style="min-width:130px;">
          <div style="display:flex;justify-content:space-between;margin-bottom:4px;">
            <span class="badge-estado st-<?= $e['estado'] ?>"><?= $e['estado'] ?></span>
            <span style="font-weight:700;font-size:13px;color:<?= $c ?>;"><?= $e['n'] ?></span>
          </div>
          <div style="background:var(--border);border-radius:4px;height:6px;">
            <div style="width:<?= $pct ?>%;height:6px;border-radius:4px;background:<?= $c ?>;"></div>
          </div>
          <div style="font-size:10px;color:var(--text-2);margin-top:2px;"><?= $pct ?>%</div>
        </div>
        <?php endforeach; ?>
      </div>
    </div>

    <!-- Por carrera -->
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0">
        <thead>
          <tr>
            <th>Carrera</th>
            <th style="text-align:center;">Total</th>
            <th style="text-align:center;">Finalizadas</th>
            <th style="text-align:center;">En progreso</th>
            <th style="text-align:center;">Calificados</th>
            <th style="text-align:center;">Prom. nota</th>
            <th style="text-align:center;">Aprobados</th>
            <th style="text-align:center;">% Completitud</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($porCarrera)): ?>
          <tr><td colspan="8" class="text-center text-muted py-4">Sin datos para el filtro seleccionado.</td></tr>
          <?php else: foreach ($porCarrera as $r):
            $pct   = $r['total'] > 0 ? round($r['finalizados'] / $r['total'] * 100) : 0;
            $cpct  = $pct >= 80 ? 'var(--green)' : ($pct >= 50 ? 'var(--yellow)' : 'var(--red)');
          ?>
          <tr>
            <td><strong><?= htmlspecialchars($r['carrera']) ?></strong></td>
            <td style="text-align:center;font-weight:700;"><?= $r['total'] ?></td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $r['finalizados'] ?></td>
            <td style="text-align:center;color:var(--yellow);"><?= $r['en_progreso'] ?></td>
            <td style="text-align:center;color:#ec4899;font-weight:700;"><?= $r['calificados'] ?></td>
            <td style="text-align:center;">
              <?php if ($r['prom_nota']): ?>
              <span style="font-weight:700;color:<?= $r['prom_nota']>=7?'var(--green)':'var(--red)' ?>;">
                <?= number_format($r['prom_nota'], 2) ?>
              </span>
              <?php else: ?> — <?php endif; ?>
            </td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $r['aprobados_nota'] ?></td>
            <td style="min-width:120px;">
              <div style="display:flex;align-items:center;gap:6px;">
                <div style="flex:1;background:var(--border);border-radius:3px;height:6px;">
                  <div style="width:<?= $pct ?>%;height:6px;border-radius:3px;background:<?= $cpct ?>;"></div>
                </div>
                <span style="font-size:11px;font-weight:700;color:<?= $cpct ?>;"><?= $pct ?>%</span>
              </div>
            </td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ════════════════════════════════════════════════════════
         TAB 3: CES
    ════════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'ces'): ?>
    <div style="font-size:12px;color:var(--text-2);margin-bottom:10px;">
      <?= count($datosCES) ?> fila(s) · Indicador CES: ≥ 70% completitud y horas promedio ≥ mínimo
    </div>
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>Carrera</th><th>Período</th>
            <th style="text-align:center;">Total</th>
            <th style="text-align:center;">Completados</th>
            <th style="text-align:center;">En progreso</th>
            <th style="text-align:center;">Total horas</th>
            <th style="text-align:center;">Prom. horas</th>
            <th style="text-align:center;">Calificados</th>
            <th style="text-align:center;">Prom. nota</th>
            <th style="text-align:center;">Aprobados</th>
            <th style="text-align:center;">% Cumpl.</th>
            <th style="text-align:center;">CES</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosCES)): ?>
          <tr><td colspan="12" class="text-center text-muted py-5">Sin datos para el filtro seleccionado.</td></tr>
          <?php else:
          $totales = ['total'=>0,'completados'=>0,'en_progreso'=>0,'total_horas'=>0,'calificados'=>0,'aprobados'=>0];
          foreach ($datosCES as $r):
            $pct   = $r['total'] > 0 ? round($r['completados'] / $r['total'] * 100) : 0;
            $cpct  = $pct >= 80 ? 'var(--green)' : ($pct >= 50 ? 'var(--yellow)' : 'var(--red)');
            $cesOk = $pct >= 70 && $r['prom_horas'] >= $r['horas_minimas'];
            foreach (['total','completados','en_progreso','total_horas','calificados','aprobados'] as $k)
              $totales[$k] += (int)$r[$k];
          ?>
          <tr>
            <td>
              <strong><?= htmlspecialchars($r['carrera']) ?></strong>
              <div style="font-size:10px;color:var(--text-2);">Mín. <?= $r['horas_minimas'] ?>h</div>
            </td>
            <td style="color:var(--text-2);"><?= htmlspecialchars($r['periodo']) ?></td>
            <td style="text-align:center;font-weight:700;"><?= $r['total'] ?></td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $r['completados'] ?></td>
            <td style="text-align:center;color:var(--yellow);"><?= $r['en_progreso'] ?></td>
            <td style="text-align:center;font-weight:600;"><?= number_format($r['total_horas']) ?>h</td>
            <td style="text-align:center;font-weight:600;
                        color:<?= $r['prom_horas'] >= $r['horas_minimas'] ? 'var(--green)' : 'var(--yellow)' ?>;">
              <?= number_format($r['prom_horas'], 1) ?>h
            </td>
            <td style="text-align:center;color:#ec4899;font-weight:700;"><?= $r['calificados'] ?></td>
            <td style="text-align:center;">
              <?php if ($r['prom_nota']): ?>
              <span style="font-weight:700;color:<?= $r['prom_nota']>=7?'var(--green)':'var(--red)' ?>;">
                <?= number_format($r['prom_nota'], 2) ?>
              </span>
              <?php else: ?>—<?php endif; ?>
            </td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $r['aprobados'] ?></td>
            <td style="min-width:100px;">
              <div style="display:flex;align-items:center;gap:6px;">
                <div style="flex:1;background:var(--border);border-radius:3px;height:6px;">
                  <div style="width:<?= $pct ?>%;height:6px;border-radius:3px;background:<?= $cpct ?>;"></div>
                </div>
                <span style="font-size:11px;font-weight:700;color:<?= $cpct ?>;"><?= $pct ?>%</span>
              </div>
            </td>
            <td style="text-align:center;font-size:18px;"><?= $cesOk ? '✅' : '⚠️' ?></td>
          </tr>
          <?php endforeach; ?>
          <tr style="background:var(--card-alt);border-top:2px solid var(--border);">
            <td colspan="2"><strong style="color:var(--accent);">TOTALES</strong></td>
            <td style="text-align:center;font-weight:700;color:var(--accent);"><?= $totales['total'] ?></td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $totales['completados'] ?></td>
            <td style="text-align:center;color:var(--yellow);"><?= $totales['en_progreso'] ?></td>
            <td style="text-align:center;font-weight:700;"><?= number_format($totales['total_horas']) ?>h</td>
            <td></td>
            <td style="text-align:center;color:#ec4899;font-weight:700;"><?= $totales['calificados'] ?></td>
            <td></td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $totales['aprobados'] ?></td>
            <td colspan="2"></td>
          </tr>
          <?php endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ════════════════════════════════════════════════════════
         TAB 4: BITÁCORAS
    ════════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'bitacoras'): ?>
    <div style="font-size:12px;color:var(--text-2);margin-bottom:10px;">
      <?= count($datosBit) ?> estudiante(s) con práctica activa
    </div>
    <div class="tbl-wrap">
      <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;">Total</th>
            <th style="text-align:center;">Validadas</th>
            <th style="text-align:center;">Pendientes</th>
            <th style="text-align:center;">Observadas</th>
            <th style="text-align:center;">Horas reg.</th>
            <th style="text-align:center;">Progreso</th>
            <th>Última bit.</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosBit)): ?>
          <tr><td colspan="10" class="text-center text-muted py-5">Sin prácticas activas con los filtros seleccionados.</td></tr>
          <?php else: foreach ($datosBit as $r):
            $pct  = $r['horas_requeridas'] > 0
                ? min(100, round($r['horas_cumplidas'] / $r['horas_requeridas'] * 100)) : 0;
            $pCol = $pct >= 80 ? 'var(--green)' : ($pct >= 40 ? 'var(--yellow)' : 'var(--red)');
            $alerta = ($r['enviadas'] > 0 || $r['observadas'] > 0);
          ?>
          <tr <?= $alerta ? 'style="border-left:3px solid var(--yellow);"' : '' ?>>
            <td>
              <strong><?= htmlspecialchars($r['estudiante']) ?></strong>
              <?php if ($alerta): ?>
              <span style="font-size:10px;color:var(--yellow);margin-left:4px;">⚠️</span>
              <?php endif; ?>
            </td>
            <td style="color:var(--text-2);"><?= htmlspecialchars($r['carrera']) ?></td>
            <td style="color:var(--text-2);"><?= htmlspecialchars($r['empresa']) ?></td>
            <td style="text-align:center;font-weight:700;"><?= $r['total_bit'] ?></td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $r['validadas'] ?></td>
            <td style="text-align:center;color:var(--accent);"><?= $r['enviadas'] ?></td>
            <td style="text-align:center;color:var(--yellow);"><?= $r['observadas'] ?></td>
            <td style="text-align:center;font-weight:600;"><?= $r['horas_registradas'] ?>h</td>
            <td style="min-width:110px;">
              <div style="display:flex;align-items:center;gap:6px;">
                <div style="flex:1;background:var(--border);border-radius:3px;height:6px;">
                  <div style="width:<?= $pct ?>%;height:6px;border-radius:3px;background:<?= $pCol ?>;"></div>
                </div>
                <span style="font-size:11px;font-weight:700;color:<?= $pCol ?>;"><?= $pct ?>%</span>
              </div>
              <div style="font-size:10px;color:var(--text-2);">
                <?= $r['horas_cumplidas'] ?>/<?= $r['horas_requeridas'] ?>h
              </div>
            </td>
            <td style="color:var(--text-2);">
              <?= $r['ultima_bitacora'] ? date('d/m/Y', strtotime($r['ultima_bitacora'])) : '—' ?>
            </td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

  </main>
</div>

<style>
@media print {
  .sidebar, .navbar, form, .d-flex.gap-2.mb-4 { display:none !important; }
  .main-area { padding: 0 !important; }
  .tbl-wrap { border: 1px solid #ccc !important; box-shadow: none !important; }
  body { background: #fff !important; color: #000 !important; }
  .stat-card { border: 1px solid #ccc !important; }
}
</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>var BASE_URL = '<?= BASE_URL ?>';</script>
<script src="<?= BASE_URL ?>/assets/js/sigvp.js"></script>
</body>
</html>