<?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';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'flash.php';
requireRol(ROL_COORDINADOR);

$user = currentUser();
$db   = getDB();
$pageTitle = 'Convalidaciones PPP';
$idInst = instId();
$iCond  = instCond('c'); // filtra por id_instituto via carreras

// ── DOCUMENTOS REQUERIDOS PARA CONVALIDACIÓN ────────────────────────────────
$DOCS_CONV = [
    'CON-001' => 'Solicitud de Convalidación',
    'CON-002' => 'Contrato o Nombramiento',
    'CON-003' => 'Rol de Pagos / Historial IESS',
    'CON-004' => 'Certificado del Empleador',
    'CON-005' => 'Informe de Actividades',
];

// ── ACCIÓN POST: aprobar / observar / rechazar documento ────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $accion      = $_POST['accion']     ?? '';
    $idSolicitud = (int)($_POST['id_solicitud'] ?? 0);
    $codigoDoc   = $_POST['codigo_doc'] ?? '';
    $observ      = trim($_POST['observacion'] ?? '');

    // Aprobar/observar documento individual
    if (in_array($accion, ['aprobar_doc', 'observar_doc']) && $idSolicitud && array_key_exists($codigoDoc, $DOCS_CONV)) {
        if ($accion === 'aprobar_doc') {
            $db->prepare("
                UPDATE convalidacion_documentos
                SET estado='aprobado', observacion=NULL, aprobado_por=:uid, aprobado_at=NOW(), updated_at=NOW()
                WHERE id_solicitud=:is AND codigo_doc=:cod AND estado IN ('enviado','observado')
            ")->execute([':uid' => $user['id'], ':is' => $idSolicitud, ':cod' => $codigoDoc]);
            flashSet('ok', "Documento {$codigoDoc} aprobado.");
        } elseif ($accion === 'observar_doc' && $observ !== '') {
            $db->prepare("
                UPDATE convalidacion_documentos
                SET estado='observado', observacion=:obs, updated_at=NOW()
                WHERE id_solicitud=:is AND codigo_doc=:cod AND estado IN ('enviado','aprobado','observado')
            ")->execute([':obs' => $observ, ':is' => $idSolicitud, ':cod' => $codigoDoc]);
            flashSet('info', "Documento {$codigoDoc} devuelto con observación.");

            // Notificar al estudiante
            $stEst = $db->prepare("
                SELECT e.id_usuario FROM convalidaciones cs
                JOIN estudiantes e ON e.id_estudiante = cs.id_estudiante
                WHERE cs.id_solicitud = :is LIMIT 1
            ");
            $stEst->execute([':is' => $idSolicitud]);
            $est = $stEst->fetch();
            if ($est) {
                $db->prepare("INSERT INTO notificaciones(id_usuario,tipo,asunto,mensaje) VALUES(:uid,'sistema',:as,:msg)")
                   ->execute([
                       ':uid' => $est['id_usuario'],
                       ':as'  => "Observación en documento {$codigoDoc}",
                       ':msg' => "El coordinador devolvió el documento {$codigoDoc} con la siguiente observación: {$observ}. Por favor corrígelo y vuelve a subirlo.",
                   ]);
            }
        }
    }

    // Resolución final: aprobar o rechazar la solicitud completa
    if (in_array($accion, ['aprobar_solicitud', 'rechazar_solicitud']) && $idSolicitud) {
        $obs = trim($_POST['obs_resolucion'] ?? '');
        if ($accion === 'aprobar_solicitud') {
            $db->prepare("
                UPDATE convalidaciones
                SET estado='aprobada', resolucion=:obs, resuelto_por=:uid, resuelto_at=NOW(), updated_at=NOW()
                WHERE id_solicitud=:is
            ")->execute([':obs' => $obs, ':uid' => $user['id'], ':is' => $idSolicitud]);

            // Actualizar la práctica vinculada como convalidación
            $db->prepare("
                UPDATE practicas SET modalidad='convalidacion', estado='completado'
                WHERE id_practica = (SELECT id_practica FROM convalidaciones WHERE id_solicitud=:is)
            ")->execute([':is' => $idSolicitud]);

            flashSet('ok', 'Solicitud de convalidación aprobada. La práctica fue actualizada.');
        } else {
            $db->prepare("
                UPDATE convalidaciones
                SET estado='rechazada', resolucion=:obs, resuelto_por=:uid, resuelto_at=NOW(), updated_at=NOW()
                WHERE id_solicitud=:is
            ")->execute([':obs' => $obs, ':uid' => $user['id'], ':is' => $idSolicitud]);
            flashSet('err', 'Solicitud rechazada.');
        }
        // Notificar al estudiante
        $stEst2 = $db->prepare("
            SELECT e.id_usuario, CONCAT(u.nombres,' ',u.apellidos) AS nombre
            FROM convalidaciones cs
            JOIN estudiantes e ON e.id_estudiante=cs.id_estudiante
            JOIN usuarios u ON u.id_usuario=e.id_usuario
            WHERE cs.id_solicitud=:is LIMIT 1
        ");
        $stEst2->execute([':is' => $idSolicitud]);
        $est2 = $stEst2->fetch();
        if ($est2) {
            $msg = $accion === 'aprobar_solicitud'
                ? "Tu solicitud de convalidación de prácticas preprofesionales fue APROBADA. " . ($obs ? "Nota: {$obs}" : '')
                : "Tu solicitud de convalidación fue RECHAZADA. " . ($obs ? "Motivo: {$obs}" : '');
            $db->prepare("INSERT INTO notificaciones(id_usuario,tipo,asunto,mensaje) VALUES(:uid,'sistema',:as,:msg)")
               ->execute([':uid' => $est2['id_usuario'], ':as' => 'Resolución de convalidación PPP', ':msg' => $msg]);
        }
    }

    header("Location: convalidaciones.php"); exit;
}

// ── LISTADO DE SOLICITUDES ───────────────────────────────────────────────────
$filtroEstado = $_GET['estado']  ?? '';
$filPer       = (int)($_GET['periodo'] ?? 0);
$filCar       = (int)($_GET['carrera'] ?? 0);
$perPage      = in_array((int)($_GET['pp'] ?? 25), [10,25,100,200]) ? (int)($_GET['pp'] ?? 25) : 25;
$page         = max(1, (int)($_GET['page'] ?? 1));
$offset       = ($page - 1) * $perPage;

$where  = $filtroEstado ? "AND cs.estado = :est" : "";
$params = $filtroEstado ? [':est' => $filtroEstado] : [];
if ($filPer) { $where .= " AND p.id_periodo = $filPer"; }
if ($filCar) { $where .= " AND e.id_carrera  = $filCar"; }

// Total para paginación
$stTotal = $db->prepare("
    SELECT COUNT(*) FROM convalidaciones cs
    JOIN practicas p     ON p.id_practica    = cs.id_practica
    JOIN estudiantes e   ON e.id_estudiante  = cs.id_estudiante
    JOIN usuarios u      ON u.id_usuario     = e.id_usuario
    JOIN carreras c      ON c.id_carrera     = e.id_carrera
    JOIN periodos_academicos per ON per.id_periodo = p.id_periodo
    LEFT JOIN empresas em ON em.id_empresa   = p.id_empresa
    WHERE 1=1 $where {$iCond}
");
$stTotal->execute($params);
$totalRows  = (int)$stTotal->fetchColumn();
$totalPages = $perPage > 0 && $totalRows > 0 ? max(1, (int)ceil($totalRows / $perPage)) : 1;

$stList = $db->prepare("
    SELECT cs.id_solicitud, cs.estado, cs.created_at, cs.resolucion, cs.resuelto_at,
           CONCAT(u.apellidos,' ',u.nombres) AS estudiante,
           u.cedula, u.email,
           c.nombre AS carrera,
           per.nombre AS periodo,
           COALESCE(em.razon_social, p.emp_nueva_nombre) AS empresa,
           p.id_practica, p.area_practica,
           (SELECT COUNT(*) FROM convalidacion_documentos cd WHERE cd.id_solicitud=cs.id_solicitud AND cd.estado='aprobado') AS docs_aprobados,
           (SELECT COUNT(*) FROM convalidacion_documentos cd WHERE cd.id_solicitud=cs.id_solicitud) AS docs_total
    FROM convalidaciones cs
    JOIN practicas p     ON p.id_practica    = cs.id_practica
    JOIN estudiantes e   ON e.id_estudiante  = cs.id_estudiante
    JOIN usuarios u      ON u.id_usuario     = e.id_usuario
    JOIN carreras c      ON c.id_carrera     = e.id_carrera
    JOIN periodos_academicos per ON per.id_periodo = p.id_periodo
    LEFT JOIN empresas em ON em.id_empresa   = p.id_empresa
    WHERE 1=1 $where {$iCond}
    ORDER BY cs.created_at DESC
    LIMIT $perPage OFFSET $offset
");
$stList->execute($params);
$solicitudes = $stList->fetchAll();

// Períodos y carreras para filtros
$periodos = $db->query("SELECT id_periodo, nombre FROM periodos_academicos " . ($idInst ? "WHERE id_instituto=$idInst" : "") . " ORDER BY fecha_inicio DESC")->fetchAll();
$carreras  = $db->query("SELECT id_carrera, nombre FROM carreras " . ($idInst ? "WHERE id_instituto=$idInst AND activa=1" : "WHERE activa=1") . " ORDER BY nombre")->fetchAll();

// Detalle de solicitud seleccionada
$detalle   = null;
$docsDetalle = [];
$idVer = (int)($_GET['ver'] ?? 0);
if ($idVer) {
    $stD = $db->prepare("
        SELECT cs.*, CONCAT(u.apellidos,' ',u.nombres) AS estudiante, u.cedula, u.email,
               c.nombre AS carrera, per.nombre AS periodo,
               COALESCE(em.razon_social, p.emp_nueva_nombre) AS empresa,
               p.area_practica, p.cargo_practica, p.fecha_inicio, p.fecha_fin,
               CONCAT(ur.apellidos,' ',ur.nombres) AS resuelto_nombre
        FROM convalidaciones cs
        JOIN practicas p     ON p.id_practica   = cs.id_practica
        JOIN estudiantes e   ON e.id_estudiante = cs.id_estudiante
        JOIN usuarios u      ON u.id_usuario    = e.id_usuario
        JOIN carreras c      ON c.id_carrera    = e.id_carrera
        JOIN periodos_academicos per ON per.id_periodo = p.id_periodo
        LEFT JOIN empresas em ON em.id_empresa  = p.id_empresa
        LEFT JOIN usuarios ur ON ur.id_usuario  = cs.resuelto_por
        WHERE cs.id_solicitud = :is LIMIT 1
    ");
    $stD->execute([':is' => $idVer]);
    $detalle = $stD->fetch();

    $stDocs = $db->prepare("
        SELECT cd.*, ua.nombres AS ap_nombres, ua.apellidos AS ap_apellidos
        FROM convalidacion_documentos cd
        LEFT JOIN usuarios ua ON ua.id_usuario = cd.aprobado_por
        WHERE cd.id_solicitud = :is ORDER BY cd.codigo_doc
    ");
    $stDocs->execute([':is' => $idVer]);
    $docsRows = $stDocs->fetchAll();
    foreach ($docsRows as $r) { $docsDetalle[$r['codigo_doc']] = $r; }
}

// Estadísticas rápidas
$stats = $db->query("
    SELECT
        SUM(estado='pendiente') AS pendientes,
        SUM(estado='en_revision') AS en_revision,
        SUM(estado='aprobada') AS aprobadas,
        SUM(estado='rechazada') AS rechazadas,
        COUNT(*) AS total
    FROM convalidaciones
")->fetch() ?: ['pendientes'=>0,'en_revision'=>0,'aprobadas'=>0,'rechazadas'=>0,'total'=>0];
?>
<?php $paginaActual = 'convalidaciones'; ?>
<!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">
<style>
/* ── Tarjetas de estado ── */
.conv-stat { background:#ffffff; border:1px solid #dde3ed; border-radius:10px; padding:14px 18px; text-align:center; box-shadow:0 1px 4px rgba(0,0,0,.06); }
.conv-stat .num { font-size:26px; font-weight:700; line-height:1; }
.conv-stat .lbl { font-size:11px; color:#64748b; margin-top:4px; }

/* ── Tabla de solicitudes ── */
.tbl-conv { width:100%; border-collapse:collapse; font-size:13px; }
.tbl-conv th { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.5px;
  color:#8b949e; border-bottom:1px solid #30363d; padding:8px 10px; text-align:left; }
.tbl-conv td { padding:10px 10px; border-bottom:1px solid #21262d; vertical-align:middle; }
.tbl-conv tr:hover td { background:#161b22; }

/* ── Chips de estado ── */
.chip { font-size:10px; font-weight:700; padding:3px 9px; border-radius:20px;
  text-transform:uppercase; letter-spacing:.4px; white-space:nowrap; }
.chip-pend   { background:#e5a50a18; color:#e5a50a; border:1px solid #e5a50a33; }
.chip-rev    { background:#2ea8ff18; color:#2ea8ff; border:1px solid #2ea8ff33; }
.chip-apr    { background:#3dffa018; color:#3dffa0; border:1px solid #3dffa033; }
.chip-rech   { background:#ff444418; color:#ff8888; border:1px solid #ff444433; }
.chip-obs    { background:#ff444418; color:#ff8888; border:1px solid #ff444433; }
.chip-env    { background:#2ea8ff18; color:#2ea8ff; border:1px solid #2ea8ff33; }

/* ── Panel de detalle ── */
.detalle-panel { background:#161b22; border:1px solid #30363d; border-radius:12px; padding:20px 24px; }
.section-lbl { font-size:10px; font-weight:700; color:#8b949e; text-transform:uppercase;
  letter-spacing:.7px; border-bottom:1px solid #30363d; padding-bottom:6px; margin:18px 0 12px; }

/* ── Tarjeta de documento ── */
.doc-card { border:1px solid #30363d; border-radius:10px; overflow:hidden; margin-bottom:10px;
  background:#0d1117; transition:border-color .2s; }
.doc-card:hover { border-color:#2ea8ff33; }
.doc-barra { width:5px; flex-shrink:0; }
.doc-body { flex:1; padding:12px 16px; min-width:0; }
.doc-actions { display:flex; flex-wrap:wrap; gap:8px; padding:10px 16px;
  border-top:1px solid #21262d; background:#0d111780; }

/* ── Botones ── */
.btn-ac { padding:7px 14px; border-radius:8px; font-size:12px; font-weight:600;
  cursor:pointer; border:none; text-decoration:none; display:inline-flex;
  align-items:center; gap:6px; white-space:nowrap; }
.btn-ver    { background:#2ea8ff18; color:#2ea8ff; border:1px solid #2ea8ff40; }
.btn-pdf    { background:#8b5cf618; color:#a78bfa; border:1px solid #8b5cf640; }
.btn-apr    { background:#3dffa018; color:#3dffa0; border:1px solid #3dffa040; }
.btn-obs    { background:#ff444418; color:#ff9090; border:1px solid #ff444440; }
.btn-dis    { background:#21262d;   color:#8b949e; border:1px solid #30363d;   cursor:default; }
.btn-aprtot { background:#3dffa025; color:#3dffa0; border:1px solid #3dffa060; font-size:13px; padding:9px 20px; }
.btn-rejtot { background:#ff444420; color:#ff8888; border:1px solid #ff444450; font-size:13px; padding:9px 20px; }

/* ── Form observación ── */
.obs-form { display:none; width:100%; margin-top:8px; padding:12px;
  background:#0d1117; border-radius:8px; border:1px solid #ff444430; }
.obs-form textarea { width:100%; background:#161b22; border:1px solid #30363d; color:#e6edf3;
  border-radius:6px; padding:8px 10px; font-size:12px; resize:vertical; min-height:60px; }
.obs-form textarea:focus { outline:none; border-color:#ff444488; }

/* ── Form resolución ── */
.res-form { display:none; background:#0d1117; border:1px solid #30363d; border-radius:10px;
  padding:14px 16px; margin-top:14px; }
.res-form textarea { width:100%; background:#161b22; border:1px solid #30363d; color:#e6edf3;
  border-radius:6px; padding:8px 10px; font-size:12px; resize:vertical; min-height:70px; }
.res-form textarea:focus { outline:none; border-color:#2ea8ff44; }

/* Barra de progreso docs */
.prog-bar { height:5px; background:#21262d; border-radius:3px; overflow:hidden; margin-top:6px; }
.prog-bar-fill { height:100%; border-radius:3px; transition:width .4s; }
</style>
</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-coordinador.php'; ?>

  <main class="main-area">
    <?= flashHtml() ?>

    <?php if ($idVer && $detalle): ?>
    <!-- ═══════════════════════════════════════════════════════════
         VISTA DETALLE DE SOLICITUD
    ═══════════════════════════════════════════════════════════ -->
    <div class="mb-3">
      <a href="convalidaciones.php" style="font-size:12px;color:#8b949e;text-decoration:none;">
        <i class="fa fa-arrow-left me-1"></i> Volver a Convalidaciones
      </a>
    </div>

    <!-- Cabecera estudiante -->
    <div class="detalle-panel mb-4">
      <div class="d-flex align-items-start justify-content-between flex-wrap gap-3">
        <div>
          <div style="font-size:18px;font-weight:700;color:#e6edf3;">
            <?= htmlspecialchars($detalle['estudiante']) ?>
          </div>
          <div style="font-size:12px;color:#8b949e;margin-top:4px;">
            CI: <?= htmlspecialchars($detalle['cedula']) ?> &nbsp;·&nbsp;
            <?= htmlspecialchars($detalle['carrera']) ?> &nbsp;·&nbsp;
            <?= htmlspecialchars($detalle['periodo']) ?>
          </div>
          <div style="font-size:12px;color:#8b949e;margin-top:2px;">
            Empresa: <?= htmlspecialchars($detalle['empresa'] ?? '—') ?>
            <?php if ($detalle['area_practica']): ?>
              &nbsp;·&nbsp; Área: <?= htmlspecialchars($detalle['area_practica']) ?>
            <?php endif; ?>
          </div>
          <div style="margin-top:10px;">
            <?php
            $estadoD = $detalle['estado'];
            $chipCls = match($estadoD){
              'aprobada'   => 'chip-apr',
              'rechazada'  => 'chip-rech',
              'en_revision'=> 'chip-rev',
              default      => 'chip-pend'
            };
            $chipLbl = match($estadoD){
              'aprobada'   => '✓ Aprobada',
              'rechazada'  => '✕ Rechazada',
              'en_revision'=> '⏳ En revisión',
              default      => '· Pendiente'
            };
            ?>
            <span class="chip <?= $chipCls ?>"><?= $chipLbl ?></span>
            <span style="font-size:11px;color:#8b949e;margin-left:10px;">
              Solicitud #<?= $idVer ?> — <?= date('d/m/Y', strtotime($detalle['created_at'])) ?>
            </span>
          </div>
        </div>
        <!-- Progreso documentos -->
        <?php
        $docsApr = count(array_filter($docsDetalle, fn($d) => $d['estado']==='aprobado'));
        $docsTotal = count($DOCS_CONV);
        $pctDocs = $docsTotal ? round(($docsApr/$docsTotal)*100) : 0;
        ?>
        <div style="text-align:center;min-width:90px;">
          <div style="font-size:28px;font-weight:700;color:<?= $pctDocs==100?'#3dffa0':'#2ea8ff' ?>;"><?= $pctDocs ?>%</div>
          <div style="font-size:10px;color:#8b949e;"><?= $docsApr ?>/<?= $docsTotal ?> docs aprobados</div>
        </div>
      </div>
      <div class="prog-bar mt-3">
        <div class="prog-bar-fill" style="width:<?= $pctDocs ?>%;background:<?= $pctDocs==100?'#3dffa0':'#2ea8ff' ?>;"></div>
      </div>
    </div>

    <!-- Documentos -->
    <div class="section-lbl"><i class="fa fa-file-lines me-2" style="color:#2ea8ff;"></i>Documentos de Convalidación</div>

    <?php foreach ($DOCS_CONV as $cod => $titulo):
      $doc    = $docsDetalle[$cod] ?? null;
      $estado = $doc['estado'] ?? 'pendiente';
      $colorBorde = match($estado){
        'aprobado'  => '#3dffa0',
        'enviado'   => '#2ea8ff',
        'observado' => '#ff8888',
        default     => '#30363d',
      };
      $chipCls2 = match($estado){
        'aprobado' =>'chip-apr','enviado'=>'chip-env','observado'=>'chip-obs', default=>'chip-pend'
      };
      $chipLbl2 = match($estado){
        'aprobado'=>'✓ Aprobado','enviado'=>'⏳ En revisión','observado'=>'⚠ Con observación',default=>'· Sin subir'
      };
    ?>
    <div class="doc-card">
      <div style="display:flex;align-items:stretch;">
        <div class="doc-barra" style="background:<?= $colorBorde ?>;"></div>
        <div class="doc-body">
          <div class="d-flex align-items-center gap-2 mb-1">
            <span style="font-family:monospace;font-size:11px;color:#2ea8ff;font-weight:700;"><?= $cod ?></span>
            <span class="chip <?= $chipCls2 ?>"><?= $chipLbl2 ?></span>
          </div>
          <div style="font-size:13px;font-weight:600;color:#e6edf3;"><?= htmlspecialchars($titulo) ?></div>
          <?php if ($doc && $doc['subido_at']): ?>
          <div style="font-size:11px;color:#8b949e;margin-top:4px;">
            <i class="fa fa-upload me-1"></i>Subido: <?= date('d/m/Y H:i', strtotime($doc['subido_at'])) ?>
            <?php if ($estado==='aprobado' && $doc['aprobado_at']): ?>
              &nbsp;·&nbsp;<i class="fa fa-circle-check me-1" style="color:#3dffa0;"></i>
              Aprobado: <?= date('d/m/Y H:i', strtotime($doc['aprobado_at'])) ?>
            <?php endif; ?>
          </div>
          <?php elseif (!$doc): ?>
          <div style="font-size:11px;color:#8b949e;margin-top:4px;"><i class="fa fa-hourglass-half me-1"></i>El estudiante aún no ha subido este documento.</div>
          <?php endif; ?>

          <?php if ($estado==='observado' && $doc['observacion']): ?>
          <div style="background:#ff444410;border:1px solid #ff444430;border-radius:7px;padding:7px 10px;font-size:12px;color:#ff9090;margin-top:6px;">
            <i class="fa fa-triangle-exclamation me-1"></i>
            <strong>Observación:</strong> <?= htmlspecialchars($doc['observacion']) ?>
          </div>
          <?php endif; ?>
        </div>
      </div>

      <!-- Acciones -->
      <div class="doc-actions">
        <?php if ($doc && $doc['ruta_archivo']): ?>
        <a href="<?= BASE_URL ?>/api/ver_doc_convalidacion.php?solicitud=<?= $idVer ?>&doc=<?= urlencode($cod) ?>"
           target="_blank" class="btn-ac btn-pdf">
          <i class="fa fa-file-pdf"></i> Ver documento
        </a>
        <?php else: ?>
        <span class="btn-ac btn-dis"><i class="fa fa-clock"></i> Esperando documento</span>
        <?php endif; ?>

        <?php if ($doc && in_array($estado, ['enviado','observado','aprobado']) && in_array($detalle['estado'], ['pendiente','en_revision'])): ?>
          <?php if ($estado !== 'aprobado'): ?>
          <form method="POST" style="margin:0;" onsubmit="return confirm('¿Aprobar <?= $cod ?>?');">
            <input type="hidden" name="accion"       value="aprobar_doc">
            <input type="hidden" name="id_solicitud" value="<?= $idVer ?>">
            <input type="hidden" name="codigo_doc"   value="<?= $cod ?>">
            <button type="submit" class="btn-ac btn-apr"><i class="fa fa-circle-check"></i> Aprobar</button>
          </form>
          <?php else: ?>
          <span class="btn-ac" style="background:#3dffa010;color:#3dffa0;border:1px solid #3dffa030;cursor:default;">
            <i class="fa fa-check-double"></i> Ya aprobado
          </span>
          <?php endif; ?>

          <button type="button" class="btn-ac btn-obs" onclick="toggleObs('<?= $cod ?>')">
            <i class="fa fa-comment-dots"></i> Observar / Devolver
          </button>
          <div class="obs-form w-100" id="obs-<?= $cod ?>">
            <form method="POST">
              <input type="hidden" name="accion"       value="observar_doc">
              <input type="hidden" name="id_solicitud" value="<?= $idVer ?>">
              <input type="hidden" name="codigo_doc"   value="<?= $cod ?>">
              <textarea name="observacion" placeholder="Describe qué debe corregir o adjuntar el estudiante..." required></textarea>
              <div class="d-flex gap-2 mt-2">
                <button type="submit" class="btn-ac btn-obs"><i class="fa fa-paper-plane"></i> Enviar observación</button>
                <button type="button" class="btn-ac btn-dis" onclick="toggleObs('<?= $cod ?>')"><i class="fa fa-xmark"></i> Cancelar</button>
              </div>
            </form>
          </div>
        <?php endif; ?>
      </div>
    </div>
    <?php endforeach; ?>

    <!-- Resolución final -->
    <?php if (in_array($detalle['estado'], ['pendiente','en_revision'])): ?>
    <div class="section-lbl mt-4"><i class="fa fa-gavel me-2" style="color:#e5a50a;"></i>Resolución Final</div>
    <div style="display:flex;gap:12px;flex-wrap:wrap;">
      <button class="btn-ac btn-aprtot" onclick="toggleRes('apr')"><i class="fa fa-circle-check"></i> Aprobar convalidación</button>
      <button class="btn-ac btn-rejtot" onclick="toggleRes('rej')"><i class="fa fa-circle-xmark"></i> Rechazar convalidación</button>
    </div>
    <div class="res-form" id="res-apr">
      <div style="font-size:12px;color:#3dffa0;margin-bottom:8px;"><i class="fa fa-circle-check me-1"></i><strong>Aprobar convalidación</strong> — Se marcará la práctica como completada con modalidad convalidación.</div>
      <form method="POST">
        <input type="hidden" name="accion"       value="aprobar_solicitud">
        <input type="hidden" name="id_solicitud" value="<?= $idVer ?>">
        <textarea name="obs_resolucion" placeholder="Observaciones o notas de la resolución (opcional)..."></textarea>
        <div class="d-flex gap-2 mt-2">
          <button type="submit" class="btn-ac btn-aprtot" onclick="return confirm('¿Confirmar aprobación de la convalidación?')">
            <i class="fa fa-circle-check"></i> Confirmar aprobación
          </button>
          <button type="button" class="btn-ac btn-dis" onclick="toggleRes('apr')"><i class="fa fa-xmark"></i> Cancelar</button>
        </div>
      </form>
    </div>
    <div class="res-form" id="res-rej">
      <div style="font-size:12px;color:#ff9090;margin-bottom:8px;"><i class="fa fa-circle-xmark me-1"></i><strong>Rechazar convalidación</strong> — Se notificará al estudiante el motivo.</div>
      <form method="POST">
        <input type="hidden" name="accion"       value="rechazar_solicitud">
        <input type="hidden" name="id_solicitud" value="<?= $idVer ?>">
        <textarea name="obs_resolucion" placeholder="Motivo del rechazo (obligatorio)..." required></textarea>
        <div class="d-flex gap-2 mt-2">
          <button type="submit" class="btn-ac btn-rejtot" onclick="return confirm('¿Confirmar rechazo de la convalidación?')">
            <i class="fa fa-circle-xmark"></i> Confirmar rechazo
          </button>
          <button type="button" class="btn-ac btn-dis" onclick="toggleRes('rej')"><i class="fa fa-xmark"></i> Cancelar</button>
        </div>
      </form>
    </div>
    <?php elseif ($detalle['estado'] === 'aprobada'): ?>
    <div style="background:#3dffa012;border:1px solid #3dffa030;border-radius:10px;padding:14px 16px;margin-top:16px;font-size:13px;color:#3dffa0;">
      <i class="fa fa-trophy me-2"></i><strong>Convalidación aprobada</strong>
      el <?= date('d/m/Y', strtotime($detalle['resuelto_at'])) ?>
      por <?= htmlspecialchars($detalle['resuelto_nombre'] ?? '—') ?>
      <?php if ($detalle['resolucion']): ?>
        <div style="margin-top:6px;font-size:12px;color:#8b949e;"><?= htmlspecialchars($detalle['resolucion']) ?></div>
      <?php endif; ?>
    </div>
    <?php elseif ($detalle['estado'] === 'rechazada'): ?>
    <div style="background:#ff444412;border:1px solid #ff444430;border-radius:10px;padding:14px 16px;margin-top:16px;font-size:13px;color:#ff9090;">
      <i class="fa fa-circle-xmark me-2"></i><strong>Convalidación rechazada</strong>
      el <?= date('d/m/Y', strtotime($detalle['resuelto_at'])) ?>
      <?php if ($detalle['resolucion']): ?>
        <div style="margin-top:6px;font-size:12px;"><?= htmlspecialchars($detalle['resolucion']) ?></div>
      <?php endif; ?>
    </div>
    <?php endif; ?>

    <?php else: ?>
    <!-- ═══════════════════════════════════════════════════════════
         LISTA DE SOLICITUDES
    ═══════════════════════════════════════════════════════════ -->

    <!-- Stats -->
    <div class="row g-3 mb-4">
      <div class="col-6 col-md-3">
        <div class="conv-stat">
          <div class="num" style="color:#e5a50a;"><?= $stats['pendientes'] ?></div>
          <div class="lbl">Pendientes</div>
        </div>
      </div>
      <div class="col-6 col-md-3">
        <div class="conv-stat">
          <div class="num" style="color:#2ea8ff;"><?= $stats['en_revision'] ?></div>
          <div class="lbl">En revisión</div>
        </div>
      </div>
      <div class="col-6 col-md-3">
        <div class="conv-stat">
          <div class="num" style="color:#3dffa0;"><?= $stats['aprobadas'] ?></div>
          <div class="lbl">Aprobadas</div>
        </div>
      </div>
      <div class="col-6 col-md-3">
        <div class="conv-stat">
          <div class="num" style="color:#ff8888;"><?= $stats['rechazadas'] ?></div>
          <div class="lbl">Rechazadas</div>
        </div>
      </div>
    </div>

    <!-- Filtros -->
    <div class="d-flex gap-2 mb-3 flex-wrap align-items-center"
         style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:12px 16px;">

      <!-- Estado -->
      <div class="d-flex gap-1 flex-wrap">
        <?php foreach ([''=>'Todas','pendiente'=>'Pendientes','en_revision'=>'En revisión','aprobada'=>'Aprobadas','rechazada'=>'Rechazadas'] as $e=>$lbl): ?>
        <a href="?estado=<?= $e ?>&periodo=<?= $filPer ?>&carrera=<?= $filCar ?>&pp=<?= $perPage ?>&page=1"
           class="btn btn-sm <?= $filtroEstado===$e ? 'btn-primary' : 'btn-outline-secondary' ?>"
           style="font-size:12px;">
          <?= $lbl ?>
        </a>
        <?php endforeach; ?>
      </div>

      <div class="vr d-none d-md-block" style="height:28px;margin:0 4px;"></div>

      <!-- Período -->
      <select onchange="applyFilter()" id="selPer"
              style="font-size:12px;padding:5px 10px;border:1px solid #cbd5e1;border-radius:7px;color:#475569;background:#fff;">
        <option value="0">— Todos los períodos —</option>
        <?php foreach ($periodos as $per): ?>
        <option value="<?= $per['id_periodo'] ?>" <?= $filPer==$per['id_periodo']?'selected':'' ?>>
          <?= htmlspecialchars($per['nombre']) ?>
        </option>
        <?php endforeach; ?>
      </select>

      <!-- Carrera -->
      <select onchange="applyFilter()" id="selCar"
              style="font-size:12px;padding:5px 10px;border:1px solid #cbd5e1;border-radius:7px;color:#475569;background:#fff;">
        <option value="0">— Todas las carreras —</option>
        <?php foreach ($carreras as $car): ?>
        <option value="<?= $car['id_carrera'] ?>" <?= $filCar==$car['id_carrera']?'selected':'' ?>>
          <?= htmlspecialchars($car['nombre']) ?>
        </option>
        <?php endforeach; ?>
      </select>

      <!-- Por página -->
      <div class="ms-auto d-flex align-items-center gap-2">
        <span style="font-size:12px;color:#64748b;">Mostrar</span>
        <?php foreach ([10,25,100,200] as $pp): ?>
        <a href="?estado=<?= $filtroEstado ?>&periodo=<?= $filPer ?>&carrera=<?= $filCar ?>&pp=<?= $pp ?>&page=1"
           class="btn btn-sm <?= $perPage==$pp?'btn-primary':'btn-outline-secondary' ?>"
           style="font-size:12px;min-width:36px;">
          <?= $pp ?>
        </a>
        <?php endforeach; ?>
      </div>
    </div>

    <!-- Info resultados -->
    <div style="font-size:12px;color:#64748b;margin-bottom:8px;">
      Mostrando <?= $totalRows > 0 ? min($offset+1,$totalRows) : 0 ?>–<?= min($offset+$perPage,$totalRows) ?> de <?= $totalRows ?> registros
    </div>

    <!-- Tabla -->
    <div style="background:#ffffff;border:1px solid #dde3ed;border-radius:12px;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.06);">
      <?php if (empty($solicitudes)): ?>
      <div style="padding:40px;text-align:center;color:#94a3b8;font-size:13px;background:#f8fafc;">
        <i class="fa fa-inbox" style="font-size:28px;display:block;margin-bottom:10px;"></i>
        No hay solicitudes de convalidación<?= $filtroEstado ? ' con estado "' . htmlspecialchars($filtroEstado) . '"' : '' ?>.
      </div>
      <?php else: ?>
      <table class="tbl-conv">
        <thead>
          <tr>
            <th>#</th>
            <th>Estudiante</th>
            <th>Carrera</th>
            <th>Empresa</th>
            <th>Periodo</th>
            <th>Docs</th>
            <th>Estado</th>
            <th>Fecha</th>
            <th></th>
          </tr>
        </thead>
        <tbody>
        <?php foreach ($solicitudes as $s):
          $scls = match($s['estado']){
            'aprobada'=>'chip-apr','rechazada'=>'chip-rech','en_revision'=>'chip-rev',default=>'chip-pend'
          };
          $slbl = match($s['estado']){
            'aprobada'=>'Aprobada','rechazada'=>'Rechazada','en_revision'=>'En revisión',default=>'Pendiente'
          };
          $pctD = $s['docs_total'] ? round(($s['docs_aprobados']/$s['docs_total'])*100) : 0;
        ?>
        <tr>
          <td style="font-family:monospace;font-size:11px;color:#94a3b8;">#<?= $s['id_solicitud'] ?></td>
          <td>
            <div style="font-weight:600;font-size:13px;color:#0f172a;"><?= htmlspecialchars($s['estudiante']) ?></div>
            <div style="font-size:11px;color:#64748b;"><?= htmlspecialchars($s['cedula']) ?></div>
          </td>
          <td style="font-size:12px;color:#475569;"><?= htmlspecialchars($s['carrera']) ?></td>
          <td style="font-size:12px;color:#64748b;"><?= htmlspecialchars($s['empresa'] ?? '—') ?></td>
          <td style="font-size:12px;color:#64748b;"><?= htmlspecialchars($s['periodo']) ?></td>
          <td style="min-width:80px;">
            <div style="font-size:11px;color:#64748b;margin-bottom:3px;"><?= $s['docs_aprobados'] ?>/<?= $s['docs_total'] ?: count($DOCS_CONV) ?></div>
            <div class="prog-bar"><div class="prog-bar-fill" style="width:<?= $pctD ?>%;background:<?= $pctD==100?'#3dffa0':'#2ea8ff' ?>;"></div></div>
          </td>
          <td><span class="chip <?= $scls ?>"><?= $slbl ?></span></td>
          <td style="font-size:11px;color:#64748b;"><?= date('d/m/Y', strtotime($s['created_at'])) ?></td>
          <td>
            <a href="?ver=<?= $s['id_solicitud'] ?>" class="btn-ac btn-ver" style="padding:5px 12px;font-size:11px;">
              <i class="fa fa-eye"></i> Revisar
            </a>
          </td>
        </tr>
        <?php endforeach; ?>
        </tbody>
      </table>
      <?php endif; ?>
    </div>

    <!-- Paginación -->
    <?php if ($totalPages > 1): ?>
    <div class="d-flex justify-content-center align-items-center gap-1 mt-3 flex-wrap">
      <?php if ($page > 1): ?>
      <a href="?estado=<?=$filtroEstado?>&periodo=<?=$filPer?>&carrera=<?=$filCar?>&pp=<?=$perPage?>&page=<?=$page-1?>"
         class="btn btn-sm btn-outline-secondary" style="font-size:12px;">
        <i class="fa fa-chevron-left"></i>
      </a>
      <?php endif; ?>
      <?php for ($pg = max(1,$page-2); $pg <= min($totalPages,$page+2); $pg++): ?>
      <a href="?estado=<?=$filtroEstado?>&periodo=<?=$filPer?>&carrera=<?=$filCar?>&pp=<?=$perPage?>&page=<?=$pg?>"
         class="btn btn-sm <?= $pg==$page?'btn-primary':'btn-outline-secondary' ?>" style="font-size:12px;min-width:36px;">
        <?= $pg ?>
      </a>
      <?php endfor; ?>
      <?php if ($page < $totalPages): ?>
      <a href="?estado=<?=$filtroEstado?>&periodo=<?=$filPer?>&carrera=<?=$filCar?>&pp=<?=$perPage?>&page=<?=$page+1?>"
         class="btn btn-sm btn-outline-secondary" style="font-size:12px;">
        <i class="fa fa-chevron-right"></i>
      </a>
      <?php endif; ?>
    </div>
    <?php endif; ?>

    <?php endif; ?>
  </main>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.bundle.min.js"></script>
<script>
function applyFilter() {
  var estado  = '<?= $filtroEstado ?>';
  var pp      = '<?= $perPage ?>';
  var periodo = document.getElementById('selPer').value;
  var carrera = document.getElementById('selCar').value;
  window.location.href = '?estado=' + estado + '&periodo=' + periodo + '&carrera=' + carrera + '&pp=' + pp + '&page=1';
}
function toggleObs(cod) {
  const el = document.getElementById('obs-' + cod);
  el.style.display = el.style.display === 'block' ? 'none' : 'block';
  if (el.style.display === 'block') el.querySelector('textarea').focus();
}
function toggleRes(tipo) {
  const ids = ['res-apr', 'res-rej'];
  const target = 'res-' + tipo;
  ids.forEach(id => {
    const el = document.getElementById(id);
    if (!el) return;
    if (id === target) {
      el.style.display = el.style.display === 'block' ? 'none' : 'block';
    } else {
      el.style.display = 'none';
    }
  });
}
</script>
</body>
</html>