<?php
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'app.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'auth.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'functions.php';
requireRol(ROL_SECRETARIA);
$idInst = instId();

$db        = getDB();
$user      = currentUser();
$pageTitle = 'Reportes CES / CACES';

// ── Parámetros de filtro ────────────────────────────────────
$tipo   = $_GET['tipo']      ?? 'ces';       // ces | caces | detalle | empresas
$idPer  = (int)($_GET['periodo'] ?? 0);
$idCar  = (int)($_GET['carrera'] ?? 0);
$export = $_GET['export']    ?? '';          // csv

// Catálogos para filtros
$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() . " AND activa=1 ORDER BY nombre")->fetchAll();

// 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; } }

// ════════════════════════════════════════════════════════════
//  REPORTE 1: CES — Horas por carrera (v_horas_por_carrera)
// ════════════════════════════════════════════════════════════
$datosCES = [];
if ($tipo === 'ces') {
    $wInst = $idInst ? "AND c.id_instituto = $idInst" : "";
    $w = $idPer ? "WHERE pa.id_periodo = $idPer $wInst" : ($idInst ? "WHERE c.id_instituto = $idInst" : "");
    $datosCES = $db->query("
        SELECT c.nombre AS carrera, c.horas_minimas, pa.nombre AS periodo,
               COUNT(p.id_practica)                          AS total_estudiantes,
               SUM(p.estado = 'completado')                  AS completados,
               SUM(p.estado = 'en_progreso')                 AS en_progreso,
               SUM(p.estado = 'postulado')                   AS postulados,
               SUM(p.estado = 'rechazado')                   AS rechazados,
               SUM(p.horas_cumplidas >= p.horas_requeridas)  AS horas_ok,
               ROUND(AVG(p.horas_cumplidas), 1)              AS promedio_horas,
               SUM(p.horas_cumplidas)                        AS total_horas,
               ROUND(AVG(p.nota_final), 2)                   AS promedio_nota
        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
        $w
        GROUP BY c.id_carrera, pa.id_periodo
        ORDER BY c.nombre, pa.nombre DESC
    ")->fetchAll();
}

// ════════════════════════════════════════════════════════════
//  REPORTE 2: CACES — Indicadores de calidad
// ════════════════════════════════════════════════════════════
$datosCAC = [];
if ($tipo === 'caces') {
    $w = $idPer ? "AND p.id_periodo = $idPer" : "";
    // JOIN y filtro de instituto para queries simples que no tienen JOIN a carreras
    $wJoinCar = "JOIN estudiantes _ei ON _ei.id_estudiante=p.id_estudiante JOIN carreras _ci ON _ci.id_carrera=_ei.id_carrera";
    $wInstSolo = $idInst ? "AND _ci.id_instituto = $idInst" : "";
    $wInst = $idInst ? "AND c.id_instituto = $idInst" : ""; // para query por_carrera que usa alias c
    $total = (int)$db->query("SELECT COUNT(*) FROM practicas p $wJoinCar WHERE 1=1 $w $wInstSolo")->fetchColumn();
    $datosCAC = [
        'total'        => $total,
        'completados'  => (int)$db->query("SELECT COUNT(*) FROM practicas p $wJoinCar WHERE p.estado='completado' $w $wInstSolo")->fetchColumn(),
        'con_nota'     => (int)$db->query("SELECT COUNT(*) FROM practicas p $wJoinCar WHERE p.nota_final IS NOT NULL $w $wInstSolo")->fetchColumn(),
        'aprobados'    => (int)$db->query("SELECT COUNT(*) FROM practicas p $wJoinCar WHERE p.nota_final >= 7 $w $wInstSolo")->fetchColumn(),
        'horas_ok'     => (int)$db->query("SELECT COUNT(*) FROM practicas p $wJoinCar WHERE p.horas_cumplidas >= p.horas_requeridas $w $wInstSolo")->fetchColumn(),
        'con_informe'  => (int)$db->query("SELECT COUNT(DISTINCT id_practica) FROM informes_finales WHERE 1=1")->fetchColumn(),
        'con_cert'     => (int)$db->query("SELECT COUNT(DISTINCT id_practica) FROM certificados WHERE vigente=1")->fetchColumn(),
        'prom_horas'   => round((float)$db->query("SELECT AVG(horas_cumplidas) FROM practicas p $wJoinCar WHERE 1=1 $w $wInstSolo")->fetchColumn(), 1),
        'prom_nota'    => round((float)$db->query("SELECT AVG(nota_final) FROM practicas p $wJoinCar WHERE nota_final IS NOT NULL $w $wInstSolo")->fetchColumn(), 2),
    ];

    // Por carrera para CACES
    $datosCAC['por_carrera'] = $db->query("
        SELECT c.nombre AS carrera, c.horas_minimas,
               COUNT(p.id_practica)                         AS total,
               SUM(p.estado='completado')                   AS completados,
               SUM(p.horas_cumplidas >= p.horas_requeridas) AS horas_ok,
               ROUND(AVG(p.nota_final),2)                   AS prom_nota,
               SUM(p.nota_final >= 7)                       AS aprobados
        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 $w $wInst
        GROUP BY c.id_carrera ORDER BY c.nombre
    ")->fetchAll();
}

// ════════════════════════════════════════════════════════════
//  REPORTE 3: Nómina detallada (v_resumen_practicas)
// ════════════════════════════════════════════════════════════
$datosDetalle = [];
if ($tipo === 'detalle') {
    $where  = ['1=1']; $params = [];
    if ($idInst) { $where[] = 'c.id_instituto = :inst'; $params[':inst'] = $idInst; }
    if ($idPer) { $where[] = 'pa.id_periodo=:per'; $params[':per'] = $idPer; }
    if ($idCar) { $where[] = 'c.id_carrera=:car';  $params[':car'] = $idCar; }
    $wStr = implode(' AND ', $where);
    $st = $db->prepare("
        SELECT CONCAT(u.apellidos,' ',u.nombres) AS estudiante, u.cedula,
               c.nombre AS carrera, e.razon_social AS empresa,
               pa.nombre AS periodo, p.fecha_inicio, p.fecha_fin,
               p.horas_requeridas, p.horas_cumplidas,
               p.estado, p.nota_final,
               CONCAT(ut.apellidos,' ',ut.nombres) AS tutor
        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 e      ON e.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
        WHERE $wStr ORDER BY u.apellidos, u.nombres
    ");
    $st->execute($params);
    $datosDetalle = $st->fetchAll();

    // ── EXPORTAR CSV ──────────────────────────────────────
    if ($export === 'csv' && !empty($datosDetalle)) {
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="reporte_practicas_' . date('Ymd_His') . '.csv"');
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF)); // BOM UTF-8
        fputcsv($out, ['Estudiante','Cédula','Carrera','Empresa','Período','F. Inicio','F. Fin',
                       'Horas req.','Horas cum.','Estado','Nota final','Tutor'], ';');
        foreach ($datosDetalle as $r) {
            fputcsv($out, [
                $r['estudiante'], $r['cedula'], $r['carrera'], $r['empresa'],
                $r['periodo'], $r['fecha_inicio'] ?? '', $r['fecha_fin'] ?? '',
                $r['horas_requeridas'], $r['horas_cumplidas'],
                $r['estado'], $r['nota_final'] ?? '', $r['tutor'] ?? ''
            ], ';');
        }
        fclose($out); exit;
    }
}

// ════════════════════════════════════════════════════════════
//  REPORTE 4: Empresas participantes
// ════════════════════════════════════════════════════════════
$datosEmpresas = [];
if ($tipo === 'empresas') {
    $wInstEmp = $idInst ? "AND c2.id_instituto = $idInst" : "";
    $w = $idPer ? "WHERE p.id_periodo = $idPer $wInstEmp" : ($idInst ? "WHERE c2.id_instituto = $idInst" : "");
    $datosEmpresas = $db->query("
        SELECT em.razon_social AS empresa, em.sector, em.canton, em.provincia,
               COUNT(p.id_practica)             AS total_practicas,
               SUM(p.estado = 'completado')     AS completadas,
               ROUND(AVG(p.horas_cumplidas), 1) AS prom_horas,
               COUNT(DISTINCT est.id_carrera)   AS carreras_distintas
        FROM practicas p
        JOIN empresas em     ON em.id_empresa    = p.id_empresa
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        JOIN carreras c2     ON c2.id_carrera     = est.id_carrera
        $w
        GROUP BY em.id_empresa
        ORDER BY total_practicas DESC
    ")->fetchAll();
}

$navItems = [
    'ces'      => ['ico'=>'📊','label'=>'Reporte CES',       'desc'=>'Horas por carrera y período'],
    'caces'    => ['ico'=>'🎓','label'=>'Indicadores CACES', 'desc'=>'Tasas de calidad institucional'],
    'detalle'  => ['ico'=>'📋','label'=>'Nómina detallada',  'desc'=>'Listado completo exportable'],
    'empresas' => ['ico'=>'🏢','label'=>'Empresas',          'desc'=>'Participación por empresa'],
];
?>
<?php $paginaActual = 'reportes'; ?>
<!DOCTYPE html>
<html lang="es">
<head><?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'head.php'; ?>
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar.css">
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-secretaria.css">
</head>
<body>
<?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'navbar.php'; ?>

<div class="app-shell">
  <?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'sidebar-secretaria.php'; ?>

  <main class="main-area">
    <!-- Encabezado -->
    <div class="page-header d-flex justify-content-between align-items-start flex-wrap gap-2">
      <div>
        <h4>Reportes CES / CACES</h4>
        <p>Indicadores oficiales para organismos de acreditación y control</p>
      </div>
      <div class="d-flex gap-2 align-items-center">
        <span style="font-size:10px;padding:3px 10px;border-radius:20px;font-weight:700;
                     background:#2ea8ff22;color:#2ea8ff;border:1px solid #2ea8ff44;">CES</span>
        <span style="font-size:10px;padding:3px 10px;border-radius:20px;font-weight:700;
                     background:#3dffa022;color:#3dffa0;border:1px solid #3dffa044;">CACES</span>
      </div>
    </div>

    <!-- Tabs de tipo de reporte -->
    <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?'#1c2230':'#161b22' ?>;
                border:1px solid <?= $tipo===$k?'#2ea8ff':'#30363d' ?>;
                border-radius:10px;padding:10px 16px;transition:.15s;
                color:<?= $tipo===$k?'#2ea8ff':'#8b949e' ?>;">
        <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:.7;"><?= $n['desc'] ?></div>
      </a>
      <?php endforeach; ?>
    </div>

    <!-- Filtros globales -->
    <form method="GET" class="d-flex gap-2 mb-4 flex-wrap align-items-center"
          style="background:#161b22;border:1px solid #30363d;border-radius:10px;padding:14px 18px;">
      <input type="hidden" name="tipo" value="<?= htmlspecialchars($tipo) ?>">
      <div>
        <label class="form-label mb-1">Período académico</label>
        <select name="periodo" class="form-select form-select-sm" style="min-width:140px;">
          <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>
      <?php if (in_array($tipo, ['detalle','ces'])): ?>
      <div>
        <label class="form-label mb-1">Carrera</label>
        <select name="carrera" class="form-select form-select-sm" style="min-width:180px;">
          <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>
      <?php endif; ?>
      <div class="d-flex gap-2 mt-3">
        <button type="submit" class="btn btn-primary btn-sm">
          <i class="fa fa-filter me-1"></i>Aplicar
        </button>
        <?php if ($tipo === 'detalle'): ?>
        <a href="?tipo=detalle&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>&export=csv"
           class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-download me-1"></i>Exportar CSV
        </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>

    <?php if ($idPer): ?>
    <div style="font-size:12px;color:#8b949e;margin-bottom:14px;">
      <i class="fa fa-calendar me-1"></i> Período: <strong style="color:#e6edf3;"><?= htmlspecialchars($perNombre) ?></strong>
      <?php if ($idCar): ?>
        &nbsp;·&nbsp; <i class="fa fa-graduation-cap me-1"></i>
        <strong style="color:#e6edf3;"><?php foreach($carreras as $c) { if($c['id_carrera']==$idCar) echo htmlspecialchars($c['nombre']); } ?></strong>
      <?php endif; ?>
    </div>
    <?php endif; ?>

    <!-- ══════════════════════════════════════════
         REPORTE CES
    ══════════════════════════════════════════ -->
    <?php if ($tipo === 'ces'): ?>
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" id="tabla-reporte">
        <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;">Rechazados</th>
            <th style="text-align:center;">Total horas</th>
            <th style="text-align:center;">Prom. horas</th>
            <th style="text-align:center;">Prom. nota</th>
            <th style="text-align:center;">% Cumpl.</th>
            <th style="text-align:center;">Indicador CES</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosCES)): ?>
          <tr><td colspan="11" 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,'rechazados'=>0,
                      'total_horas'=>0,'horas_ok'=>0];
          foreach ($datosCES as $r):
            $pct = $r['total_estudiantes'] > 0
                ? round($r['completados'] / $r['total_estudiantes'] * 100) : 0;
            $colorPct = $pct >= 80 ? '#3dffa0' : ($pct >= 50 ? '#f7b93e' : '#ff9d93');
            $cesOk    = $pct >= 70 && $r['promedio_horas'] >= $r['horas_minimas'];
            foreach (['total_estudiantes','completados','en_progreso','rechazados','total_horas','horas_ok'] as $k)
              $totales[$k] = ($totales[$k] ?? 0) + (int)$r[$k];
          ?>
          <tr>
            <td>
              <strong style="font-size:13px;"><?= htmlspecialchars($r['carrera']) ?></strong>
              <div style="font-size:10px;color:#8b949e;">Mín. <?= $r['horas_minimas'] ?>h</div>
            </td>
            <td style="font-size:12px;color:#8b949e;"><?= htmlspecialchars($r['periodo']) ?></td>
            <td style="text-align:center;font-weight:700;"><?= $r['total_estudiantes'] ?></td>
            <td style="text-align:center;color:#3dffa0;font-weight:700;"><?= $r['completados'] ?></td>
            <td style="text-align:center;color:#f7b93e;"><?= $r['en_progreso'] ?></td>
            <td style="text-align:center;color:#ff9d93;"><?= $r['rechazados'] ?></td>
            <td style="text-align:center;font-weight:600;"><?= number_format($r['total_horas']) ?>h</td>
            <td style="text-align:center;color:<?= $r['promedio_horas'] >= $r['horas_minimas'] ? '#3dffa0' : '#f7b93e' ?>;font-weight:600;">
              <?= number_format($r['promedio_horas'], 1) ?>h
            </td>
            <td style="text-align:center;"><?= $r['promedio_nota'] ? number_format($r['promedio_nota'],2) : '—' ?></td>
            <td style="min-width:110px;">
              <div style="display:flex;align-items:center;gap:6px;">
                <div style="flex:1;background:#30363d;border-radius:3px;height:6px;">
                  <div style="width:<?= $pct ?>%;height:6px;border-radius:3px;background:<?= $colorPct ?>;"></div>
                </div>
                <span style="font-size:11px;font-weight:700;color:<?= $colorPct ?>;"><?= $pct ?>%</span>
              </div>
            </td>
            <td style="text-align:center;">
              <?php if ($cesOk): ?>
                <span title="Cumple umbral CES (≥70% y prom≥mín.h)"
                      style="font-size:18px;">✅</span>
              <?php else: ?>
                <span title="No cumple umbral CES"
                      style="font-size:18px;">⚠️</span>
              <?php endif; ?>
            </td>
          </tr>
          <?php endforeach; ?>
          <!-- Fila totales -->
          <tr style="background:#1c2230;border-top:2px solid #30363d;">
            <td colspan="2"><strong style="color:#2ea8ff;">TOTALES</strong></td>
            <td style="text-align:center;font-weight:700;color:#2ea8ff;"><?= $totales['total_estudiantes'] ?></td>
            <td style="text-align:center;font-weight:700;color:#3dffa0;"><?= $totales['completados'] ?></td>
            <td style="text-align:center;color:#f7b93e;"><?= $totales['en_progreso'] ?></td>
            <td style="text-align:center;color:#ff9d93;"><?= $totales['rechazados'] ?></td>
            <td style="text-align:center;font-weight:700;"><?= number_format($totales['total_horas']) ?>h</td>
            <td colspan="4"></td>
          </tr>
          <?php endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ══════════════════════════════════════════
         REPORTE CACES
    ══════════════════════════════════════════ -->
    <?php elseif ($tipo === 'caces'): ?>
    <?php $d = $datosCAC; $tot = $d['total'] ?: 1; ?>

    <!-- KPIs institucionales -->
    <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                color:#8b949e;margin-bottom:12px;">Indicadores institucionales CACES</div>
    <div class="row g-3 mb-4">
      <?php
      $kpis = [
        ['val' => $d['total'],       'label' => 'Total prácticas',        'color' => '#2ea8ff', 'ico' => '📋'],
        ['val' => $d['completados'], 'label' => 'Completadas',            'color' => '#3dffa0', 'ico' => '✅'],
        ['val' => round($d['completados']/$tot*100).'%',
                                     'label' => 'Tasa de completitud',    'color' => '#3dffa0', 'ico' => '📈'],
        ['val' => $d['aprobados'],   'label' => 'Aprobados (nota≥7)',     'color' => '#3dffa0', 'ico' => '🎓'],
        ['val' => $d['horas_ok'],    'label' => 'Cumplen horas mínimas', 'color' => '#2ea8ff', 'ico' => '⏱️'],
        ['val' => $d['con_informe'], 'label' => 'Con informe final',      'color' => '#f7b93e', 'ico' => '📄'],
        ['val' => $d['con_cert'],    'label' => 'Con certificado',        'color' => '#c792ea', 'ico' => '🏅'],
        ['val' => $d['prom_horas'].'h','label'=> 'Promedio horas',       'color' => '#2ea8ff', 'ico' => '⏱️'],
        ['val' => $d['prom_nota']?:  '—','label'=>'Promedio nota final', 'color' => '#3dffa0', 'ico' => '📊'],
      ];
      foreach ($kpis as $k): ?>
      <div class="col-6 col-lg-4">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:<?= $k['color'] ?>;font-size:22px;"><?= $k['val'] ?></div>
            <div class="stat-label"><?= $k['label'] ?></div>
          </div>
          <div class="stat-icon" style="font-size:20px;"><?= $k['ico'] ?></div>
        </div>
      </div>
      <?php endforeach; ?>
    </div>

    <!-- Barras de indicadores CACES -->
    <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                color:#8b949e;margin-bottom:12px;">Umbrales de acreditación CACES</div>
    <div class="tbl-wrap p-4 mb-4">
      <?php
      $indicadores = [
        ['label'=>'Tasa de completitud',          'val'=>round($d['completados']/$tot*100), 'umbral'=>70, 'desc'=>'Umbral mínimo CACES: 70%'],
        ['label'=>'Tasa de aprobación (nota≥7)',  'val'=>$d['con_nota']>0?round($d['aprobados']/$d['con_nota']*100):0, 'umbral'=>80, 'desc'=>'Umbral mínimo: 80%'],
        ['label'=>'Cumplimiento de horas',        'val'=>round($d['horas_ok']/$tot*100), 'umbral'=>90, 'desc'=>'Umbral mínimo: 90% de estudiantes'],
        ['label'=>'Documentación completa',       'val'=>round($d['con_informe']/$tot*100), 'umbral'=>95, 'desc'=>'Umbral mínimo: 95%'],
        ['label'=>'Certificación emitida',        'val'=>round($d['con_cert']/$tot*100), 'umbral'=>85, 'desc'=>'Umbral mínimo: 85%'],
      ];
      foreach ($indicadores as $ind):
        $ok = $ind['val'] >= $ind['umbral'];
        $color = $ok ? '#3dffa0' : ($ind['val'] >= $ind['umbral']*0.75 ? '#f7b93e' : '#ff9d93');
      ?>
      <div style="margin-bottom:16px;">
        <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:5px;">
          <div>
            <span style="font-size:13px;font-weight:600;"><?= $ind['label'] ?></span>
            <span style="font-size:10px;color:#8b949e;margin-left:8px;"><?= $ind['desc'] ?></span>
          </div>
          <div style="display:flex;align-items:center;gap:8px;">
            <span style="font-size:14px;font-weight:700;color:<?= $color ?>;"><?= $ind['val'] ?>%</span>
            <span style="font-size:14px;"><?= $ok ? '✅' : '⚠️' ?></span>
          </div>
        </div>
        <div style="background:#30363d;border-radius:6px;height:10px;position:relative;">
          <div style="width:<?= min(100,$ind['val']) ?>%;height:10px;border-radius:6px;background:<?= $color ?>;transition:width .4s;"></div>
          <!-- Línea de umbral -->
          <div style="position:absolute;top:-3px;left:<?= $ind['umbral'] ?>%;width:2px;height:16px;
                       background:#fff;opacity:.4;border-radius:1px;" title="Umbral <?= $ind['umbral'] ?>%"></div>
        </div>
        <div style="font-size:10px;color:#8b949e;margin-top:3px;">
          Umbral requerido: <?= $ind['umbral'] ?>% · Línea blanca = límite CACES
        </div>
      </div>
      <?php endforeach; ?>
    </div>

    <!-- Tabla por carrera CACES -->
    <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                color:#8b949e;margin-bottom:12px;">Desglose por carrera</div>
    <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;">Completados</th>
            <th style="text-align:center;">Horas OK</th>
            <th style="text-align:center;">Aprobados</th>
            <th style="text-align:center;">Prom. nota</th>
            <th style="text-align:center;">CACES</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach ($datosCAC['por_carrera'] as $r):
            $t = $r['total'] ?: 1;
            $pctC = round($r['completados']/$t*100);
            $pctH = round($r['horas_ok']/$t*100);
            $ok   = $pctC >= 70 && $pctH >= 90;
          ?>
          <tr>
            <td><strong style="font-size:13px;"><?= htmlspecialchars($r['carrera']) ?></strong></td>
            <td style="text-align:center;font-weight:700;"><?= $r['total'] ?></td>
            <td style="text-align:center;">
              <span style="color:#3dffa0;font-weight:700;"><?= $r['completados'] ?></span>
              <span style="font-size:10px;color:#8b949e;"> (<?= $pctC ?>%)</span>
            </td>
            <td style="text-align:center;">
              <span style="color:#2ea8ff;font-weight:700;"><?= $r['horas_ok'] ?></span>
              <span style="font-size:10px;color:#8b949e;"> (<?= $pctH ?>%)</span>
            </td>
            <td style="text-align:center;color:#3dffa0;font-weight:700;"><?= $r['aprobados'] ?></td>
            <td style="text-align:center;"><?= $r['prom_nota'] ? number_format($r['prom_nota'],2) : '—' ?></td>
            <td style="text-align:center;font-size:18px;"><?= $ok ? '✅' : '⚠️' ?></td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>

    <!-- ══════════════════════════════════════════
         REPORTE DETALLE (nómina)
    ══════════════════════════════════════════ -->
    <?php elseif ($tipo === 'detalle'): ?>
    <div style="font-size:12px;color:#8b949e;margin-bottom:10px;">
      <?= count($datosDetalle) ?> registro(s) encontrado(s)
    </div>
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" id="tabla-reporte" style="font-size:12px;">
        <thead>
          <tr>
            <th>#</th><th>Estudiante</th><th>Cédula</th><th>Carrera</th>
            <th>Empresa</th><th>Período</th><th>F. Inicio</th><th>F. Fin</th>
            <th style="text-align:center;">Hs. req.</th>
            <th style="text-align:center;">Hs. cum.</th>
            <th>Estado</th>
            <th style="text-align:center;">Nota</th>
            <th>Tutor</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosDetalle)): ?>
          <tr><td colspan="13" class="text-center text-muted py-4">Sin registros para el filtro seleccionado.</td></tr>
          <?php else: foreach ($datosDetalle as $i => $r): ?>
          <tr>
            <td style="color:#8b949e;"><?= $i+1 ?></td>
            <td><strong><?= htmlspecialchars($r['estudiante']) ?></strong></td>
            <td style="font-family:monospace;color:#8b949e;"><?= htmlspecialchars($r['cedula']) ?></td>
            <td><?= htmlspecialchars($r['carrera']) ?></td>
            <td><?= htmlspecialchars($r['empresa']) ?></td>
            <td><?= htmlspecialchars($r['periodo']) ?></td>
            <td><?= formatFecha($r['fecha_inicio']) ?></td>
            <td><?= formatFecha($r['fecha_fin']) ?></td>
            <td style="text-align:center;"><?= $r['horas_requeridas'] ?></td>
            <td style="text-align:center;font-weight:700;color:<?= $r['horas_cumplidas'] >= $r['horas_requeridas'] ? '#3dffa0' : '#f7b93e' ?>;">
              <?= $r['horas_cumplidas'] ?>
            </td>
            <td><?= badgeEstado($r['estado']) ?></td>
            <td style="text-align:center;font-weight:700;color:<?= $r['nota_final'] ? ($r['nota_final']>=7?'#3dffa0':'#ff9d93') : '#8b949e' ?>;">
              <?= $r['nota_final'] ? number_format($r['nota_final'],2) : '—' ?>
            </td>
            <td style="color:#8b949e;"><?= htmlspecialchars($r['tutor'] ?? '—') ?></td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ══════════════════════════════════════════
         REPORTE EMPRESAS
    ══════════════════════════════════════════ -->
    <?php elseif ($tipo === 'empresas'): ?>
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0">
        <thead>
          <tr>
            <th>Empresa</th><th>Sector</th><th>Ubicación</th>
            <th style="text-align:center;">Prácticas</th>
            <th style="text-align:center;">Completadas</th>
            <th style="text-align:center;">Prom. horas</th>
            <th style="text-align:center;">Carreras</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosEmpresas)): ?>
          <tr><td colspan="7" class="text-center text-muted py-4">Sin datos.</td></tr>
          <?php else:
          $sCol = ['publico'=>'#2ea8ff','privado'=>'#3dffa0','mixto'=>'#f7b93e','ong'=>'#c792ea'];
          foreach ($datosEmpresas as $e):
            $sc = $sCol[$e['sector']] ?? '#8b949e';
          ?>
          <tr>
            <td><strong style="font-size:13px;"><?= htmlspecialchars($e['empresa']) ?></strong></td>
            <td>
              <span style="font-size:10px;padding:2px 8px;border-radius:10px;font-weight:700;
                           background:<?= $sc ?>22;color:<?= $sc ?>;border:1px solid <?= $sc ?>44;">
                <?= ucfirst($e['sector']) ?>
              </span>
            </td>
            <td style="font-size:12px;color:#8b949e;">
              <?= htmlspecialchars(implode(', ', array_filter([$e['canton'],$e['provincia']]))) ?: '—' ?>
            </td>
            <td style="text-align:center;font-weight:700;"><?= $e['total_practicas'] ?></td>
            <td style="text-align:center;color:#3dffa0;font-weight:700;"><?= $e['completadas'] ?></td>
            <td style="text-align:center;"><?= number_format($e['prom_horas'],1) ?>h</td>
            <td style="text-align:center;color:#2ea8ff;"><?= $e['carreras_distintas'] ?></td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

  </main>
</div>

<style>
@media print {
  .sidebar,.navbar,form,.page-header .d-flex { display:none!important; }
  .main-area { padding:0!important; }
  body { background:#fff!important; color:#000!important; }
  .tbl-wrap { border:1px solid #ccc!important; }
  .tbl-wrap thead th { background:#eee!important; color:#000!important; }
  .tbl-wrap tbody td { color:#000!important; border-color:#ddd!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>
</body>
</html>