<?php
// modules/coordinador/reportes.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_COORDINADOR);

$db        = getDB();
$user      = currentUser();
$pageTitle = 'Reportes — Coordinador';
$idInst    = instId(); // multi-tenant

// ── Coordinador y sus carreras asignadas ────────────────────
$coord = $db->prepare("SELECT id_coordinador FROM coordinadores WHERE id_usuario = :uid");
$coord->execute([':uid' => $user['id']]);
$coordRow  = $coord->fetch();
$idCoord   = $coordRow ? (int)$coordRow['id_coordinador'] : 0;

// Carreras que gestiona este coordinador
$misCarreras = $db->prepare("
    SELECT c.id_carrera, c.nombre
    FROM coordinador_carrera cc
    JOIN carreras c ON c.id_carrera = cc.id_carrera
    WHERE cc.id_coordinador = :cid
    ORDER BY c.nombre
");
$misCarreras->execute([':cid' => $idCoord]);
$misCarreras = $misCarreras->fetchAll();
$idsCarreras = array_column($misCarreras, 'id_carrera');     // [1, 2, 3 …]

// Si no tiene carreras asignadas, usa todas las del instituto (fallback seguro)
if ($idsCarreras) {
    $inCarreras = implode(',', array_map('intval', $idsCarreras));
} elseif ($idInst) {
    // Fallback: todas las carreras del instituto del coordinador
    $stFb = $db->prepare("SELECT id_carrera FROM carreras WHERE activa=1 AND id_instituto=:inst");
    $stFb->execute([':inst' => $idInst]);
    $fbIds = array_column($stFb->fetchAll(), 'id_carrera');
    $inCarreras = $fbIds ? implode(',', array_map('intval', $fbIds)) : '0';
} else {
    $inCarreras = '0';
}

// ── Parámetros GET ───────────────────────────────────────────
$tipo   = $_GET['tipo']    ?? 'resumen';   // resumen | ces | bitacoras | detalle | empresas
$idPer  = (int)($_GET['periodo'] ?? 0);
$idCar  = (int)($_GET['carrera'] ?? 0);
$export = $_GET['export']  ?? '';

// Asegura que la carrera filtrada pertenezca a este coordinador
if ($idCar && $idsCarreras && !in_array($idCar, $idsCarreras)) {
    $idCar = 0;
}

// ── Catálogos ────────────────────────────────────────────────
$periodos = $db->query("SELECT id_periodo, nombre FROM periodos_academicos WHERE 1=1" . ($idInst ? " AND id_instituto=$idInst" : "") . " ORDER BY id_periodo DESC")->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; }
}

// ── Claúsula WHERE reutilizable ──────────────────────────────
// Limita siempre a las carreras del coordinador
$wCarrBase = $idsCarreras ? "est.id_carrera IN ($inCarreras)" : '1=1';
$wPer      = $idPer ? "AND p.id_periodo = $idPer"  : '';
$wCar      = $idCar ? "AND est.id_carrera = $idCar" : '';

// ════════════════════════════════════════════════════════════
//  TAB 1: RESUMEN GENERAL (dashboard compacto)
// ════════════════════════════════════════════════════════════
$resumen = [];
if ($tipo === 'resumen') {
    $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 = 'completado')                   AS completados,
            SUM(p.estado = 'calificado')                   AS calificados,
            SUM(p.estado = 'rechazado')                    AS rechazados,
            ROUND(AVG(p.horas_cumplidas),1)                AS prom_horas,
            ROUND(AVG(p.nota_final),2)                     AS prom_nota,
            SUM(p.horas_cumplidas >= p.horas_requeridas)   AS horas_ok
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        WHERE $wCarrBase $wPer
    ")->fetch();

    // Por estado para mini-barras
    $porEstado = $db->query("
        SELECT p.estado, COUNT(*) AS n
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        WHERE $wCarrBase $wPer
        GROUP BY p.estado
    ")->fetchAll();

    // Por carrera
    $porCarrera = $db->query("
        SELECT c.nombre AS carrera,
               COUNT(p.id_practica)              AS total,
               SUM(p.estado='completado')         AS completados,
               SUM(p.estado='en_progreso')        AS en_progreso,
               ROUND(AVG(p.nota_final),2)         AS prom_nota,
               SUM(p.horas_cumplidas >= p.horas_requeridas) AS horas_ok
        FROM practicas p
        JOIN estudiantes est ON est.id_estudiante = p.id_estudiante
        JOIN carreras c      ON c.id_carrera      = est.id_carrera
        WHERE $wCarrBase $wPer
        GROUP BY c.id_carrera
        ORDER BY c.nombre
    ")->fetchAll();
}

// ════════════════════════════════════════════════════════════
//  TAB 2: REPORTE CES — horas por carrera
// ════════════════════════════════════════════════════════════
$datosCES = [];
if ($tipo === 'ces') {
    $w2 = $idPer ? "AND pa.id_periodo = $idPer" : '';

    $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,

               /* ── NUEVO: tutores asignados ─────────────── */
               SUM(p.id_tutor IS NOT NULL)                   AS con_tutor,

               /* ── NUEVO: convenios vigentes ───────────── */
               SUM(
                   EXISTS (
                       SELECT 1 FROM convenios cv
                       WHERE cv.id_empresa = p.id_empresa
                         AND cv.estado = 'vigente'
                         AND cv.fecha_vencimiento >= CURDATE()
                   )
               ) AS con_convenio

        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 $wCarrBase $w2
        GROUP BY c.id_carrera, pa.id_periodo
        ORDER BY c.nombre, pa.nombre DESC
    ")->fetchAll();

    // ── EXPORTAR CSV del Tab CES ──────────────────────────
    if (($export === 'csv') && !empty($datosCES)) {
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="reporte_CES_' . date('Ymd_His') . '.csv"');
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF)); // BOM UTF-8
        fputcsv($out, [
            'Carrera', 'Período', 'Horas mín.', 'Total estudiantes',
            'Completados', 'En progreso', 'Postulados', 'Rechazados',
            'Total horas', 'Prom. horas', 'Horas OK', '% Cumpl.',
            'Prom. nota', 'Con tutor', '% Tutor', 'Con convenio', '% Convenio',
            'Indicador CES'
        ], ';');
        foreach ($datosCES as $r) {
            $pct    = $r['total_estudiantes'] > 0 ? round($r['completados'] / $r['total_estudiantes'] * 100) : 0;
            $pctTut = $r['total_estudiantes'] > 0 ? round($r['con_tutor'] / $r['total_estudiantes'] * 100) : 0;
            $pctCon = $r['total_estudiantes'] > 0 ? round($r['con_convenio'] / $r['total_estudiantes'] * 100) : 0;
            $cesOk  = ($pct >= 70 && $r['promedio_horas'] >= $r['horas_minimas'] && $pctTut >= 90 && $pctCon >= 90);
            fputcsv($out, [
                $r['carrera'], $r['periodo'], $r['horas_minimas'],
                $r['total_estudiantes'], $r['completados'], $r['en_progreso'],
                $r['postulados'], $r['rechazados'],
                $r['total_horas'], $r['promedio_horas'], $r['horas_ok'],
                $pct . '%', $r['promedio_nota'] ?? '—',
                $r['con_tutor'], $pctTut . '%',
                $r['con_convenio'], $pctCon . '%',
                $cesOk ? 'CUMPLE' : 'OBSERVACIÓN'
            ], ';');
        }
        fclose($out); exit;
    }
}

