<?php
// modules/coordinador/revisar_expediente.php
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';
require_once __DIR__ . '/../../includes/flash.php';
requireRol(ROL_COORDINADOR);

$db         = getDB();
$user       = currentUser();
$idPractica = (int)($_GET['practica'] ?? 0);
if (!$idPractica) { header('Location: expedientes.php'); exit; }

// ── Detectar modalidad + solicitud de convalidación ───────────────
$stModal = $db->prepare("
    SELECT p.modalidad,
           CASE WHEN p.modalidad = 'convalidacion' OR conv.id_solicitud IS NOT NULL
                THEN 'convalidacion' ELSE 'practica_laboral' END AS modalidad_real,
           conv.id_solicitud
    FROM   practicas p
    LEFT JOIN convalidaciones conv ON conv.id_practica = p.id_practica
    WHERE  p.id_practica = :ip
    LIMIT  1
");
$stModal->execute([':ip' => $idPractica]);
$modalRow    = $stModal->fetch();
if (!$modalRow) { header('Location: expedientes.php'); exit; }
$esConval    = ($modalRow['modalidad_real'] === 'convalidacion');
$idSolicitud = $modalRow['id_solicitud'] ?? null;

// ── Catálogos de documentos según modalidad ───────────────────────
$DOCS_PPP = [
    '001'  => 'Solicitud para Oficializar las Prácticas',
    '002'  => 'Carta del Instituto a la Empresa',
    '003'  => 'Carta de la Empresa al Instituto',
    '004'  => 'Ficha de Designación del Tutor Académico',
    '002A' => 'Ficha General Estudiante-Empresa',
    '005'  => 'Orientaciones de Seguridad',
    '008'  => 'Ficha de Supervisión - Tutor Empresarial',
    '009'  => 'Ficha de Supervisión - Tutor Académico',
    '010'  => 'Ficha de Evaluación por la Empresa',
    '011'  => 'Certificado de Culminación - Empresa',
    '012'  => 'Certificado de Culminación - Instituto',
];
$DOCS_CON = [
    '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',
];
$DOCS      = $esConval ? $DOCS_CON : $DOCS_PPP;
$totalDocs = $esConval ? 5 : 11;
$prefijo   = $esConval ? '' : 'PPP-'; // CON-001 ya trae su prefijo

// ── ACCIÓN POST ───────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $accion    = $_POST['accion']     ?? '';
    $codigoDoc = $_POST['codigo_doc'] ?? '';
    $observ    = trim($_POST['observacion'] ?? '');

    if (in_array($accion, ['aprobar','observar'])) {

        if ($esConval && $idSolicitud) {
            // ── CONVALIDACIÓN: opera sobre convalidacion_documentos ──
            $validosCon = array_keys($DOCS_CON);
            if (in_array($codigoDoc, $validosCon)) {
                if ($accion === 'aprobar') {
                    $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 correctamente.");

                } elseif ($accion === 'observar' && $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.");
                }
                if (function_exists('registrarAudit'))
                    registrarAudit($user['id'], "con_{$accion}", 'convalidacion_documentos', $idSolicitud);
            }

        } else {
            // ── PPP: opera sobre documentos_ppp_gestion ──────────────
            $validosPPP = array_keys($DOCS_PPP);
            if (in_array($codigoDoc, $validosPPP)) {
                if ($accion === 'aprobar') {
                    $db->prepare("
                        UPDATE documentos_ppp_gestion
                        SET estado='aprobado', observacion=NULL,
                            aprobado_por=:uid, aprobado_at=NOW(), updated_at=NOW()
                        WHERE id_practica=:ip AND codigo_doc=:cod AND estado IN ('enviado','observado')
                    ")->execute([':uid'=>$user['id'],':ip'=>$idPractica,':cod'=>$codigoDoc]);
                    flashSet('ok', "Documento PPP-{$codigoDoc} aprobado correctamente.");

                } elseif ($accion === 'observar' && $observ !== '') {
                    $db->prepare("
                        UPDATE documentos_ppp_gestion
                        SET estado='observado', observacion=:obs, updated_at=NOW()
                        WHERE id_practica=:ip AND codigo_doc=:cod AND estado IN ('enviado','aprobado','observado')
                    ")->execute([':obs'=>$observ,':ip'=>$idPractica,':cod'=>$codigoDoc]);
                    flashSet('info', "Documento PPP-{$codigoDoc} devuelto con observación.");

                    // Notificar al estudiante
                    $stEst = $db->prepare("
                        SELECT u.id_usuario FROM practicas p
                        JOIN estudiantes e ON e.id_estudiante=p.id_estudiante
                        JOIN usuarios u ON u.id_usuario=e.id_usuario
                        WHERE p.id_practica=:ip LIMIT 1
                    ");
                    $stEst->execute([':ip'=>$idPractica]);
                    $estUser = $stEst->fetch();
                    if ($estUser) {
                        $db->prepare("INSERT INTO notificaciones(id_usuario,tipo,asunto,mensaje)
                                      VALUES(:uid,'sistema',:asunto,:msg)")
                           ->execute([
                               ':uid'    => $estUser['id_usuario'],
                               ':asunto' => "Observación en documento PPP-{$codigoDoc}",
                               ':msg'    => "El coordinador devolvió PPP-{$codigoDoc}: {$observ}",
                           ]);
                    }
                }
                if (function_exists('registrarAudit'))
                    registrarAudit($user['id'], "ppp_{$accion}", 'documentos_ppp_gestion', $idPractica);
            }
        }
    }
    header("Location: revisar_expediente.php?practica={$idPractica}"); exit;
}

// ── Datos de la práctica y estudiante ────────────────────────────
$stPrac = $db->prepare("
    SELECT p.id_practica, p.estado, p.fecha_inicio, p.fecha_fin,
           p.horas_requeridas, p.horas_cumplidas, p.area_practica,
           u.nombres, u.apellidos, u.cedula, u.email,
           e.id_estudiante, e.codigo_estudiante,
           c.nombre AS carrera,
           per.nombre AS periodo,
           COALESCE(em.razon_social, p.emp_nueva_nombre) AS empresa,
           CONCAT(uc.apellidos,' ',uc.nombres) AS nombre_coordinador
    FROM   practicas p
    JOIN   estudiantes e  ON e.id_estudiante = p.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 coordinadores co ON co.id_coordinador = p.id_coordinador
    LEFT JOIN usuarios uc ON uc.id_usuario   = co.id_usuario
    WHERE  p.id_practica = :ip LIMIT 1
");
$stPrac->execute([':ip' => $idPractica]);
$prac = $stPrac->fetch();
if (!$prac) { header('Location: expedientes.php'); exit; }

// ── Documentos personales del estudiante ─────────────────────────
$DOCS_PERS = [
    'hoja_vida'         => 'Hoja de Vida',
    'cedula'            => 'Cédula de Identidad',
    'papeleta_votacion' => 'Papeleta de Votación',
];
$docsPersonales = [];
if (!$esConval) {
    try {
        $stPers = $db->prepare("
            SELECT tipo, nombre_archivo, estado, subido_at
            FROM   documentos_personales_estudiante
            WHERE  id_estudiante = :e
        ");
        $stPers->execute([':e' => $prac['id_estudiante']]);
        foreach ($stPers->fetchAll() as $r) $docsPersonales[$r['tipo']] = $r;
    } catch (Exception $ex) { $docsPersonales = []; }
}
$persSubidos = count(array_filter($docsPersonales, fn($d) => $d['estado'] === 'subido'));

// ── Cargar documentos según modalidad ────────────────────────────
$docs = [];
if ($esConval && $idSolicitud) {
    // Documentos de convalidación
    $stDocs = $db->prepare("
        SELECT cd.*, ua.nombres AS aprobado_nombres, ua.apellidos AS aprobado_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' => $idSolicitud]);
    foreach ($stDocs->fetchAll() as $r) { $docs[$r['codigo_doc']] = $r; }
} else {
    // Documentos PPP
    $stDocs = $db->prepare("
        SELECT dpg.*, ua.nombres AS aprobado_nombres, ua.apellidos AS aprobado_apellidos
        FROM   documentos_ppp_gestion dpg
        LEFT JOIN usuarios ua ON ua.id_usuario = dpg.aprobado_por
        WHERE  dpg.id_practica = :ip
        ORDER BY dpg.codigo_doc
    ");
    $stDocs->execute([':ip' => $idPractica]);
    foreach ($stDocs->fetchAll() as $r) { $docs[$r['codigo_doc']] = $r; }
}

$aprobados = count(array_filter($docs, fn($d) => $d['estado'] === 'aprobado'));
$totalDocs = $esConval ? 5 : 14; // 11 PPP + 3 personales
$aprobadosTotal = $aprobados + ($esConval ? 0 : $persSubidos);
$pageTitle = 'Expediente: ' . $prac['apellidos'] . ' ' . $prac['nombres'];
?>
<?php $paginaActual = 'expedientes'; ?>
<!DOCTYPE html>
<html lang="es">
<head><?php include __DIR__.'/../../includes/head.php'; ?>
<style>
:root {
  --bg-page:   #f0f4f8;
  --bg-card:   #ffffff;
  --bg-inner:  #f8fafc;
  --border:    #e2e8f0;
  --border-med:#cbd5e1;
  --text-main: #1e293b;
  --text-sub:  #64748b;
  --text-light:#94a3b8;
  --shadow-sm: 0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);
  --shadow-md: 0 4px 12px rgba(0,0,0,.07);
  --radius:    12px;
  --radius-sm: 8px;
}
html,body{height:100%;margin:0;padding:0;overflow-x:hidden;}
.main-area{background:var(--bg-page);min-height:100vh;padding:24px 28px 32px;}
.doc-card{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;
  margin-bottom:12px;background:var(--bg-card);box-shadow:var(--shadow-sm);
  transition:border-color .2s,box-shadow .2s;}
.doc-card:hover{box-shadow:var(--shadow-md);border-color:var(--border-med);}
.doc-card-inner{display:flex;align-items:stretch;}
.doc-barra{width:5px;flex-shrink:0;}
.doc-body{flex:1;padding:14px 18px;min-width:0;}
.doc-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px;}
.doc-code{font-family:monospace;font-size:11px;font-weight:700;}
.doc-title{font-size:13px;font-weight:600;color:var(--text-main);line-height:1.3;}
.doc-meta{font-size:11px;color:var(--text-sub);margin-top:3px;}
.doc-actions{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;
  gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--bg-inner);}
.btn-ap{padding:7px 16px;border-radius:var(--radius-sm);font-size:12px;font-weight:600;
  cursor:pointer;border:1px solid transparent;text-decoration:none;
  display:inline-flex;align-items:center;gap:6px;white-space:nowrap;transition:opacity .15s;}
.btn-ap:hover{opacity:.85;}
.btn-ver     {background:rgba(59,130,246,.08); color:#2563eb;border-color:rgba(59,130,246,.25);}
.btn-pdf     {background:rgba(139,92,246,.08); color:#7c3aed;border-color:rgba(139,92,246,.25);}
.btn-aprobar {background:rgba(16,185,129,.08); color:#059669;border-color:rgba(16,185,129,.25);}
.btn-observar{background:rgba(239,68,68,.08);  color:#dc2626;border-color:rgba(239,68,68,.25);}
.btn-disabled{background:var(--bg-inner);color:var(--text-light);border-color:var(--border);cursor:default;opacity:.8;}
.obs-form{display:none;width:100%;margin-top:8px;padding:12px;
  background:rgba(239,68,68,.04);border-radius:var(--radius-sm);border:1px solid rgba(239,68,68,.2);}
.obs-form textarea{width:100%;background:var(--bg-card);border:1px solid var(--border-med);
  color:var(--text-main);border-radius:6px;padding:8px 10px;font-size:12px;
  resize:vertical;min-height:70px;}
.chip{font-size:10px;font-weight:700;padding:3px 10px;border-radius:20px;
  text-transform:uppercase;letter-spacing:.4px;white-space:nowrap;border:1px solid;}
.chip-pend{background:rgba(245,158,11,.1); color:#b45309;border-color:rgba(245,158,11,.3);}
.chip-env {background:rgba(59,130,246,.1); color:#1d4ed8;border-color:rgba(59,130,246,.3);}
.chip-obs {background:rgba(239,68,68,.1);  color:#b91c1c;border-color:rgba(239,68,68,.3);}
.chip-apr {background:rgba(16,185,129,.1); color:#047857;border-color:rgba(16,185,129,.3);}
.obs-box{background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.2);
  border-radius:var(--radius-sm);padding:8px 12px;font-size:12px;color:#b91c1c;margin-top:8px;}
.section-label{font-size:11px;font-weight:700;color:var(--text-sub);text-transform:uppercase;
  letter-spacing:.7px;border-bottom:1px solid var(--border);padding-bottom:6px;}
.hist-wrap{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--shadow-sm);}
.hist-row{font-size:11px;color:var(--text-sub);padding:7px 0;border-bottom:1px solid var(--border);
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.hist-row:last-child{border-bottom:none;}
.hist-code{font-family:monospace;font-size:10px;font-weight:700;flex-shrink:0;}
.hist-nombre{color:var(--text-main);font-weight:600;flex-shrink:0;}
.student-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);
  padding:20px 24px;margin-bottom:24px;box-shadow:var(--shadow-sm);}
.student-nombre{font-size:18px;font-weight:700;color:var(--text-main);}
.student-meta{font-size:12px;color:var(--text-sub);margin-top:4px;}
.student-pct-n{font-size:28px;font-weight:700;line-height:1;}
.student-pct-l{font-size:10px;color:var(--text-sub);margin-top:2px;}
.prog-bar{height:5px;background:#e9eef5;border-radius:3px;overflow:hidden;margin-top:14px;}
.prog-fill{height:100%;border-radius:3px;transition:width .4s;}
.back-link{font-size:12px;color:var(--text-sub);text-decoration:none;}
.back-link:hover{color:#3b82f6;}
/* Badge modalidad en header */
.modal-badge{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;
  padding:4px 12px;border-radius:20px;border:1px solid;text-transform:uppercase;letter-spacing:.4px;}
.badge-ppp  {background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe;}
.badge-conval{background:#fff7ed;color:#c2410c;border-color:#fed7aa;}
/* Color del código según tipo */
.code-ppp{color:#3b82f6;}
.code-con{color:#f97316;}
</style>
<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__.'/../../includes/navbar.php'; ?>
<div class="app-shell">
  <?php include __DIR__ . '/../../includes/sidebar-coordinador.php'; ?>

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

    <div class="mb-3">
      <a href="expedientes.php" class="back-link">
        <i class="fa fa-arrow-left me-1"></i> Volver a Expedientes
      </a>
    </div>

    <!-- Header del estudiante -->
    <div class="student-card">
      <div class="d-flex align-items-start justify-content-between flex-wrap gap-3">
        <div>
          <!-- Badge de modalidad -->
          <div class="mb-2">
            <?php if ($esConval): ?>
              <span class="modal-badge badge-conval"><i class="fa fa-rotate"></i> Convalidación PPP</span>
            <?php else: ?>
              <span class="modal-badge badge-ppp"><i class="fa fa-briefcase"></i> Práctica Preprofesional</span>
            <?php endif; ?>
          </div>
          <div class="student-nombre">
            <?= htmlspecialchars($prac['apellidos'].' '.$prac['nombres']) ?>
          </div>
          <div class="student-meta">
            CI: <?= htmlspecialchars($prac['cedula']) ?> &nbsp;·&nbsp;
            <?= htmlspecialchars($prac['carrera']) ?> &nbsp;·&nbsp;
            <?= htmlspecialchars($prac['periodo']) ?>
          </div>
          <div class="student-meta">
            Empresa: <?= htmlspecialchars($prac['empresa'] ?? '—') ?> &nbsp;·&nbsp;
            Área: <?= htmlspecialchars($prac['area_practica'] ?? '—') ?>
          </div>
          <?php if ($esConval): ?>
          <div class="student-meta" style="margin-top:6px;">
            <i class="fa fa-circle-info me-1" style="color:#f97316;"></i>
            <span style="color:#c2410c;">Expediente de convalidación — <?= $totalDocs ?> documentos requeridos (CON-001 al CON-005)</span>
          </div>
          <?php endif; ?>
        </div>
        <!-- Progreso -->
        <div style="text-align:center;">
          <?php $pct = $totalDocs > 0 ? round(($aprobadosTotal / $totalDocs) * 100) : 0; ?>
          <div class="student-pct-n" style="color:<?= $pct==100?'#059669':'#2563eb' ?>;"><?= $pct ?>%</div>
          <div class="student-pct-l"><?= $aprobadosTotal ?>/<?= $totalDocs ?> completados</div>
          <?php if ($pct == 100): ?>
          <div style="margin-top:6px;">
            <span class="chip chip-apr"><i class="fa fa-trophy me-1"></i>EXPEDIENTE COMPLETO</span>
          </div>
          <?php endif; ?>
        </div>
      </div>
      <div class="prog-bar">
        <div class="prog-fill" style="width:<?=$pct?>%;background:<?=$pct==100?'#10b981':'#3b82f6'?>;"></div>
      </div>
    </div>

    <!-- Sección de documentos -->
    <div class="section-label mb-3">
      <i class="fa fa-file-lines me-2" style="color:<?=$esConval?'#f97316':'#3b82f6'?>;"></i>
      <?= $esConval ? 'Documentos de Convalidación (5 requeridos)' : 'Documentos PPP (11 requeridos)' ?>
    </div>

    <?php foreach ($DOCS as $cod => $titulo):
      $doc    = $docs[$cod] ?? null;
      $estado = $doc['estado'] ?? 'pendiente';
      $colorBorde = match($estado) {
          'aprobado'  => '#10b981',
          'enviado'   => '#3b82f6',
          'observado' => '#ef4444',
          default     => '#cbd5e1',
      };
      $chipClass = 'chip-' . match($estado) {
          'aprobado' => 'apr', 'enviado' => 'env', 'observado' => 'obs', default => 'pend'
      };
      $chipLabel = match($estado) {
          'aprobado'  => '✓ Aprobado',
          'enviado'   => '⏳ En revisión',
          'observado' => '⚠ Con observación',
          default     => '· Sin subir',
      };
      $codeColor = $esConval ? 'code-con' : 'code-ppp';
      // URL de ver PDF según tipo
      $urlPdf = $esConval
          ? BASE_URL . '/api/ver_pdf_conv_coord.php?practica=' . $idPractica . '&doc=' . urlencode($cod)
          : BASE_URL . '/api/ver_pdf_coord.php?practica='      . $idPractica . '&doc=' . urlencode($cod);
      $urlPlantilla = $esConval
          ? BASE_URL . '/api/ver_plantilla_conv.php?doc=' . urlencode($cod)
          : BASE_URL . '/api/ver_plantilla_coord.php?practica=' . $idPractica . '&doc=' . urlencode($cod);
    ?>
    <div class="doc-card">
      <div class="doc-card-inner">
        <div class="doc-barra" style="background:<?=$colorBorde?>;"></div>
        <div class="doc-body">
          <div class="doc-header">
            <span class="doc-code <?= $codeColor ?>"><?= htmlspecialchars($cod) ?></span>
            <span class="chip <?= $chipClass ?>"><?= $chipLabel ?></span>
          </div>
          <div class="doc-title"><?= htmlspecialchars($titulo) ?></div>

          <?php if ($doc && $doc['subido_at']): ?>
          <div class="doc-meta">
            <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:#10b981;"></i>
              Aprobado: <?= date('d/m/Y H:i', strtotime($doc['aprobado_at'])) ?>
              por <?= htmlspecialchars(($doc['aprobado_apellidos']??'').' '.($doc['aprobado_nombres']??'')) ?>
            <?php endif; ?>
          </div>
          <?php else: ?>
          <div class="doc-meta"><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' && !empty($doc['observacion'])): ?>
          <div class="obs-box">
            <i class="fa fa-triangle-exclamation me-1"></i>
            <strong>Observación enviada:</strong> <?= htmlspecialchars($doc['observacion']) ?>
          </div>
          <?php endif; ?>
        </div>
      </div>

      <!-- Acciones -->
      <div class="doc-actions">
        <!-- Ver plantilla (solo PPP) -->
        <?php if (!$esConval): ?>
        <a href="<?= $urlPlantilla ?>" target="_blank" class="btn-ap btn-ver">
          <i class="fa fa-eye"></i> Ver plantilla
        </a>
        <?php endif; ?>

        <!-- Ver PDF del estudiante -->
        <?php if ($doc && !empty($doc['ruta_archivo'])): ?>
        <a href="<?= $urlPdf ?>" target="_blank" class="btn-ap btn-pdf">
          <i class="fa fa-file-pdf"></i> Ver PDF
        </a>
        <?php else: ?>
        <span class="btn-ap btn-disabled">
          <i class="fa fa-clock"></i> Esperando PDF del estudiante
        </span>
        <?php endif; ?>

        <?php if ($doc && in_array($estado, ['enviado','observado','aprobado'])): ?>
          <?php if ($estado !== 'aprobado'): ?>
          <!-- Aprobar -->
          <form method="POST" style="margin:0;" onsubmit="return confirm('¿Aprobar <?= htmlspecialchars($cod) ?>?');">
            <input type="hidden" name="accion"     value="aprobar">
            <input type="hidden" name="codigo_doc" value="<?= $cod ?>">
            <button type="submit" class="btn-ap btn-aprobar">
              <i class="fa fa-circle-check"></i> Aprobar
            </button>
          </form>
          <?php else: ?>
          <span class="btn-ap" style="background:rgba(16,185,129,.08);color:#059669;border:1px solid rgba(16,185,129,.25);cursor:default;">
            <i class="fa fa-check-double"></i> Ya aprobado
          </span>
          <?php endif; ?>

          <!-- Observar -->
          <button type="button" class="btn-ap btn-observar" onclick="toggleObs('<?= htmlspecialchars($cod) ?>')">
            <i class="fa fa-comment-dots"></i> Observar / Devolver
          </button>

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

    <!-- ══ DOCUMENTOS PERSONALES ══════════════════════════════ -->
    <?php if (!$esConval): ?>
    <div class="section-label mt-4 mb-3">
      <i class="fa fa-id-card me-2" style="color:#7c3aed;"></i>
      Documentos Personales (3 requeridos)
      <span style="font-size:10px;font-weight:400;color:var(--text-light);margin-left:8px;">
        — Hoja de Vida · Cédula · Papeleta de Votación
      </span>
    </div>

    <?php foreach ($DOCS_PERS as $tipo => $tituloP):
      $dp      = $docsPersonales[$tipo] ?? null;
      $estadoP = ($dp && $dp['estado'] === 'subido') ? 'subido' : 'pendiente';
      $colorP  = $estadoP === 'subido' ? '#10b981' : '#cbd5e1';
      $chipP   = $estadoP === 'subido'
          ? '<span class="chip chip-apr">✓ Subido</span>'
          : '<span class="chip chip-pend">· Sin subir</span>';
      $iconoP  = match($tipo) {
          'hoja_vida'         => 'fa-file-user',
          'cedula'            => 'fa-id-card',
          'papeleta_votacion' => 'fa-check-to-slot',
          default             => 'fa-file',
      };
      $codP = match($tipo) { 'hoja_vida'=>'HV', 'cedula'=>'CI', 'papeleta_votacion'=>'PV', default=>$tipo };
    ?>
    <div class="doc-card">
      <div class="doc-card-inner">
        <div class="doc-barra" style="background:<?= $colorP ?>;"></div>
        <div class="doc-body">
          <div class="doc-header">
            <span class="doc-code" style="color:#7c3aed;">
              <i class="fa <?= $iconoP ?> me-1"></i><?= $codP ?>
            </span>
            <?= $chipP ?>
          </div>
          <div class="doc-title"><?= htmlspecialchars($tituloP) ?></div>
          <?php if ($dp && !empty($dp['subido_at'])): ?>
          <div class="doc-meta">
            <i class="fa fa-upload me-1"></i>Subido: <?= date('d/m/Y H:i', strtotime($dp['subido_at'])) ?>
          </div>
          <?php else: ?>
          <div class="doc-meta">
            <i class="fa fa-hourglass-half me-1"></i>El estudiante aún no ha subido este documento.
          </div>
          <?php endif; ?>
        </div>
      </div>

      <div class="doc-actions">
        <?php if ($dp && !empty($dp['nombre_archivo'])): ?>
          <a href="<?= BASE_URL ?>/uploads/documentos_personales/<?= $prac['id_estudiante'] ?>/<?= urlencode($dp['nombre_archivo']) ?>"
             target="_blank" class="btn-ap btn-pdf">
            <i class="fa fa-file-pdf"></i> Ver PDF
          </a>
        <?php else: ?>
          <span class="btn-ap btn-disabled">
            <i class="fa fa-clock"></i> Esperando documento del estudiante
          </span>
        <?php endif; ?>
        <span style="font-size:11px;color:var(--text-light);margin-left:4px;">
          <i class="fa fa-circle-info me-1" style="color:#7c3aed;"></i>
          Documento de identidad — solo visualización
        </span>
      </div>
    </div>
    <?php endforeach; ?>
    <?php endif; ?>
    <!-- fin documentos personales -->
    <div class="section-label mt-4 mb-3">
      <i class="fa fa-clock-rotate-left me-2"></i>Historial de actividad
    </div>
    <div class="hist-wrap">
      <?php
      $historial = array_filter($docs, fn($d) => !empty($d['subido_at']) || !empty($d['aprobado_at']));
      usort($historial, fn($a,$b) => strtotime($b['updated_at']) - strtotime($a['updated_at']));
      $docsLabel = $esConval ? $DOCS_CON : $DOCS_PPP;
      if (empty($historial)): ?>
      <div style="font-size:12px;color:var(--text-light);text-align:center;padding:12px;">
        Sin actividad aún. Los movimientos aparecerán aquí cuando el estudiante suba documentos.
      </div>
      <?php endif; ?>
      <?php foreach ($historial as $h):
        $estadoH = $h['estado'];
        $icon = match($estadoH){ 'aprobado'=>'circle-check','enviado'=>'upload','observado'=>'triangle-exclamation',default=>'clock' };
        $col  = match($estadoH){ 'aprobado'=>'#10b981','enviado'=>'#3b82f6','observado'=>'#ef4444',default=>'#94a3b8' };
        $codH = $h['codigo_doc'];
        $codeColorH = $esConval ? '#f97316' : '#3b82f6';
      ?>
      <div class="hist-row">
        <i class="fa fa-<?=$icon?>" style="color:<?=$col?>;font-size:13px;flex-shrink:0;"></i>
        <span class="hist-code" style="color:<?=$codeColorH?>;"><?= htmlspecialchars($codH) ?></span>
        <span class="hist-nombre"><?= htmlspecialchars($docsLabel[$codH] ?? $codH) ?></span>
        <span style="color:var(--text-light);">—</span>
        <?php if ($estadoH === 'aprobado' && !empty($h['aprobado_at'])): ?>
          <span>Aprobado el <strong style="color:var(--text-main);"><?= date('d/m/Y H:i', strtotime($h['aprobado_at'])) ?></strong>
          por <?= htmlspecialchars(($h['aprobado_apellidos']??'').' '.($h['aprobado_nombres']??'')) ?></span>
        <?php elseif ($estadoH === 'observado'): ?>
          <span>Devuelto con observación &nbsp;·&nbsp; <?= date('d/m/Y H:i', strtotime($h['updated_at'])) ?></span>
        <?php elseif (!empty($h['subido_at'])): ?>
          <span>Subido el <strong style="color:var(--text-main);"><?= date('d/m/Y H:i', strtotime($h['subido_at'])) ?></strong></span>
        <?php endif; ?>
      </div>
      <?php endforeach; ?>
    </div>

  </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 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();
}
</script>
</body>
</html>