// ════════════════════════════════════════════════════════════
//  TAB 3: BITÁCORAS — seguimiento semanal
// ════════════════════════════════════════════════════════════
$datosBit = [];
if ($tipo === 'bitacoras') {
    $datosBit = $db->query("
        SELECT CONCAT(u.apellidos,' ',u.nombres) AS estudiante,
               c.nombre AS carrera,
               p.id_practica,
               COUNT(b.id_bitacora)                      AS total_bitacoras,
               SUM(b.estado = 'validada')                AS validadas,
               SUM(b.estado = 'enviada')                 AS enviadas,
               SUM(b.estado = 'observada')               AS observadas,
               SUM(b.horas_semana)                       AS total_horas,
               p.horas_requeridas,
               p.horas_cumplidas,
               p.estado AS estado_practica
        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
        LEFT JOIN bitacoras b ON b.id_practica    = p.id_practica
        WHERE $wCarrBase $wPer $wCar
          AND p.estado NOT IN ('borrador','rechazado')
        GROUP BY p.id_practica
        ORDER BY c.nombre, u.apellidos
    ")->fetchAll();
}

// ════════════════════════════════════════════════════════════
//  TAB 4: NÓMINA DETALLADA — exportable
// ════════════════════════════════════════════════════════════
$datosDetalle = [];
if ($tipo === 'detalle') {
    $params = [':carr' => $inCarreras];   // no se puede bind IN(), usamos interpolación segura
    $extra  = [];
    if ($idPer) { $extra[] = "pa.id_periodo = $idPer"; }
    if ($idCar) { $extra[] = "est.id_carrera = $idCar"; }
    $extraStr = $extra ? 'AND ' . implode(' AND ', $extra) : '';

    $datosDetalle = $db->query("
        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,
               p.area_practica
        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 $wCarrBase $extraStr
        ORDER BY u.apellidos, u.nombres
    ")->fetchAll();

    // ── EXPORTAR CSV ──────────────────────────────────────
    if ($export === 'csv' && !empty($datosDetalle)) {
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="reporte_coordinador_' . date('Ymd_His') . '.csv"');
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
        fputcsv($out, ['Estudiante','Cédula','Carrera','Empresa','Período','F. Inicio','F. Fin',
                       'Horas req.','Horas cum.','Estado','Nota final','Tutor','Área'], ';');
        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'] ?? '',
                $r['area_practica'] ?? ''
            ], ';');
        }
        fclose($out); exit;
    }
}

// ════════════════════════════════════════════════════════════
//  TAB 5: EMPRESAS participantes en mis carreras
// ════════════════════════════════════════════════════════════
$datosEmpresas = [];
if ($tipo === 'empresas') {
    $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
        WHERE $wCarrBase $wPer
        GROUP BY em.id_empresa
        ORDER BY total_practicas DESC
    ")->fetchAll();
}

// ════════════════════════════════════════════════════════════
//  TAB 6: VINCULACIÓN — proyectos por carrera/período
// ════════════════════════════════════════════════════════════
$datosVinc = [];
$resVinc   = [];
if ($tipo === 'vinculacion') {
    // Filtro por instituto a través del coordinador (pv no tiene id_instituto)
    $wVPer  = $idPer ? "AND pv.id_periodo = $idPer" : '';

    // KPIs — estados reales: planificacion, en_ejecucion, finalizado, cancelado
    $resVinc = $db->query("
        SELECT COUNT(*)                                AS total,
               SUM(pv.estado = 'en_ejecucion')        AS activos,
               SUM(pv.estado = 'finalizado')           AS completados,
               SUM(pv.estado = 'planificacion')        AS planificacion,
               COALESCE(SUM(pv2.horas_sum),0)          AS total_horas,
               COUNT(DISTINCT pv.id_periodo)           AS periodos
        FROM proyectos_vinculacion pv
        LEFT JOIN (
            SELECT id_proyecto, SUM(horas_cumplidas) AS horas_sum
            FROM participaciones_vinculacion
            GROUP BY id_proyecto
        ) pv2 ON pv2.id_proyecto = pv.id_proyecto
        WHERE 1=1 $wVPer
    ")->fetch();

    // Detalle por proyecto — sin id_carrera (no existe en pv)
    $datosVinc = $db->query("
        SELECT pv.id_proyecto,
               pv.nombre AS titulo,
               pv.estado,
               pv.area,
               pv.fecha_inicio,
               pv.fecha_fin,
               pv.horas_requeridas,
               COALESCE(SUM(pv2.horas_cumplidas), 0)  AS horas_cumplidas,
               COUNT(pv2.id_participacion)             AS num_participantes,
               pa.nombre                               AS periodo,
               COALESCE(ob.nombre, '—')                AS organizacion,
               CONCAT(u.apellidos,' ',u.nombres)       AS coordinador_resp
        FROM proyectos_vinculacion pv
        LEFT JOIN participaciones_vinculacion pv2 ON pv2.id_proyecto = pv.id_proyecto
        LEFT JOIN periodos_academicos pa           ON pa.id_periodo  = pv.id_periodo
        LEFT JOIN organizaciones_beneficiarias ob  ON ob.id_organizacion = pv.id_organizacion
        LEFT JOIN usuarios u                       ON u.id_usuario   = pv.id_coordinador
        WHERE 1=1 $wVPer
        GROUP BY pv.id_proyecto
        ORDER BY pv.estado, pv.fecha_inicio DESC
        LIMIT 60
    ")->fetchAll();

    // Export CSV vinculación
    if ($export === 'csv' && !empty($datosVinc)) {
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="reporte_vinculacion_' . date('Ymd_His') . '.csv"');
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
        fputcsv($out, ['Proyecto','Organización','Estado','Área','Período',
                       'F. Inicio','F. Fin','Hs. req.','Hs. cum.',
                       'Participantes','Coordinador'], ';');
        foreach ($datosVinc as $r) {
            fputcsv($out, [
                $r['titulo'], $r['organizacion'], $r['estado'],
                $r['area'] ?? '—', $r['periodo'] ?? '—',
                $r['fecha_inicio'] ?? '', $r['fecha_fin'] ?? '',
                $r['horas_requeridas'] ?? 0, $r['horas_cumplidas'] ?? 0,
                $r['num_participantes'], $r['coordinador_resp'] ?? '—'
            ], ';');
        }
        fclose($out); exit;
    }
}

// ════════════════════════════════════════════════════════════
//  TAB 7: TITULACIÓN — por modalidad/carrera
// ════════════════════════════════════════════════════════════
$datosTit   = [];
$resumenTit = [];
$nominaTit  = [];
if ($tipo === 'titulacion') {
    $wTInst = $idInst ? "AND t.id_instituto = $idInst" : '';
    $wTCar  = $idCar  ? "AND est.id_carrera = $idCar"  : '';

    // KPIs — estado real: pendiente | enviada | aprobado | rechazado
    $resumenTit = $db->query("
        SELECT COUNT(*)                                       AS total,
               SUM(t.estado = 'aprobado')                    AS aprobados,
               SUM(t.estado = 'enviada')                     AS pendientes,
               SUM(t.estado = 'rechazado')                   AS rechazados,
               SUM(t.modalidad = 'examen_complexivo')        AS examenes,
               SUM(t.modalidad = 'trabajo_investigacion')    AS trabajos,
               ROUND(AVG(CASE WHEN t.nota_final > 0
                              THEN t.nota_final END), 2)     AS prom_nota
        FROM titulaciones t
        JOIN estudiantes est ON est.id_estudiante = t.id_estudiante
        JOIN carreras c      ON c.id_carrera      = est.id_carrera
        WHERE $wCarrBase $wTInst $wTCar
    ")->fetch();

    // Resumen por carrera + modalidad
    $datosTit = $db->query("
        SELECT c.nombre AS carrera,
               t.modalidad,
               COUNT(*)                        AS total,
               SUM(t.estado = 'aprobado')      AS aprobados,
               SUM(t.estado = 'enviada')       AS pendientes,
               SUM(t.estado = 'rechazado')     AS rechazados,
               ROUND(AVG(CASE WHEN t.nota_final > 0
                              THEN t.nota_final END), 2) AS prom_nota
        FROM titulaciones t
        JOIN estudiantes est ON est.id_estudiante = t.id_estudiante
        JOIN carreras c      ON c.id_carrera      = est.id_carrera
        WHERE $wCarrBase $wTInst $wTCar
        GROUP BY c.id_carrera, t.modalidad
        ORDER BY c.nombre, t.modalidad
    ")->fetchAll();

    // Nómina individual — columnas reales: tema, nota_final, nota_global, fecha_envio, id_director
    $nominaTit = $db->query("
        SELECT CONCAT(u.apellidos,' ',u.nombres) AS estudiante,
               u.cedula,
               c.nombre     AS carrera,
               t.modalidad,
               t.estado,
               t.tema,
               t.nota_final,
               t.nota_global,
               t.fecha_envio,
               CONCAT(ud.apellidos,' ',ud.nombres) AS director
        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 c       ON c.id_carrera      = est.id_carrera
        LEFT JOIN usuarios ud ON ud.id_usuario     = t.id_director
        WHERE $wCarrBase $wTInst $wTCar
        ORDER BY u.apellidos, c.nombre
        LIMIT 80
    ")->fetchAll();

    // Export CSV titulación
    if ($export === 'csv' && !empty($nominaTit)) {
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="reporte_titulacion_' . date('Ymd_His') . '.csv"');
        $out = fopen('php://output', 'w');
        fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
        fputcsv($out, ['Estudiante','Cédula','Carrera','Modalidad',
                       'Estado','Tema','Nota final','Nota global',
                       'Fecha envío','Director'], ';');
        $mlCsv = ['examen_complexivo'=>'Examen Complexivo',
                  'trabajo_investigacion'=>'Trabajo de Investigación'];
        foreach ($nominaTit as $r) {
            fputcsv($out, [
                $r['estudiante'], $r['cedula'], $r['carrera'],
                $mlCsv[$r['modalidad']] ?? $r['modalidad'],
                $r['estado'],
                $r['tema'] ?? '—',
                $r['nota_final'] ?? '—',
                $r['nota_global'] ?? '—',
                $r['fecha_envio'] ? date('d/m/Y', strtotime($r['fecha_envio'])) : '—',
                $r['director'] ?? '—'
            ], ';');
        }
        fclose($out); exit;
    }
}

// ── Tabs de navegación interna ───────────────────────────────
$navItems = [
    'resumen'     => ['ico' => '📊', 'label' => 'Resumen',      'desc' => 'Vista general por carrera'],
    'ces'         => ['ico' => '🗂️', 'label' => 'CES',          'desc' => 'Horas por carrera y período'],
    'bitacoras'   => ['ico' => '📓', 'label' => 'Bitácoras',    'desc' => 'Seguimiento semanal'],
    'detalle'     => ['ico' => '📋', 'label' => 'Nómina',       'desc' => 'Listado completo exportable'],
    'empresas'    => ['ico' => '🏢', 'label' => 'Empresas',     'desc' => 'Participación por empresa'],
    'vinculacion' => ['ico' => '🤝', 'label' => 'Vinculación',  'desc' => 'Proyectos comunitarios'],
    'titulacion'  => ['ico' => '🎓', 'label' => 'Titulación',   'desc' => 'Modalidades y resultados'],
];

// ── Colores de estado ────────────────────────────────────────
$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__ . 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-coordinador.css">
</head>
<body>
<?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'navbar.php'; ?>

<div class="app-shell">

  <!-- ── SIDEBAR ─────────────────────────────────────────── -->
  <?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'sidebar-coordinador.php'; ?>

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

    <!-- Encabezado -->
    <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 CES</h4>
        <p>
          Seguimiento y estadísticas de prácticas preprofesionales
          <?php if ($misCarreras): ?>
          · <span style="color:var(--accent);">
              <?= implode(', ', array_column($misCarreras, 'nombre')) ?>
            </span>
          <?php endif; ?>
        </p>
      </div>
      <div class="d-flex gap-2">
        <span class="badge-estado st-postulado">CES</span>
      </div>
    </div>

    <!-- ── Tabs de tipo ─────────────────────────────────── -->
    <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:150px;">
          <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, ['ces','detalle','bitacoras'])): ?>
      <div>
        <label class="form-label">Carrera</label>
        <select name="carrera" class="form-select form-select-sm" style="min-width:180px;">
          <option value="0">Todas mis carreras</option>
          <?php foreach ($misCarreras 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">
        <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>CSV
        </a>
        <?php elseif ($tipo === 'ces'): ?>
        <a href="?tipo=ces&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>&export=csv"
           class="btn btn-sm" style="background:#10b981;color:#fff;border:none;">
          <i class="fa fa-file-csv me-1"></i>Exportar CES
        </a>
        <?php elseif ($tipo === 'vinculacion'): ?>
        <a href="?tipo=vinculacion&periodo=<?= $idPer ?>&export=csv"
           class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-download me-1"></i>CSV
        </a>
        <?php elseif ($tipo === 'titulacion'): ?>
        <a href="?tipo=titulacion&periodo=<?= $idPer ?>&carrera=<?= $idCar ?>&export=csv"
           class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-download me-1"></i>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 ($perNombre): ?>
    <div style="font-size:12px; color:var(--text-2); margin-bottom:14px;">
      <i class="fa fa-calendar me-1"></i>
      Período: <strong style="color:var(--text);"><?= htmlspecialchars($perNombre) ?></strong>
      <?php if ($idCar): ?>
        &nbsp;·&nbsp;
        <?php foreach($misCarreras as $c) { if($c['id_carrera']==$idCar) echo '<strong style="color:var(--text);">'.htmlspecialchars($c['nombre']).'</strong>'; } ?>
      <?php endif; ?>
    </div>
    <?php endif; ?>

    <!-- ════════════════════════════════════════════════════
         TAB: RESUMEN GENERAL
    ════════════════════════════════════════════════════ -->
    <?php if ($tipo === 'resumen'): ?>
    <?php $tot = $resumen['total'] ?: 1; ?>

    <!-- KPIs -->
    <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['completados'], 'l' => 'Completadas',           'ico' => '✅', 'c' => 'var(--green)'],
        ['v' => $resumen['postulados'],  'l' => 'Por aprobar',           'ico' => '📥', 'c' => 'var(--accent)'],
        ['v' => ($resumen['prom_horas'] ?? 0).'h', 'l' => 'Prom. horas','ico' => '⏱️', 'c' => 'var(--accent)'],
        ['v' => $resumen['prom_nota'] ?: '—', 'l' => 'Prom. nota final','ico' => '📊', 'c' => 'var(--green)'],
      ];
      foreach ($kpis as $k): ?>
      <div class="col-6 col-lg-4">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:<?= $k['c'] ?>; font-size:24px;"><?= $k['v'] ?></div>
            <div class="stat-label"><?= $k['l'] ?></div>
          </div>
          <div class="stat-icon"><?= $k['ico'] ?></div>
        </div>
      </div>
      <?php endforeach; ?>
    </div>

    <!-- Distribución 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:140px;">
          <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>

    <!-- Tabla por carrera -->
    <div style="font-size:11px; font-weight:700; letter-spacing:1px; text-transform:uppercase;
                color:var(--text-2); margin-bottom:10px;">Detalle 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;">En progreso</th>
            <th style="text-align:center;">Prom. nota</th>
            <th style="text-align:center;">% Completitud</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($porCarrera)): ?>
          <tr><td colspan="6" class="text-center text-muted py-4">Sin datos para este período.</td></tr>
          <?php else: foreach ($porCarrera as $r):
            $pct    = $r['total'] > 0 ? round($r['completados'] / $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['completados'] ?></td>
            <td style="text-align:center; color:var(--yellow);"><?= $r['en_progreso'] ?></td>
            <td style="text-align:center;">
              <?= $r['prom_nota'] ? number_format($r['prom_nota'],2) : '—' ?>
            </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: CES
    ════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'ces'): ?>

    <!-- Encabezado de impresión -->
    <div class="print-only" style="display:none;margin-bottom:20px;border-bottom:2px solid #000;padding-bottom:10px;">
      <div style="font-size:18px;font-weight:900;">Reporte CES — Prácticas Pre-Profesionales</div>
      <div style="font-size:12px;margin-top:4px;">
        Generado: <?= date('d/m/Y H:i') ?> &nbsp;·&nbsp;
        Coordinador: <?= htmlspecialchars($user['nombre'] ?? '') ?> &nbsp;·&nbsp;
        Período: <?= htmlspecialchars($perNombre) ?>
      </div>
    </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;">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;" title="Prácticas con tutor académico asignado">
              Tutor asig. <i class="fa fa-circle-info fa-xs" style="color:var(--text-2);"></i>
            </th>
            <th style="text-align:center;" title="Prácticas en empresa con convenio vigente">
              Convenio <i class="fa fa-circle-info fa-xs" style="color:var(--text-2);"></i>
            </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="13" class="text-center text-muted py-5">Sin datos para el filtro seleccionado.</td></tr>
          <?php else:
          $totales = ['total_estudiantes'=>0,'completados'=>0,'en_progreso'=>0,
                      'rechazados'=>0,'total_horas'=>0,'con_tutor'=>0,'con_convenio'=>0];
          foreach ($datosCES as $r):
            $pct    = $r['total_estudiantes'] > 0 ? round($r['completados'] / $r['total_estudiantes'] * 100) : 0;
            $cpct   = $pct >= 80 ? 'var(--green)' : ($pct >= 50 ? 'var(--yellow)' : 'var(--red)');
            $pctTut = $r['total_estudiantes'] > 0 ? round($r['con_tutor'] / $r['total_estudiantes'] * 100) : 0;
            $pctCon = $r['total_estudiantes'] > 0 ? round($r['con_convenio'] / $r['total_estudiantes'] * 100) : 0;
            $tutOk  = $pctTut >= 90;
            $conOk  = $pctCon >= 90;
            $cesOk  = $pct >= 70 && $r['promedio_horas'] >= $r['horas_minimas'] && $tutOk && $conOk;
            foreach (['total_estudiantes','completados','en_progreso','rechazados','total_horas','con_tutor','con_convenio'] 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="font-size:12px; color:var(--text-2);"><?= htmlspecialchars($r['periodo']) ?></td>
            <td style="text-align:center; font-weight:700;"><?= $r['total_estudiantes'] ?></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; color:var(--red);"><?= $r['rechazados'] ?></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['promedio_horas'] >= $r['horas_minimas'] ? 'var(--green)' : 'var(--red)' ?>;">
              <?= number_format($r['promedio_horas'],1) ?>h
            </td>
            <td style="text-align:center;"><?= $r['promedio_nota'] ? number_format($r['promedio_nota'],2) : '—' ?></td>

            <!-- Tutores asignados -->
            <td style="text-align:center;">
              <span style="font-weight:700;color:<?= $tutOk ? 'var(--green)' : 'var(--red)' ?>;">
                <?= $r['con_tutor'] ?>/<?= $r['total_estudiantes'] ?>
              </span>
              <div style="font-size:10px;color:<?= $tutOk ? 'var(--green)' : 'var(--red)' ?>;"><?= $pctTut ?>%</div>
            </td>

            <!-- Convenios vigentes -->
            <td style="text-align:center;">
              <span style="font-weight:700;color:<?= $conOk ? 'var(--green)' : 'var(--red)' ?>;">
                <?= $r['con_convenio'] ?>/<?= $r['total_estudiantes'] ?>
              </span>
              <div style="font-size:10px;color:<?= $conOk ? 'var(--green)' : 'var(--red)' ?>;"><?= $pctCon ?>%</div>
            </td>

            <!-- % Cumplimiento horas -->
            <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>

            <!-- Indicador CES mejorado -->
            <td style="text-align:center;">
              <?php if ($cesOk): ?>
                <span style="background:rgba(16,185,129,.12);color:#047857;border:1px solid rgba(16,185,129,.3);
                             font-size:10px;font-weight:700;padding:3px 8px;border-radius:6px;">
                  ✅ CUMPLE
                </span>
              <?php else: ?>
                <span style="background:rgba(239,68,68,.10);color:#b91c1c;border:1px solid rgba(239,68,68,.25);
                             font-size:10px;font-weight:700;padding:3px 8px;border-radius:6px;"
                      title="<?= !$tutOk ? 'Tutores insuficientes. ' : '' ?><?= !$conOk ? 'Convenios insuficientes. ' : '' ?><?= $pct < 70 ? '% completitud bajo.' : '' ?>">
                  ⚠️ OBS.
                </span>
              <?php endif; ?>
            </td>
          </tr>
          <?php endforeach; ?>
          <!-- Totales -->
          <tr style="background:#f8fafc; 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_estudiantes'] ?></td>
            <td style="text-align:center; font-weight:700; color:var(--green);"><?= $totales['completados'] ?></td>
            <td style="text-align:center; color:var(--yellow);"><?= $totales['en_progreso'] ?></td>
            <td style="text-align:center; color:var(--red);"><?= $totales['rechazados'] ?></td>
            <td style="text-align:center; font-weight:700;"><?= number_format($totales['total_horas']) ?>h</td>
            <td></td><td></td>
            <td style="text-align:center;font-weight:700;"><?= $totales['con_tutor'] ?></td>
            <td style="text-align:center;font-weight:700;"><?= $totales['con_convenio'] ?></td>
            <td colspan="2"></td>
          </tr>
          <?php endif; ?>
        </tbody>
      </table>
    </div>

    <!-- Leyenda indicador CES -->
    <div style="margin-top:12px;padding:10px 14px;background:#f8fafc;border:1px solid var(--border);
                border-radius:8px;font-size:11px;color:var(--text-2);">
      <strong style="color:var(--text);">Criterios indicador CES:</strong>
      &nbsp;✅ CUMPLE cuando: % completitud ≥ 70% · Prom. horas ≥ mínimo legal · Tutores asignados ≥ 90% · Convenios vigentes ≥ 90%
      &nbsp;·&nbsp; ⚠️ OBS. = tiene observación (pasa el cursor sobre el badge para ver el motivo)
    </div>

    <!-- Sección de firma para impresión -->
    <div class="print-only" style="display:none;margin-top:48px;">
      <div style="display:flex;justify-content:space-between;gap:40px;">
        <div style="flex:1;text-align:center;border-top:1px solid #000;padding-top:6px;font-size:11px;">
          Coordinador responsable
        </div>
        <div style="flex:1;text-align:center;border-top:1px solid #000;padding-top:6px;font-size:11px;">
          Visto bueno — Dirección académica
        </div>
        <div style="flex:1;text-align:center;border-top:1px solid #000;padding-top:6px;font-size:11px;">
          Sello institucional
        </div>
      </div>
    </div>

    <!-- ════════════════════════════════════════════════════
         TAB: 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">
        <thead>
          <tr>
            <th>Estudiante</th>
            <th>Carrera</th>
            <th style="text-align:center;">Bitácoras</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>Estado práctica</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosBit)): ?>
          <tr><td colspan="9" class="text-center text-muted py-4">Sin registros para el filtro seleccionado.</td></tr>
          <?php else: foreach ($datosBit as $r):
            $hrPct = $r['horas_requeridas'] > 0
                ? min(100, round($r['horas_cumplidas'] / $r['horas_requeridas'] * 100)) : 0;
            $hpColor = $hrPct >= 80 ? 'var(--green)' : ($hrPct >= 40 ? 'var(--yellow)' : 'var(--red)');
          ?>
          <tr>
            <td><strong><?= htmlspecialchars($r['estudiante']) ?></strong></td>
            <td style="font-size:12px; color:var(--text-2);"><?= htmlspecialchars($r['carrera']) ?></td>
            <td style="text-align:center; font-weight:700;"><?= $r['total_bitacoras'] ?></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['total_horas'] ?>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:<?= $hrPct ?>%; height:6px; border-radius:3px; background:<?= $hpColor ?>;"></div>
                </div>
                <span style="font-size:11px; font-weight:700; color:<?= $hpColor ?>;"><?= $hrPct ?>%</span>
              </div>
              <div style="font-size:10px; color:var(--text-2);"><?= $r['horas_cumplidas'] ?>/<?= $r['horas_requeridas'] ?>h</div>
            </td>
            <td><span class="badge-estado st-<?= $r['estado_practica'] ?>"><?= $r['estado_practica'] ?></span></td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ════════════════════════════════════════════════════
         TAB: NÓMINA DETALLADA
    ════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'detalle'): ?>
    <div style="font-size:12px; color:var(--text-2); margin-bottom:10px;">
      <?= count($datosDetalle) ?> registro(s) encontrado(s)
    </div>
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>#</th><th>Estudiante</th><th>Cédula</th><th>Carrera</th>
            <th>Empresa</th><th>Área</th><th>Período</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="12" 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:var(--text-2);"><?= $i+1 ?></td>
            <td><strong><?= htmlspecialchars($r['estudiante']) ?></strong></td>
            <td style="font-family:monospace; color:var(--text-2);"><?= htmlspecialchars($r['cedula']) ?></td>
            <td><?= htmlspecialchars($r['carrera']) ?></td>
            <td><?= htmlspecialchars($r['empresa']) ?></td>
            <td style="color:var(--text-2); font-size:11px;"><?= htmlspecialchars($r['area_practica'] ?? '—') ?></td>
            <td style="color:var(--text-2);"><?= htmlspecialchars($r['periodo']) ?></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'] ? 'var(--green)' : 'var(--yellow)' ?>;">
              <?= $r['horas_cumplidas'] ?>
            </td>
            <td><span class="badge-estado st-<?= $r['estado'] ?>"><?= $r['estado'] ?></span></td>
            <td style="text-align:center; font-weight:700;
                        color:<?= $r['nota_final'] ? ($r['nota_final']>=7?'var(--green)':'var(--red)') : 'var(--text-2)' ?>;">
              <?= $r['nota_final'] ? number_format($r['nota_final'],2) : '—' ?>
            </td>
            <td style="color:var(--text-2);"><?= htmlspecialchars($r['tutor'] ?? '—') ?></td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ════════════════════════════════════════════════════
         TAB: 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:
          $sColor = ['publico'=>'var(--accent)','privado'=>'var(--green)',
                     'mixto'=>'var(--yellow)','ong'=>'var(--purple)'];
          foreach ($datosEmpresas as $e):
            $sc = $sColor[$e['sector']] ?? 'var(--text-2)';
          ?>
          <tr>
            <td><strong><?= htmlspecialchars($e['empresa']) ?></strong></td>
            <td>
              <span style="font-size:10px; padding:2px 8px; border-radius:10px; font-weight:700;
                           background:<?= $sc ?>18; color:<?= $sc ?>; border:1px solid <?= $sc ?>44;">
                <?= ucfirst($e['sector']) ?>
              </span>
            </td>
            <td style="font-size:12px; color:var(--text-2);">
              <?= 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:var(--green); 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:var(--accent);"><?= $e['carreras_distintas'] ?></td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ════════════════════════════════════════════════════
         TAB: VINCULACIÓN
    ════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'vinculacion'): ?>

    <!-- KPIs vinculación -->
    <div class="row g-3 mb-4">
      <?php
      $kpisV = [
        ['v' => $resVinc['total']        ?? 0, 'l' => 'Total proyectos',      'ico' => '🤝', 'c' => 'var(--accent)'],
        ['v' => $resVinc['activos']      ?? 0, 'l' => 'En ejecución',         'ico' => '⚡', 'c' => 'var(--yellow)'],
        ['v' => $resVinc['completados']  ?? 0, 'l' => 'Finalizados',          'ico' => '✅', 'c' => 'var(--green)'],
        ['v' => $resVinc['planificacion']?? 0, 'l' => 'En planificación',     'ico' => '📐', 'c' => 'var(--purple)'],
        ['v' => number_format($resVinc['total_horas'] ?? 0).'h', 'l' => 'Total horas acumuladas', 'ico' => '⏱️', 'c' => 'var(--green)'],
        ['v' => count($datosVinc),             'l' => 'Proyectos listados',   'ico' => '📋', 'c' => 'var(--accent)'],
      ];
      foreach ($kpisV as $k): ?>
      <div class="col-6 col-lg-2">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:<?= $k['c'] ?>; font-size:22px;"><?= $k['v'] ?></div>
            <div class="stat-label"><?= $k['l'] ?></div>
          </div>
          <div class="stat-icon" style="font-size:20px;"><?= $k['ico'] ?></div>
        </div>
      </div>
      <?php endforeach; ?>
    </div>

    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>Proyecto</th><th>Organización</th><th>Área</th><th>Período</th>
            <th style="text-align:center;">Estado</th>
            <th style="text-align:center;">Participantes</th>
            <th style="text-align:center;">Horas req.</th>
            <th style="text-align:center;">Horas cum.</th>
            <th style="text-align:center;">Avance</th>
            <th>Coordinador</th>
          </tr>
        </thead>
        <tbody>
          <?php if (empty($datosVinc)): ?>
          <tr><td colspan="10" class="text-center text-muted py-4">Sin proyectos de vinculación para el filtro.</td></tr>
          <?php else:
          $stVinc = [
            'planificacion' => ['bg'=>'rgba(139,92,246,.1)', 'c'=>'#5b21b6', 't'=>'Planificación'],
            'en_ejecucion'  => ['bg'=>'rgba(245,158,11,.1)', 'c'=>'#b45309', 't'=>'En ejecución'],
            'finalizado'    => ['bg'=>'rgba(16,185,129,.1)', 'c'=>'#047857', 't'=>'Finalizado'],
            'cancelado'     => ['bg'=>'rgba(239,68,68,.1)',  'c'=>'#b91c1c', 't'=>'Cancelado'],
          ];
          foreach ($datosVinc as $vr):
            $vreq = (int)($vr['horas_requeridas'] ?? 0);
            $vcum = (int)($vr['horas_cumplidas']  ?? 0);
            $vpct = $vreq > 0 ? min(100, round($vcum / $vreq * 100)) : 0;
            $vpc  = $vpct >= 80 ? 'var(--green)' : ($vpct >= 40 ? 'var(--yellow)' : 'var(--red)');
            $sv   = $stVinc[$vr['estado']] ?? ['bg'=>'#f1f5f9','c'=>'#64748b','t'=>$vr['estado']];
          ?>
          <tr>
            <td><strong><?= htmlspecialchars($vr['titulo']) ?></strong></td>
            <td style="color:var(--text-2);font-size:11px;"><?= htmlspecialchars($vr['organizacion']) ?></td>
            <td style="color:var(--text-2);font-size:11px;"><?= htmlspecialchars($vr['area'] ?? '—') ?></td>
            <td style="color:var(--text-2);font-size:11px;"><?= htmlspecialchars($vr['periodo'] ?? '—') ?></td>
            <td style="text-align:center;">
              <span style="font-size:10px;font-weight:700;padding:2px 8px;border-radius:10px;
                           background:<?= $sv['bg'] ?>;color:<?= $sv['c'] ?>;border:1px solid <?= $sv['c'] ?>33;">
                <?= $sv['t'] ?>
              </span>
            </td>
            <td style="text-align:center;font-weight:700;"><?= $vr['num_participantes'] ?></td>
            <td style="text-align:center;"><?= $vreq ?>h</td>
            <td style="text-align:center;font-weight:700;color:<?= $vpc ?>;"><?= $vcum ?>h</td>
            <td style="min-width:90px;">
              <div style="display:flex;align-items:center;gap:5px;">
                <div style="flex:1;background:var(--border);border-radius:3px;height:5px;">
                  <div style="width:<?= $vpct ?>%;height:5px;border-radius:3px;background:<?= $vpc ?>;"></div>
                </div>
                <span style="font-size:10px;font-weight:700;color:<?= $vpc ?>;"><?= $vpct ?>%</span>
              </div>
            </td>
            <td style="font-size:11px;color:var(--text-2);"><?= htmlspecialchars($vr['coordinador_resp'] ?? '—') ?></td>
          </tr>
          <?php endforeach; endif; ?>
        </tbody>
      </table>
    </div>

    <!-- ════════════════════════════════════════════════════
         TAB: TITULACIÓN
    ════════════════════════════════════════════════════ -->
    <?php elseif ($tipo === 'titulacion'): ?>

    <!-- KPIs titulación -->
    <div class="row g-3 mb-4">
      <?php
      $kpisT = [
        ['v' => $resumenTit['total']       ?? 0,   'l' => 'Total procesos',        'ico' => '🎓', 'c' => 'var(--accent)'],
        ['v' => $resumenTit['aprobados']   ?? 0,   'l' => 'Aprobados',             'ico' => '✅', 'c' => 'var(--green)'],
        ['v' => $resumenTit['pendientes']  ?? 0,   'l' => 'Pendientes revisión',   'ico' => '📋', 'c' => 'var(--yellow)'],
        ['v' => $resumenTit['rechazados']  ?? 0,   'l' => 'Rechazados',            'ico' => '❌', 'c' => 'var(--red)'],
        ['v' => $resumenTit['examenes']    ?? 0,   'l' => 'Examen complexivo',     'ico' => '📝', 'c' => 'var(--purple)'],
        ['v' => $resumenTit['trabajos']    ?? 0,   'l' => 'Trabajo investigación', 'ico' => '📖', 'c' => 'var(--orange)'],
      ];
      foreach ($kpisT as $k): ?>
      <div class="col-6 col-lg-2">
        <div class="stat-card">
          <div>
            <div class="stat-num" style="color:<?= $k['c'] ?>; font-size:22px;"><?= $k['v'] ?></div>
            <div class="stat-label"><?= $k['l'] ?></div>
          </div>
          <div class="stat-icon" style="font-size:20px;"><?= $k['ico'] ?></div>
        </div>
      </div>
      <?php endforeach; ?>
    </div>

    <!-- Resumen por carrera y modalidad -->
    <?php if (!empty($datosTit)): ?>
    <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                color:var(--text-2);margin-bottom:10px;">Resumen por carrera y modalidad</div>
    <div class="tbl-wrap mb-4">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>Carrera</th><th>Modalidad</th>
            <th style="text-align:center;">Total</th>
            <th style="text-align:center;">Aprobados</th>
            <th style="text-align:center;">Pendientes</th>
            <th style="text-align:center;">Rechazados</th>
            <th style="text-align:center;">Prom. nota</th>
            <th style="text-align:center;">% Aprobación</th>
          </tr>
        </thead>
        <tbody>
          <?php
          $mlTit = ['examen_complexivo'=>'Examen Complexivo','trabajo_investigacion'=>'Trabajo Investigación','sin_definir'=>'Sin definir'];
          foreach ($datosTit as $tr):
            $tpct  = $tr['total'] > 0 ? round($tr['aprobados'] / $tr['total'] * 100) : 0;
            $tcol  = $tpct >= 80 ? 'var(--green)' : ($tpct >= 60 ? 'var(--yellow)' : 'var(--red)');
          ?>
          <tr>
            <td><strong><?= htmlspecialchars($tr['carrera']) ?></strong></td>
            <td>
              <span style="font-size:10px;font-weight:700;padding:2px 8px;border-radius:10px;
                           background:rgba(99,102,241,.1);color:#4338ca;border:1px solid rgba(99,102,241,.25);">
                <?= $mlTit[$tr['modalidad']] ?? $tr['modalidad'] ?>
              </span>
            </td>
            <td style="text-align:center;font-weight:700;"><?= $tr['total'] ?></td>
            <td style="text-align:center;color:var(--green);font-weight:700;"><?= $tr['aprobados'] ?></td>
            <td style="text-align:center;color:var(--yellow);"><?= $tr['pendientes'] ?></td>
            <td style="text-align:center;color:var(--red);"><?= $tr['rechazados'] ?></td>
            <td style="text-align:center;"><?= $tr['prom_nota'] ? number_format($tr['prom_nota'],2) : '—' ?></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:<?= $tpct ?>%;height:6px;border-radius:3px;background:<?= $tcol ?>;"></div>
                </div>
                <span style="font-size:11px;font-weight:700;color:<?= $tcol ?>;"><?= $tpct ?>%</span>
              </div>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>

    <!-- Nómina individual titulación -->
    <?php if (!empty($nominaTit)): ?>
    <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                color:var(--text-2);margin-bottom:10px;">Nómina individual</div>
    <div class="tbl-wrap">
      <table class="table table-borderless mb-0" style="font-size:12px;">
        <thead>
          <tr>
            <th>Estudiante</th><th>Cédula</th><th>Carrera</th>
            <th>Modalidad</th><th>Estado</th><th>Tema</th>
            <th style="text-align:center;">Nota final</th>
            <th style="text-align:center;">Nota global</th>
            <th>Fecha envío</th><th>Director</th>
          </tr>
        </thead>
        <tbody>
          <?php
          $mlTitHtml = ['examen_complexivo'=>'Examen Complexivo','trabajo_investigacion'=>'Trab. Investigación'];
          foreach ($nominaTit as $nt):
            $stT = ['aprobado'=>'var(--green)','enviada'=>'var(--yellow)','rechazado'=>'var(--red)','pendiente'=>'var(--text-2)'];
            $nc  = $stT[$nt['estado']] ?? 'var(--text-2)';
          ?>
          <tr>
            <td><strong><?= htmlspecialchars($nt['estudiante']) ?></strong></td>
            <td style="font-family:monospace;font-size:11px;color:var(--text-2);"><?= htmlspecialchars($nt['cedula']) ?></td>
            <td><?= htmlspecialchars($nt['carrera']) ?></td>
            <td style="font-size:11px;color:var(--text-2);"><?= $mlTitHtml[$nt['modalidad']] ?? $nt['modalidad'] ?></td>
            <td><span style="font-size:10px;font-weight:700;color:<?= $nc ?>;"><?= strtoupper($nt['estado']) ?></span></td>
            <td style="font-size:11px;color:var(--text-2);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">
              <?= htmlspecialchars($nt['tema'] ?? '—') ?>
            </td>
            <td style="text-align:center;font-weight:700;
                        color:<?= ($nt['nota_final']??0) >= 7 ? 'var(--green)' : (($nt['nota_final']??0) > 0 ? 'var(--red)' : 'var(--text-2)') ?>;">
              <?= $nt['nota_final'] ? number_format($nt['nota_final'],2) : '—' ?>
            </td>
            <td style="text-align:center;font-weight:700;color:var(--text-2);">
              <?= $nt['nota_global'] ? number_format($nt['nota_global'],2) : '—' ?>
            </td>
            <td style="font-size:11px;color:var(--text-2);">
              <?= $nt['fecha_envio'] ? date('d/m/Y', strtotime($nt['fecha_envio'])) : '—' ?>
            </td>
            <td style="font-size:11px;color:var(--text-2);"><?= htmlspecialchars($nt['director'] ?? '—') ?></td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <?php endif; ?>
    <?php endif; ?>

  </main>
</div>

<style>
@media print {
  .sidebar, .navbar, form, .btn, a.btn { display:none !important; }
  .main-area { padding: 0 !important; }
  .tbl-wrap { border: 1px solid #ccc !important; box-shadow: none !important; }
  .print-only { display:block !important; }
  .stat-card { border: 1px solid #ccc !important; box-shadow: none !important; }
  body { font-size: 11px !important; }
  .page-header p { display: none; }
}
@media screen {
  .print-only { display: none !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>