<?php
// modules/coordinador/vinculacion.php
require_once __DIR__.'/../../config/app.php';
require_once __DIR__ . '/../../config/onedrive.php';
require_once __DIR__ . '/../../includes/OneDriveStorage.php';
require_once __DIR__.'/../../includes/auth.php';
require_once __DIR__.'/../../includes/functions.php';
require_once __DIR__.'/../../includes/flash.php';
requireRol(ROL_COORDINADOR);
$user=currentUser();$db=getDB();$pageTitle='Vinculacion — Coordinador';
$idInst=instId(); // multi-tenant

// POST
if($_SERVER['REQUEST_METHOD']==='POST'){
  $accion=$_POST['accion']??'';

  if($accion==='aprobar_grupo'){
    $idGrupo=(int)($_POST['id_grupo']??0);
    $idTutor=(int)($_POST['id_tutor']??0);
    if($idGrupo&&$idTutor){
      $db->prepare("UPDATE grupos_vinculacion SET estado='aprobado',id_tutor=:t,updated_at=NOW() WHERE id_grupo=:g AND estado='pendiente'")
        ->execute([':t'=>$idTutor,':g'=>$idGrupo]);
      registrarAudit($user['id'],'aprobar_grupo_vinculacion','grupos_vinculacion',$idGrupo);
      flashSet('ok','Grupo aprobado y tutor asignado correctamente.');
    }
    header('Location: vinculacion.php?grupo='.$idGrupo);exit;
  }

  if($accion==='validar_bitacora'){
    $idBit=(int)($_POST['id_bitacora']??0);
    $comentario=trim($_POST['comentario_tutor']??'');
    $nuevoEstado=$_POST['nuevo_estado']??'validada';
    if($idBit&&in_array($nuevoEstado,['validada','observada'])){
      $db->prepare("UPDATE bitacoras_grupo_vinculacion SET estado=:e,comentario_tutor=:c,fecha_validacion=NOW() WHERE id_bitacora=:id")
        ->execute([':e'=>$nuevoEstado,':c'=>$comentario?:null,':id'=>$idBit]);
      // Actualizar horas del grupo
      $bit=$db->prepare("SELECT id_grupo FROM bitacoras_grupo_vinculacion WHERE id_bitacora=:id");
      $bit->execute([':id'=>$idBit]);$bit=$bit->fetch();
      if($bit){
        $db->prepare("UPDATE grupos_vinculacion SET horas_cumplidas=(SELECT COALESCE(SUM(horas_totales_grupo),0) FROM bitacoras_grupo_vinculacion WHERE id_grupo=:g AND estado IN ('enviada','validada')),estado=CASE WHEN estado='aprobado' THEN 'en_progreso' ELSE estado END WHERE id_grupo=:g2")
          ->execute([':g'=>$bit['id_grupo'],':g2'=>$bit['id_grupo']]);
      }
      flashSet('ok',$nuevoEstado==='validada'?'Bitacora validada correctamente.':'Bitacora observada. El lider podra editarla.');
    }
    header('Location: vinculacion.php');exit;
  }

  // ── DOCUMENTOS DE VINCULACION ──────────────────────────────────────────────
  if($accion==='subir_documento'){
    $nombre=trim($_POST['nombre_doc']??'');
    $desc=trim($_POST['desc_doc']??'');
    if($nombre&&isset($_FILES['archivo_doc'])&&$_FILES['archivo_doc']['error']===0){
      $ext=strtolower(pathinfo($_FILES['archivo_doc']['name'],PATHINFO_EXTENSION));
      $permitidos=['pdf','doc','docx','xlsx','pptx','jpg','png'];
      if(in_array($ext,$permitidos)&&$_FILES['archivo_doc']['size']<=10*1024*1024){
        $archivo='vinc_'.time().'_'.uniqid().'.'.$ext;
        try {
          OneDriveStorage::upload($_FILES['archivo_doc']['tmp_name'], 'documentos_vinculacion', $archivo, null, $idInst);
          $db->prepare("INSERT INTO documentos_vinculacion (nombre,descripcion,archivo,subido_por) VALUES(:n,:d,:a,:u)")
            ->execute([':n'=>$nombre,':d'=>$desc?:null,':a'=>$archivo,':u'=>$user['id']]);
          registrarAudit($user['id'],'subir_documento_vinculacion','documentos_vinculacion',0);
          flashSet('ok','Documento "'.$nombre.'" subido correctamente.');
        } catch(Exception $e) { flashSet('warn','Error OneDrive: '.$e->getMessage()); }
      }else{flashSet('warn','Archivo no permitido o mayor a 10MB. Formatos: PDF, Word, Excel, PowerPoint, imagen.');}
    }else{flashSet('warn','Completa el nombre y selecciona un archivo.');}
    header('Location: vinculacion.php');exit;
  }

  if($accion==='eliminar_documento'){
    $idDoc=(int)($_POST['id_doc']??0);
    if($idDoc){
      $doc=$db->prepare("SELECT archivo FROM documentos_vinculacion WHERE id_doc=:id");
      $doc->execute([':id'=>$idDoc]);$doc=$doc->fetch();
      if($doc){
        if(OneDriveStorage::esOneDrive($doc['archivo'])){
          try{ OneDriveStorage::delete($doc['archivo']); }catch(Exception $e){}
        }else{
          $path=BASE_PATH.'/uploads/documentos_vinculacion/'.$doc['archivo'];
          if(file_exists($path)) unlink($path);
        }
        $db->prepare("DELETE FROM documentos_vinculacion WHERE id_doc=:id")->execute([':id'=>$idDoc]);
        flashSet('ok','Documento eliminado.');
      }
    }
    header('Location: vinculacion.php');exit;
  }
  // ───────────────────────────────────────────────────────────────────────────

  if($accion==='crear_proyecto_org'){
    $nombre=trim($_POST['nombre']??'');$idOrg=(int)($_POST['id_organizacion']??0);
    $idPer=(int)($_POST['id_periodo']??0);$hrs=(int)($_POST['horas_requeridas']??160);
    $desc=trim($_POST['descripcion']??'');$obj=trim($_POST['objetivo_general']??'');
    $area=trim($_POST['area']??'');$fi=$_POST['fecha_inicio']??'';$ff=$_POST['fecha_fin']??'';
    if($nombre&&$idOrg&&$idPer){
      $coord=$db->prepare("SELECT id_coordinador FROM coordinadores WHERE id_usuario=:u");
      $coord->execute([':u'=>$user['id']]);$coord=$coord->fetch();
      $db->prepare("INSERT INTO proyectos_vinculacion (id_organizacion,id_periodo,id_coordinador,nombre,descripcion,objetivo_general,area,horas_requeridas,fecha_inicio,fecha_fin) VALUES(:o,:p,:c,:n,:d,:obj,:a,:h,:fi,:ff)")
        ->execute([':o'=>$idOrg,':p'=>$idPer,':c'=>$coord?$coord['id_coordinador']:null,':n'=>$nombre,':d'=>$desc?:null,':obj'=>$obj?:null,':a'=>$area?:null,':h'=>$hrs,':fi'=>$fi?:null,':ff'=>$ff?:null]);
      flashSet('ok','Proyecto creado correctamente.');
    }
    header('Location: vinculacion.php');exit;
  }
}

// Tutores disponibles
$tutores=$db->query("SELECT t.id_tutor,CONCAT(u.nombres,' ',u.apellidos) AS nombre,u.email FROM tutores t JOIN usuarios u ON u.id_usuario=t.id_usuario WHERE u.activo=1" . instCond('u') . " ORDER BY u.apellidos,u.nombres")->fetchAll();
$organizaciones=$db->query("SELECT * FROM organizaciones_beneficiarias WHERE activa=1 ORDER BY nombre")->fetchAll();
$periodos=$db->query("SELECT * FROM periodos_academicos WHERE 1=1" . instCond() . " ORDER BY id_periodo DESC")->fetchAll();
$carreras=$db->query("SELECT id_carrera, nombre FROM carreras WHERE activa=1" . instCond() . " ORDER BY nombre")->fetchAll();
$pa=$db->query("SELECT id_periodo FROM periodos_academicos WHERE activo=1" . instCond() . " LIMIT 1")->fetch();
$idPerActivo=$pa?$pa['id_periodo']:($periodos[0]['id_periodo']??0);

// ── Filtros de la lista de grupos ────────────────────────────
$filtroPeriodo = (int)($_GET['periodo'] ?? $idPerActivo);
$filtroCarrera = (int)($_GET['carrera'] ?? 0);
$filtroEstado  = $_GET['estado'] ?? '';
$filtroQ       = trim($_GET['q'] ?? '');

// Ver grupo especifico
$verGrupo=null;$miembrosGrupo=[];$bitacorasGrupo=[];
$idGrupoVer=(int)($_GET['grupo']??0);
if($idGrupoVer){
  $qg=$db->prepare("SELECT g.*,COALESCE(ob.nombre,g.org_nueva_nombre) AS organizacion,COALESCE(ob.tipo,g.org_nueva_tipo) AS org_tipo,COALESCE(ob.canton,g.org_nueva_canton) AS org_canton,pe.nombre AS periodo_nombre,CONCAT(ut.nombres,' ',ut.apellidos) AS tutor_nombre,CONCAT(ul.nombres,' ',ul.apellidos) AS lider_nombre FROM grupos_vinculacion g JOIN periodos_academicos pe ON pe.id_periodo=g.id_periodo LEFT JOIN organizaciones_beneficiarias ob ON ob.id_organizacion=g.id_organizacion LEFT JOIN tutores tt ON tt.id_tutor=g.id_tutor LEFT JOIN usuarios ut ON ut.id_usuario=tt.id_usuario JOIN estudiantes el ON el.id_estudiante=g.id_lider JOIN usuarios ul ON ul.id_usuario=el.id_usuario WHERE g.id_grupo=:id");
  $qg->execute([':id'=>$idGrupoVer]);$verGrupo=$qg->fetch();
  if($verGrupo){
    $qm=$db->prepare("SELECT m.*,CONCAT(u.apellidos,' ',u.nombres) AS nombre_completo,c.nombre AS carrera,e.codigo_estudiante FROM miembros_grupo_vinculacion m JOIN estudiantes e ON e.id_estudiante=m.id_estudiante JOIN usuarios u ON u.id_usuario=e.id_usuario JOIN carreras c ON c.id_carrera=e.id_carrera WHERE m.id_grupo=:g AND m.estado='activo' ORDER BY m.rol DESC,u.apellidos");
    $qm->execute([':g'=>$idGrupoVer]);$miembrosGrupo=$qm->fetchAll();
    $qb=$db->prepare("SELECT b.*,COUNT(s.id_seccion) AS total_sec FROM bitacoras_grupo_vinculacion b LEFT JOIN secciones_bitacora_vinculacion s ON s.id_bitacora=b.id_bitacora WHERE b.id_grupo=:g GROUP BY b.id_bitacora ORDER BY b.semana_numero DESC");
    $qb->execute([':g'=>$idGrupoVer]);$bitacorasGrupo=$qb->fetchAll();

    // ── Calificaciones puestas por el tutor ──────────────────────────────────
    $calificacionesMapa=[];
    try{
      $qcal=$db->prepare("SELECT cv.*,CONCAT(ut.nombres,' ',ut.apellidos) AS tutor_nombre FROM calificaciones_vinculacion cv LEFT JOIN tutores t ON t.id_tutor=cv.id_tutor LEFT JOIN usuarios ut ON ut.id_usuario=t.id_usuario WHERE cv.id_grupo=:g");
      $qcal->execute([':g'=>$idGrupoVer]);
      foreach($qcal->fetchAll() as $c){ $calificacionesMapa[$c['id_estudiante']]=$c; }
    }catch(Exception $ex){ $calificacionesMapa=[]; }

    // ── Entrega de informe final ─────────────────────────────────────────────
    $entregaInf=null;
    try{
      $qei=$db->prepare("SELECT eiv.*,CONCAT(u.nombres,' ',u.apellidos) AS nombre_lider FROM entregas_informe_vinculacion eiv JOIN estudiantes est ON est.id_estudiante=eiv.id_estudiante_lider JOIN usuarios u ON u.id_usuario=est.id_usuario WHERE eiv.id_grupo=:g ORDER BY eiv.created_at DESC LIMIT 1");
      $qei->execute([':g'=>$idGrupoVer]);$entregaInf=$qei->fetch();
    }catch(Exception $ex){$entregaInf=null;}
  }
}

// Lista de grupos — con filtros dinámicos
$wConds = ['1=1'];
$wParams = [];
// Filtro obligatorio por instituto
if ($idInst) { $wConds[] = 'car.id_instituto = :inst'; $wParams[':inst'] = $idInst; }
if ($filtroPeriodo) { $wConds[] = 'g.id_periodo = :per';  $wParams[':per'] = $filtroPeriodo; }
if ($filtroCarrera) { $wConds[] = 'el.id_carrera = :car';  $wParams[':car'] = $filtroCarrera; }
if ($filtroEstado)  { $wConds[] = 'g.estado = :est';       $wParams[':est'] = $filtroEstado; }
if ($filtroQ)       { $wConds[] = "(g.nombre_proyecto LIKE :q OR ob.nombre LIKE :q2 OR g.org_nueva_nombre LIKE :q3)";
                      $wParams[':q']=$wParams[':q2']=$wParams[':q3']="%$filtroQ%"; }
$wStr = implode(' AND ', $wConds);

$stGrupos = $db->prepare("
    SELECT g.*,
           COALESCE(ob.nombre,g.org_nueva_nombre) AS organizacion,
           pe.nombre AS periodo_nombre,
           COUNT(DISTINCT m.id_miembro) AS total_miembros,
           CONCAT(ul.nombres,' ',ul.apellidos) AS lider_nombre,
           CONCAT(ut.nombres,' ',ut.apellidos) AS tutor_nombre,
           car.nombre AS carrera_lider
    FROM grupos_vinculacion g
    JOIN periodos_academicos pe ON pe.id_periodo=g.id_periodo
    LEFT JOIN organizaciones_beneficiarias ob ON ob.id_organizacion=g.id_organizacion
    LEFT JOIN miembros_grupo_vinculacion m ON m.id_grupo=g.id_grupo AND m.estado='activo'
    JOIN estudiantes el ON el.id_estudiante=g.id_lider
    JOIN carreras car ON car.id_carrera=el.id_carrera
    JOIN usuarios ul ON ul.id_usuario=el.id_usuario
    LEFT JOIN tutores tt ON tt.id_tutor=g.id_tutor
    LEFT JOIN usuarios ut ON ut.id_usuario=tt.id_usuario
    WHERE $wStr
    GROUP BY g.id_grupo
    ORDER BY FIELD(g.estado,'pendiente','aprobado','en_progreso','completado'), g.created_at DESC
");
$stGrupos->execute($wParams);
$grupos = $stGrupos->fetchAll();

// Proyectos del catalogo
$proyectos=$db->query("SELECT pr.*,ob.nombre AS org_nombre,ob.tipo AS org_tipo,COUNT(pv.id_participacion) AS total_inscritos,pa.nombre AS periodo FROM proyectos_vinculacion pr JOIN organizaciones_beneficiarias ob ON ob.id_organizacion=pr.id_organizacion JOIN periodos_academicos pa ON pa.id_periodo=pr.id_periodo LEFT JOIN participaciones_vinculacion pv ON pv.id_proyecto=pr.id_proyecto WHERE 1=1" . instCond('pa') . " GROUP BY pr.id_proyecto ORDER BY pr.created_at DESC")->fetchAll();

// Bitacoras enviadas pendientes de validacion
$bitPendientes=$db->query("SELECT b.*,g.nombre_proyecto,COUNT(s.id_seccion) AS total_sec,COALESCE(ob.nombre,g.org_nueva_nombre) AS organizacion,CONCAT(ul.nombres,' ',ul.apellidos) AS lider_nombre FROM bitacoras_grupo_vinculacion b JOIN grupos_vinculacion g ON g.id_grupo=b.id_grupo LEFT JOIN organizaciones_beneficiarias ob ON ob.id_organizacion=g.id_organizacion JOIN estudiantes el ON el.id_estudiante=g.id_lider JOIN carreras car ON car.id_carrera=el.id_carrera JOIN usuarios ul ON ul.id_usuario=el.id_usuario LEFT JOIN secciones_bitacora_vinculacion s ON s.id_bitacora=b.id_bitacora WHERE b.estado='enviada'" . instCond('car') . " GROUP BY b.id_bitacora ORDER BY b.updated_at ASC")->fetchAll();

$eColor=['pendiente'=>'st-postulado','aprobado'=>'st-aprobado','en_progreso'=>'st-en_progreso','completado'=>'st-completado'];

// Documentos de vinculacion disponibles para estudiantes
$docsVinc=$db->query("SELECT dv.*,CONCAT(u.nombres,' ',u.apellidos) AS subido_por_nombre FROM documentos_vinculacion dv JOIN usuarios u ON u.id_usuario=dv.subido_por WHERE 1=1" . instCond('u') . " ORDER BY dv.created_at DESC")->fetchAll();
?>
<?php $paginaActual = 'vinculacion'; ?>
<!DOCTYPE html><html lang="es"><head>
<?php include __DIR__.'/../../includes/head.php';?>
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar.css">
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-coordinador.css">
</head><body>
<?php include __DIR__.'/../../includes/navbar.php';?>
<div class="app-shell">
<?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'sidebar-coordinador.php'; ?>
<main class="main-area">

<?php if($verGrupo):
  $pct=$verGrupo['horas_requeridas']>0?min(100,round($verGrupo['horas_cumplidas']/$verGrupo['horas_requeridas']*100)):0;
  $esCls=$eColor[$verGrupo['estado']]??'st-borrador';
?>
  <div class="page-header d-flex justify-content-between align-items-start flex-wrap gap-2 mb-4">
    <div>
      <a href="vinculacion.php" style="font-size:12px;color:#6b7280;text-decoration:none"><i class="fa fa-arrow-left me-1"></i>Volver a grupos</a>
      <h4 class="mt-1 mb-1"><?=htmlspecialchars($verGrupo['nombre_proyecto'])?></h4>
      <p style="font-size:13px;color:#6b7280"><?=htmlspecialchars($verGrupo['organizacion'])?> · <?=htmlspecialchars($verGrupo['periodo_nombre'])?></p>
    </div>
    <div class="text-end">
      <span class="badge-estado <?=$esCls?>"><?=ucfirst($verGrupo['estado'])?></span>
      <?php if($verGrupo['tutor_nombre']):?><div style="font-size:12px;color:#6b7280;margin-top:4px">Tutor: <strong><?=htmlspecialchars($verGrupo['tutor_nombre'])?></strong></div><?php endif;?>
    </div>
  </div>
  <?=flashHtml()?>

  <div class="row g-3 mb-4">
    <div class="col-sm-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#2563eb"><?=count($miembrosGrupo)?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Integrantes</div></div></div>
    <div class="col-sm-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#d97706"><?=$verGrupo['horas_cumplidas']?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Horas cumplidas</div></div></div>
    <div class="col-sm-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#16a34a"><?=$verGrupo['horas_requeridas']?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Horas requeridas</div></div></div>
    <div class="col-sm-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#7c3aed"><?=$pct?>%</div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Progreso</div></div></div>
  </div>

  <!-- Aprobar grupo si esta pendiente -->
  <?php if($verGrupo['estado']==='pendiente'):?>
  <div class="card shadow-sm border-0 mb-4" style="border-left:4px solid #f59e0b!important">
    <div class="card-body">
      <div style="font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;margin-bottom:12px"><i class="fa fa-clock me-1" style="color:#f59e0b"></i>Grupo pendiente de aprobacion</div>
      <div class="row g-3 mb-3" style="font-size:13px">
        <div class="col-sm-6"><strong>Lider:</strong> <?=htmlspecialchars($verGrupo['lider_nombre'])?></div>
        <div class="col-sm-6"><strong>Organizacion:</strong> <?=htmlspecialchars($verGrupo['organizacion'])?><?=$verGrupo['id_organizacion']?'':' <span style="font-size:10px;color:#f59e0b">(nueva)</span>'?></div>
        <?php if($verGrupo['org_canton']):?><div class="col-sm-6"><strong>Canton:</strong> <?=htmlspecialchars($verGrupo['org_canton'])?></div><?php endif;?>
        <div class="col-sm-6"><strong>Horas propuestas:</strong> <?=$verGrupo['horas_requeridas']?>h</div>
        <?php if($verGrupo['descripcion']):?><div class="col-12"><strong>Descripcion:</strong> <?=htmlspecialchars(substr($verGrupo['descripcion'],0,200))?><?=strlen($verGrupo['descripcion'])>200?'...':''?></div><?php endif;?>
        <?php if($verGrupo['objetivo_general']):?><div class="col-12"><strong>Objetivo:</strong> <?=htmlspecialchars(substr($verGrupo['objetivo_general'],0,200))?></div><?php endif;?>
        <?php if($verGrupo['documento_propuesta']):
          $urlProp = OneDriveStorage::esOneDrive($verGrupo['documento_propuesta'])
            ? OneDriveStorage::getDownloadUrl($verGrupo['documento_propuesta'])
            : UPLOAD_URL.'/'.ltrim($verGrupo['documento_propuesta'],'/');
        ?><div class="col-12"><a href="<?=htmlspecialchars($urlProp)?>" target="_blank" class="btn btn-sm btn-outline-secondary"><i class="fa fa-file-pdf me-1"></i>Ver propuesta</a></div><?php endif;?>
      </div>
      <form method="POST" class="d-flex gap-3 align-items-end flex-wrap">
        <input type="hidden" name="accion" value="aprobar_grupo">
        <input type="hidden" name="id_grupo" value="<?=$idGrupoVer?>">
        <div>
          <label class="form-label" style="font-size:12px;font-weight:700">ASIGNAR TUTOR <span class="text-danger">*</span></label>
          <select name="id_tutor" class="form-select form-select-sm" style="min-width:220px" required>
            <option value="">-- Seleccionar tutor --</option>
            <?php foreach($tutores as $t):?><option value="<?=$t['id_tutor']?>"><?=htmlspecialchars($t['nombre'])?></option><?php endforeach;?>
          </select>
        </div>
        <button type="submit" class="btn btn-success btn-sm" onclick="return confirm('Aprobar el grupo y asignar este tutor?')">
          <i class="fa fa-check me-1"></i>Aprobar grupo y asignar tutor
        </button>
      </form>
    </div>
  </div>
  <?php endif;?>

  <!-- Integrantes -->
  <div class="card shadow-sm border-0 mb-4">
    <div class="card-body">
      <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;margin-bottom:12px">Integrantes del grupo</div>
      <table class="table table-hover mb-0" style="font-size:13px">
        <thead style="background:#f8f9fa"><tr style="font-size:11px;text-transform:uppercase;color:#6b7280"><th class="px-3 py-2">Estudiante</th><th class="py-2">Carrera</th><th class="py-2">Codigo</th><th class="py-2">Rol</th></tr></thead>
        <tbody>
          <?php foreach($miembrosGrupo as $m):?>
          <tr>
            <td class="px-3 py-2"><strong><?=htmlspecialchars($m['nombre_completo'])?></strong></td>
            <td class="py-2" style="font-size:12px;color:#6b7280"><?=htmlspecialchars($m['carrera'])?></td>
            <td class="py-2" style="font-family:monospace;font-size:12px"><?=htmlspecialchars($m['codigo_estudiante'])?></td>
            <td class="py-2"><?=$m['rol']==='lider'?'<span style="font-size:11px;padding:2px 8px;border-radius:20px;background:#fef3c7;color:#92400e;font-weight:700"><i class=\"fa fa-crown me-1\" style=\"font-size:9px\"></i>Lider</span>':'<span style="font-size:11px;color:#6b7280">Miembro</span>'?></td>
          </tr>
          <?php endforeach;?>
        </tbody>
      </table>
    </div>
  </div>

  <!-- Bitacoras del grupo -->
  <?php if(!empty($bitacorasGrupo)):?>
  <div class="card shadow-sm border-0">
    <div class="card-body p-0">
      <div style="padding:16px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;border-bottom:1px solid #f3f4f6">Bitacoras del grupo</div>
      <table class="table table-hover mb-0" style="font-size:13px">
        <thead style="background:#f8f9fa"><tr style="font-size:11px;text-transform:uppercase;color:#6b7280"><th class="px-3 py-2">Semana</th><th>Periodo</th><th class="text-center">Secciones</th><th class="text-center">Horas</th><th>Estado</th><th class="text-center">Accion</th></tr></thead>
        <tbody>
          <?php foreach($bitacorasGrupo as $b):?>
          <tr>
            <td class="px-3 py-2"><strong>Semana <?=$b['semana_numero']?></strong></td>
            <td class="py-2" style="font-size:12px;color:#6b7280"><?=formatFecha($b['fecha_inicio_semana'])?> - <?=formatFecha($b['fecha_fin_semana'])?></td>
            <td class="py-2 text-center" style="color:#2563eb;font-weight:600"><?=$b['total_sec']?>/<?=count($miembrosGrupo)?></td>
            <td class="py-2 text-center" style="font-weight:700"><?=$b['horas_totales_grupo']?>h</td>
            <td class="py-2"><?=badgeEstado($b['estado'])?></td>
            <td class="py-2 text-center">
              <?php if($b['estado']==='enviada'):?>
              <button class="btn btn-sm btn-primary" data-bs-toggle="modal" data-bs-target="#modalValidar<?=$b['id_bitacora']?>">
                <i class="fa fa-check-circle me-1"></i>Validar
              </button>
              <div class="modal fade" id="modalValidar<?=$b['id_bitacora']?>" tabindex="-1"><div class="modal-dialog"><div class="modal-content">
                <div class="modal-header"><h5 class="modal-title">Validar Semana <?=$b['semana_numero']?></h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>
                <form method="POST"><input type="hidden" name="accion" value="validar_bitacora"><input type="hidden" name="id_bitacora" value="<?=$b['id_bitacora']?>">
                  <div class="modal-body">
                    <div class="mb-3"><label class="form-label">Comentario (opcional)</label><textarea name="comentario_tutor" class="form-control" rows="3" placeholder="Observaciones sobre la bitacora..."></textarea></div>
                    <div class="d-flex gap-2">
                      <button type="submit" name="nuevo_estado" value="validada" class="btn btn-success btn-sm flex-fill"><i class="fa fa-check me-1"></i>Validar</button>
                      <button type="submit" name="nuevo_estado" value="observada" class="btn btn-warning btn-sm flex-fill"><i class="fa fa-comment me-1"></i>Observar</button>
                    </div>
                  </div>
                </form>
              </div></div></div>
              <?php else:?><span class="badge-estado <?=$eColor[$b['estado']]??'st-borrador'?>"><?=$b['estado']?></span><?php endif;?>
            </td>
          </tr>
          <?php endforeach;?>
        </tbody>
      </table>
    </div>
  </div>
  <?php endif;?>

  <!-- ══════════════════════════════════════════════════════
       INFORME FINAL — ver / descargar
  ══════════════════════════════════════════════════════ -->
  <?php
    $estInf=$entregaInf?$entregaInf['estado']:'sin';
    $colorInf=match($estInf){'pendiente_revision'=>'#f59e0b','observado'=>'#d97706','aprobado'=>'#16a34a',default=>'#9ca3af'};
    $labelInf=match($estInf){'pendiente_revision'=>'En revisión','observado'=>'Observado','aprobado'=>'Aprobado ✓','sin'=>'Sin entregar'};
  ?>
  <div class="card shadow-sm border-0 mb-4" style="border-left:4px solid <?=$colorInf?>!important">
    <div class="card-body">
      <div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mb-2">
        <div style="font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#6b7280">
          <i class="fa fa-file-lines me-1" style="color:<?=$colorInf?>"></i>Informe Final de Vinculacion
        </div>
        <span style="font-size:11px;padding:3px 12px;border-radius:20px;font-weight:700;background:<?=$colorInf?>18;color:<?=$colorInf?>;border:1px solid <?=$colorInf?>55">
          <?=$labelInf?>
        </span>
      </div>
      <?php if(!$entregaInf||$estInf==='sin'):?>
      <div style="text-align:center;padding:20px;color:#9ca3af;font-size:13px">
        <i class="fa fa-file-circle-xmark fa-2x mb-2 d-block"></i>El grupo aun no ha entregado el informe.
      </div>
      <?php else:?>
      <div class="d-flex justify-content-between align-items-center flex-wrap gap-2">
        <div style="font-size:13px">
          <div><strong>Entregado por:</strong> <?=htmlspecialchars($entregaInf['nombre_lider'])?></div>
          <div style="font-size:12px;color:#6b7280;margin-top:3px">
            Fecha entrega: <?=date('d/m/Y H:i',strtotime($entregaInf['created_at']))?>
            &nbsp;·&nbsp; Ultima actualización: <?=date('d/m/Y H:i',strtotime($entregaInf['updated_at']))?>
          </div>
          <?php if($entregaInf['observacion_tutor']):?>
          <div style="margin-top:8px;background:#fef3c7;border-radius:6px;padding:8px 12px;font-size:12px;color:#92400e">
            <strong>Observacion del tutor:</strong> <?=nl2br(htmlspecialchars($entregaInf['observacion_tutor']))?>
          </div>
          <?php endif;?>
        </div>
        <?php
          $urlInf = OneDriveStorage::esOneDrive($entregaInf['archivo'])
            ? OneDriveStorage::getDownloadUrl($entregaInf['archivo'])
            : BASE_URL.'/uploads/informes_vinculacion/'.urlencode($entregaInf['archivo']);
        ?>
        <a href="<?=htmlspecialchars($urlInf)?>"
           target="_blank"
           class="btn btn-sm <?=$estInf==='aprobado'?'btn-success':'btn-outline-secondary'?>">
          <i class="fa fa-<?=$estInf==='aprobado'?'file-circle-check':'eye'?> me-1"></i>
          <?=$estInf==='aprobado'?'Descargar informe aprobado':'Ver informe enviado'?>
        </a>
      </div>
      <?php endif;?>
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════
       CALIFICACIONES DEL TUTOR — por estudiante (solo lectura)
  ══════════════════════════════════════════════════════ -->
  <?php
    $hayCalif=!empty($calificacionesMapa);
    $totalCalif=count(array_filter($calificacionesMapa,fn($c)=>$c['estado']==='calificado'));
    $totalMiemb=count($miembrosGrupo);
    $promedios=array_filter(array_column($calificacionesMapa,'nota_promedio'),fn($v)=>$v!==null);
    $promGrupo=count($promedios)>0?round(array_sum($promedios)/count($promedios),2):null;
  ?>
  <div class="card shadow-sm border-0 mb-4" style="border-top:3px solid #7c3aed">
    <div class="card-body p-0">
      <!-- Header -->
      <div style="padding:14px 20px;border-bottom:1px solid #f3f4f6;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px">
        <div>
          <div style="font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#7c3aed">
            <i class="fa fa-graduation-cap me-1"></i>Calificaciones de Vinculacion — puestas por el Tutor
          </div>
          <div style="font-size:11px;color:#9ca3af;margin-top:3px">
            <?=$totalCalif?>/<?=$totalMiemb?> estudiantes calificados &nbsp;·&nbsp;
            Escala 0–100 &nbsp;·&nbsp; Aprobatorio ≥ 70 &nbsp;·&nbsp;
            Normativa CES 2022 / CACES / LOES Art. 87
          </div>
        </div>
        <?php if($promGrupo!==null):?>
        <div style="text-align:right">
          <div style="font-size:10px;color:#9ca3af;margin-bottom:2px">Promedio general</div>
          <div style="font-size:28px;font-weight:800;color:<?=$promGrupo>=70?'#16a34a':'#dc2626'?>">
            <?=number_format($promGrupo,1)?><span style="font-size:13px;font-weight:400;color:#9ca3af"> / 100</span>
          </div>
        </div>
        <?php endif;?>
      </div>

      <?php if(!$hayCalif||$totalCalif===0):?>
      <div style="text-align:center;padding:32px;color:#9ca3af;font-size:13px">
        <i class="fa fa-lock fa-2x mb-2 d-block" style="color:#d1d5db"></i>
        <?=$verGrupo['estado']==='completado'?'El tutor aun no ha ingresado calificaciones.':'Las calificaciones se habilitan cuando el grupo este completado y el informe aprobado.'?>
      </div>

      <?php else:?>
      <!-- Escala referencia -->
      <div style="display:flex;gap:6px;flex-wrap:wrap;padding:10px 20px;background:#faf5ff;border-bottom:1px solid #f3f4f6">
        <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#f0fdf4;color:#16a34a;font-weight:600;border:1px solid #bbf7d0">90–100 Excelente</span>
        <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#f0fdf4;color:#16a34a;font-weight:600;border:1px solid #bbf7d0">80–89 Muy Bueno</span>
        <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#eff6ff;color:#2563eb;font-weight:600;border:1px solid #bfdbfe">70–79 Bueno</span>
        <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#fff1f0;color:#dc2626;font-weight:600;border:1px solid #fecaca">0–69 Reprobado</span>
      </div>
      <!-- Tabla de calificaciones -->
      <table class="table table-hover mb-0" style="font-size:13px">
        <thead style="background:#f8f9fa">
          <tr style="font-size:11px;text-transform:uppercase;color:#6b7280">
            <th class="px-3 py-2">#</th>
            <th>Estudiante</th>
            <th>Rol</th>
            <th class="text-center">N1 — Informe PDF</th>
            <th class="text-center">N2 — Trabajo Individual</th>
            <th class="text-center">Promedio</th>
            <th class="text-center">Resultado</th>
            <th>Observacion tutor</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach($miembrosGrupo as $idx=>$m):
            $cal=$calificacionesMapa[$m['id_estudiante']]??null;
            $calificado=$cal&&$cal['estado']==='calificado';
            $n1=$cal?$cal['nota_informe_pdf']:null;
            $n2=$cal?$cal['nota_trabajo_individual']:null;
            $prom=$cal?$cal['nota_promedio']:null;
            $aprobado=$prom!==null&&$prom>=70;
            $label=$prom===null?'—':($prom>=90?'Excelente':($prom>=80?'Muy Bueno':($prom>=70?'Bueno':'Reprobado')));
          ?>
          <tr style="<?=$aprobado?'background:#f0fdf420':($prom!==null?'background:#fff1f020':'')?>">
            <td class="px-3 py-2" style="color:#9ca3af"><?=$idx+1?></td>
            <td class="py-2">
              <div style="font-weight:600"><?=htmlspecialchars($m['nombre_completo'])?></div>
              <div style="font-size:10px;color:#9ca3af;font-family:monospace"><?=htmlspecialchars($m['codigo_estudiante'])?></div>
            </td>
            <td class="py-2">
              <?php if($m['rol']==='lider'):?>
              <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#fef3c7;color:#92400e;font-weight:700"><i class="fa fa-crown me-1" style="font-size:8px"></i>Lider</span>
              <?php else:?>
              <span style="font-size:11px;color:#6b7280">Miembro</span>
              <?php endif;?>
            </td>
            <td class="py-2 text-center">
              <?php if($n1!==null):?>
              <span style="font-size:15px;font-weight:700;color:#2563eb"><?=number_format((float)$n1,1)?></span>
              <span style="font-size:11px;color:#9ca3af"> /100</span>
              <?php else:?><span style="color:#d1d5db;font-size:13px">—</span><?php endif;?>
            </td>
            <td class="py-2 text-center">
              <?php if($n2!==null):?>
              <span style="font-size:15px;font-weight:700;color:#7c3aed"><?=number_format((float)$n2,1)?></span>
              <span style="font-size:11px;color:#9ca3af"> /100</span>
              <?php else:?><span style="color:#d1d5db;font-size:13px">—</span><?php endif;?>
            </td>
            <td class="py-2 text-center">
              <?php if($prom!==null):?>
              <span style="font-size:16px;font-weight:800;color:<?=$aprobado?'#16a34a':'#dc2626'?>"><?=number_format((float)$prom,1)?></span>
              <span style="font-size:11px;color:#9ca3af"> /100</span>
              <?php else:?><span style="color:#d1d5db;font-size:13px">—</span><?php endif;?>
            </td>
            <td class="py-2 text-center">
              <?php if(!$calificado):?>
              <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#f3f4f6;color:#9ca3af;font-weight:600">Pendiente</span>
              <?php elseif($aprobado):?>
              <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#f0fdf4;color:#16a34a;font-weight:700;border:1px solid #bbf7d0">
                <i class="fa fa-circle-check me-1"></i><?=$label?>
              </span>
              <?php else:?>
              <span style="font-size:10px;padding:2px 8px;border-radius:20px;background:#fff1f0;color:#dc2626;font-weight:700;border:1px solid #fecaca">
                <i class="fa fa-circle-xmark me-1"></i><?=$label?>
              </span>
              <?php endif;?>
            </td>
            <td class="py-2" style="font-size:12px;color:#6b7280;max-width:180px">
              <?=$cal&&$cal['observaciones']?nl2br(htmlspecialchars(substr($cal['observaciones'],0,100))):'<span style="color:#d1d5db">—</span>'?>
            </td>
          </tr>
          <?php endforeach;?>
        </tbody>
        <!-- Fila resumen -->
        <?php if($totalCalif>0&&$promGrupo!==null):?>
        <tfoot>
          <tr style="background:#faf5ff;font-weight:700;font-size:12px">
            <td colspan="5" class="px-3 py-2 text-end" style="color:#7c3aed">PROMEDIO GENERAL DEL GRUPO</td>
            <td class="py-2 text-center">
              <span style="font-size:18px;font-weight:800;color:<?=$promGrupo>=70?'#16a34a':'#dc2626'?>"><?=number_format($promGrupo,1)?></span>
              <span style="font-size:11px;color:#9ca3af"> /100</span>
            </td>
            <td colspan="2" class="py-2">
              <span style="font-size:10px;padding:3px 10px;border-radius:20px;font-weight:700;background:<?=$promGrupo>=70?'#f0fdf4':'#fff1f0'?>;color:<?=$promGrupo>=70?'#16a34a':'#dc2626'?>;border:1px solid <?=$promGrupo>=70?'#bbf7d0':'#fecaca'?>">
                <?=$promGrupo>=70?'Grupo APROBADO':'Grupo REPROBADO'?>
              </span>
              <div style="font-size:10px;color:#9ca3af;margin-top:3px"><?=$totalCalif?>/<?=$totalMiemb?> calificados</div>
            </td>
          </tr>
        </tfoot>
        <?php endif;?>
      </table>
      <?php endif;?>
    </div>
  </div>

<?php else:?>
  <!-- LISTA DE GRUPOS -->
  <div class="page-header d-flex justify-content-between align-items-center flex-wrap gap-2 mb-4">
    <div><h4 class="mb-1"><i class="fa fa-handshake me-2" style="color:#10b981"></i>Grupos de Vinculacion</h4><p style="font-size:13px;color:#6b7280">Historial por ciclo y carrera</p></div>
    <button class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#modalProyecto"><i class="fa fa-plus me-1"></i>Nuevo proyecto catalogo</button>
  </div>
  <?=flashHtml()?>

  <!-- ══ FILTROS ══ -->
  <div class="card shadow-sm border-0 mb-4">
    <div class="card-body py-3">
      <form method="GET" class="row g-2 align-items-end">
        <div class="col-sm-6 col-md-3">
          <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280">Ciclo / Período</label>
          <select name="periodo" class="form-select form-select-sm">
            <option value="0">— Todos los períodos —</option>
            <?php foreach($periodos as $p): ?>
            <option value="<?=$p['id_periodo']?>" <?=$filtroPeriodo==$p['id_periodo']?'selected':''?>>
              <?=htmlspecialchars($p['nombre'])?>
              <?=$p['id_periodo']==$idPerActivo?' ★ activo':''?>
            </option>
            <?php endforeach; ?>
          </select>
        </div>
        <div class="col-sm-6 col-md-3">
          <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280">Carrera</label>
          <select name="carrera" class="form-select form-select-sm">
            <option value="0">— Todas las carreras —</option>
            <?php foreach($carreras as $c): ?>
            <option value="<?=$c['id_carrera']?>" <?=$filtroCarrera==$c['id_carrera']?'selected':''?>><?=htmlspecialchars($c['nombre'])?></option>
            <?php endforeach; ?>
          </select>
        </div>
        <div class="col-sm-6 col-md-2">
          <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280">Estado</label>
          <select name="estado" class="form-select form-select-sm">
            <option value="">— Todos —</option>
            <option value="pendiente"   <?=$filtroEstado==='pendiente'  ?'selected':''?>>Pendiente</option>
            <option value="aprobado"    <?=$filtroEstado==='aprobado'   ?'selected':''?>>Aprobado</option>
            <option value="en_progreso" <?=$filtroEstado==='en_progreso'?'selected':''?>>En progreso</option>
            <option value="completado"  <?=$filtroEstado==='completado' ?'selected':''?>>Completado</option>
          </select>
        </div>
        <div class="col-sm-6 col-md-3">
          <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280">Buscar proyecto / org.</label>
          <input type="text" name="q" class="form-control form-control-sm" value="<?=htmlspecialchars($filtroQ)?>" placeholder="Nombre del proyecto u org...">
        </div>
        <div class="col-auto d-flex gap-2">
          <button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-filter me-1"></i>Filtrar</button>
          <a href="vinculacion.php" class="btn btn-outline-secondary btn-sm"><i class="fa fa-xmark me-1"></i>Limpiar</a>
        </div>
      </form>
    </div>
  </div>

  <!-- Bitacoras pendientes de validacion -->
  <?php if(!empty($bitPendientes)):?>
  <div class="card shadow-sm border-0 mb-4" style="border-left:4px solid #2563eb!important">
    <div class="card-body">
      <div style="font-size:12px;font-weight:700;text-transform:uppercase;color:#2563eb;margin-bottom:10px"><i class="fa fa-inbox me-1"></i>Bitacoras pendientes de validacion (<?=count($bitPendientes)?>)</div>
      <?php foreach($bitPendientes as $bpend):?>
      <div style="display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid #f3f4f6">
        <div><div style="font-weight:600;font-size:13px"><?=htmlspecialchars($bpend['nombre_proyecto'])?> — Semana <?=$bpend['semana_numero']?></div>
        <div style="font-size:12px;color:#6b7280"><?=htmlspecialchars($bpend['organizacion'])?> · Lider: <?=htmlspecialchars($bpend['lider_nombre'])?> · <?=$bpend['horas_totales_grupo']?>h · <?=$bpend['total_sec']?> secciones</div></div>
        <a href="vinculacion.php?grupo=<?=$bpend['id_grupo']?>" class="btn btn-sm btn-primary"><i class="fa fa-check-circle me-1"></i>Revisar</a>
      </div>
      <?php endforeach;?>
    </div>
  </div>
  <?php endif;?>

  <!-- Stats del filtro actual -->
  <?php
  $tot=count($grupos);
  $pend=count(array_filter($grupos,fn($g)=>$g['estado']=='pendiente'));
  $activos=count(array_filter($grupos,fn($g)=>in_array($g['estado'],['aprobado','en_progreso'])));
  $completados=count(array_filter($grupos,fn($g)=>$g['estado']=='completado'));
  $totMiembros=array_sum(array_column($grupos,'total_miembros'));
  $perNombre='Todos los períodos';
  foreach($periodos as $p){ if($p['id_periodo']==$filtroPeriodo){ $perNombre=$p['nombre']; break; } }
  $carNombre='Todas las carreras';
  foreach($carreras as $c){ if($c['id_carrera']==$filtroCarrera){ $carNombre=$c['nombre']; break; } }
  ?>
  <?php if($filtroPeriodo||$filtroCarrera):?>
  <div style="font-size:12px;color:#6b7280;margin-bottom:12px;padding:8px 12px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0">
    <i class="fa fa-filter me-1 text-primary"></i>
    Mostrando: <strong><?=htmlspecialchars($perNombre)?></strong>
    <?php if($filtroCarrera):?> · Carrera: <strong><?=htmlspecialchars($carNombre)?></strong><?php endif;?>
    <?php if($filtroEstado):?> · Estado: <strong><?=ucfirst($filtroEstado)?></strong><?php endif;?>
    · <strong><?=$tot?></strong> grupo(s)
  </div>
  <?php endif;?>

  <div class="row g-3 mb-4">
    <div class="col-6 col-md-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#2563eb"><?=$tot?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Total grupos</div></div></div>
    <div class="col-6 col-md-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#d97706"><?=$pend?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Pendientes</div></div></div>
    <div class="col-6 col-md-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#16a34a"><?=$activos?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Activos</div></div></div>
    <div class="col-6 col-md-3"><div class="card border-0 shadow-sm text-center py-3"><div style="font-size:26px;font-weight:800;color:#7c3aed"><?=$completados?></div><div style="font-size:11px;text-transform:uppercase;color:#6b7280">Completados</div></div></div>
  </div>

  <!-- Tabla grupos -->
  <div class="card shadow-sm border-0 mb-4">
    <div class="card-body p-0">
      <table class="table table-hover mb-0" style="font-size:13px">
        <thead style="background:#f8f9fa">
          <tr style="font-size:11px;text-transform:uppercase;color:#6b7280">
            <th class="px-3 py-3">Proyecto / Grupo</th>
            <th>Período</th>
            <th>Carrera</th>
            <th>Organización</th>
            <th>Líder</th>
            <th class="text-center">Miembros</th>
            <th>Tutor</th>
            <th>Estado</th>
            <th>Ver</th>
          </tr>
        </thead>
        <tbody>
          <?php if(empty($grupos)):?>
          <tr><td colspan="9" class="text-center text-muted py-5">
            <i class="fa fa-magnifying-glass fa-2x mb-2 d-block" style="color:#d1d5db"></i>
            No se encontraron grupos con los filtros seleccionados.<br>
            <a href="vinculacion.php" class="btn btn-outline-secondary btn-sm mt-2"><i class="fa fa-xmark me-1"></i>Limpiar filtros</a>
          </td></tr>
          <?php else:foreach($grupos as $g):$cls=$eColor[$g['estado']]??'st-borrador';?>
          <tr>
            <td class="px-3 py-2"><strong><?=htmlspecialchars($g['nombre_proyecto'])?></strong></td>
            <td class="py-2">
              <span style="font-size:11px;padding:2px 8px;border-radius:20px;background:<?=$g['id_periodo']==$idPerActivo?'#f0fdf4':'#f1f5f9'?>;color:<?=$g['id_periodo']==$idPerActivo?'#15803d':'#475569'?>;font-weight:600;border:1px solid <?=$g['id_periodo']==$idPerActivo?'#86efac':'#e2e8f0'?>">
                <?=htmlspecialchars($g['periodo_nombre'])?>
                <?=$g['id_periodo']==$idPerActivo?' ★':''?>
              </span>
            </td>
            <td class="py-2" style="font-size:12px;color:#374151"><?=htmlspecialchars($g['carrera_lider'])?></td>
            <td class="py-2" style="font-size:12px"><?=htmlspecialchars($g['organizacion'])?><?=!$g['id_organizacion']?'<span style="font-size:10px;color:#f59e0b;display:block">Nueva org.</span>':''?></td>
            <td class="py-2" style="font-size:12px"><?=htmlspecialchars($g['lider_nombre'])?></td>
            <td class="py-2 text-center"><strong style="color:#2563eb"><?=$g['total_miembros']?></strong></td>
            <td class="py-2" style="font-size:12px"><?=$g['tutor_nombre']?htmlspecialchars($g['tutor_nombre']):'<span style="color:#d97706">Sin asignar</span>'?></td>
            <td class="py-2"><span class="badge-estado <?=$cls?>"><?=ucfirst($g['estado'])?></span></td>
            <td class="py-2"><a href="vinculacion.php?grupo=<?=$g['id_grupo']?>" class="btn btn-sm btn-outline-secondary"><i class="fa fa-eye me-1"></i>Ver</a></td>
          </tr>
          <?php endforeach;endif;?>
        </tbody>
      </table>
    </div>
  </div>

  <!-- ===== DOCUMENTOS DE VINCULACION ===== -->
  <div class="card shadow-sm border-0 mb-4">
    <div class="card-body">
      <div class="d-flex justify-content-between align-items-center mb-3">
        <div style="font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#7c3aed">
          <i class="fa fa-file-arrow-down me-1"></i>Documentos para estudiantes de Vinculacion
        </div>
        <button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#modalSubirDoc">
          <i class="fa fa-upload me-1"></i>Subir documento
        </button>
      </div>
      <?php if(empty($docsVinc)):?>
      <div style="text-align:center;padding:24px;color:#9ca3af;font-size:13px">
        <i class="fa fa-folder-open fa-2x mb-2 d-block"></i>
        Sin documentos aun. Sube el informe final u otros formatos para que los estudiantes puedan descargarlos.
      </div>
      <?php else:?>
      <table class="table table-hover mb-0" style="font-size:13px">
        <thead style="background:#f8f9fa">
          <tr style="font-size:11px;text-transform:uppercase;color:#6b7280">
            <th class="px-3 py-2">Documento</th>
            <th>Descripcion</th>
            <th>Subido por</th>
            <th>Fecha</th>
            <th class="text-center">Descargar</th>
            <th class="text-center">Eliminar</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach($docsVinc as $dv):
            $ext=strtolower(pathinfo($dv['archivo'],PATHINFO_EXTENSION));
            $ico=match($ext){'pdf'=>'fa-file-pdf','doc','docx'=>'fa-file-word','xlsx'=>'fa-file-excel','pptx'=>'fa-file-powerpoint','jpg','png'=>'fa-file-image',default=>'fa-file'};
            $colorIco=match($ext){'pdf'=>'#dc2626','doc','docx'=>'#2563eb','xlsx'=>'#16a34a','pptx'=>'#d97706',default=>'#6b7280'};
          ?>
          <tr>
            <td class="px-3 py-2">
              <i class="fa <?=$ico?> me-2" style="color:<?=$colorIco?>"></i>
              <strong><?=htmlspecialchars($dv['nombre'])?></strong>
            </td>
            <td class="py-2" style="font-size:12px;color:#6b7280"><?=htmlspecialchars($dv['descripcion']??'—')?></td>
            <td class="py-2" style="font-size:12px"><?=htmlspecialchars($dv['subido_por_nombre'])?></td>
            <td class="py-2" style="font-size:12px;color:#6b7280"><?=date('d/m/Y',strtotime($dv['created_at']))?></td>
            <td class="py-2 text-center">
              <?php
                $urlDv = OneDriveStorage::esOneDrive($dv['archivo'])
                  ? OneDriveStorage::getDownloadUrl($dv['archivo'])
                  : BASE_URL.'/uploads/documentos_vinculacion/'.urlencode($dv['archivo']);
              ?>
              <a href="<?=htmlspecialchars($urlDv)?>" target="_blank" class="btn btn-sm btn-primary">
                <i class="fa fa-download me-1"></i>Descargar
              </a>
            </td>
            <td class="py-2 text-center">
              <?php $dvNombre=htmlspecialchars($dv['nombre'],ENT_QUOTES,'UTF-8');?>
              <form method="POST" onsubmit="return confirm('Eliminar: <?=$dvNombre?>?')">
                <input type="hidden" name="accion" value="eliminar_documento">
                <input type="hidden" name="id_doc" value="<?=$dv['id_doc']?>">
                <button type="submit" class="btn btn-sm btn-outline-danger"><i class="fa fa-trash"></i></button>
              </form>
            </td>
          </tr>
          <?php endforeach;?>
        </tbody>
      </table>
      <?php endif;?>
    </div>
  </div>

  <!-- Modal subir documento -->
  <div class="modal fade" id="modalSubirDoc" tabindex="-1"><div class="modal-dialog"><div class="modal-content">
    <div class="modal-header">
      <h5 class="modal-title"><i class="fa fa-upload me-2"></i>Subir documento para estudiantes</h5>
      <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
    </div>
    <form method="POST" enctype="multipart/form-data">
      <input type="hidden" name="accion" value="subir_documento">
      <div class="modal-body"><div class="row g-3">
        <div class="col-12">
          <label class="form-label">Nombre del documento <span class="text-danger">*</span></label>
          <input type="text" name="nombre_doc" class="form-control" required placeholder="Ej: Informe Final de Vinculación Mar-May 2026">
        </div>
        <div class="col-12">
          <label class="form-label">Descripcion (opcional)</label>
          <textarea name="desc_doc" class="form-control" rows="2" placeholder="Breve descripcion de este documento..."></textarea>
        </div>
        <div class="col-12">
          <label class="form-label">Archivo <span class="text-danger">*</span></label>
          <input type="file" name="archivo_doc" class="form-control" required accept=".pdf,.doc,.docx,.xlsx,.pptx,.jpg,.png">
          <div style="font-size:11px;color:#6b7280;margin-top:4px">Formatos: PDF, Word, Excel, PowerPoint, imagen. Max 10 MB.</div>
        </div>
      </div></div>
      <div class="modal-footer">
        <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Cancelar</button>
        <button type="submit" class="btn btn-primary"><i class="fa fa-upload me-1"></i>Subir documento</button>
      </div>
    </form>
  </div></div></div>
  <!-- ===== FIN DOCUMENTOS ===== -->

  <!-- Modal nuevo proyecto catalogo -->
  <div class="modal fade" id="modalProyecto" tabindex="-1"><div class="modal-dialog modal-lg"><div class="modal-content">
    <div class="modal-header"><h5 class="modal-title"><i class="fa fa-handshake me-2"></i>Nuevo proyecto de vinculacion (catalogo)</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div>
    <form method="POST"><input type="hidden" name="accion" value="crear_proyecto_org">
      <div class="modal-body"><div class="row g-3">
        <div class="col-12"><label class="form-label">Nombre del proyecto *</label><input type="text" name="nombre" class="form-control" required placeholder="Nombre descriptivo del proyecto"></div>
        <div class="col-sm-6"><label class="form-label">Organizacion beneficiaria *</label><select name="id_organizacion" class="form-select" required><option value="">-- Seleccionar --</option><?php foreach($organizaciones as $o):?><option value="<?=$o['id_organizacion']?>"><?=htmlspecialchars($o['nombre'])?></option><?php endforeach;?></select></div>
        <div class="col-sm-6"><label class="form-label">Periodo academico *</label><select name="id_periodo" class="form-select" required><?php foreach($periodos as $p):?><option value="<?=$p['id_periodo']?>" <?=$p['id_periodo']==$idPerActivo?'selected':''?>><?=htmlspecialchars($p['nombre'])?></option><?php endforeach;?></select></div>
        <div class="col-sm-4"><label class="form-label">Horas requeridas</label><input type="number" name="horas_requeridas" class="form-control" value="160" min="1"></div>
        <div class="col-sm-4"><label class="form-label">Fecha inicio</label><input type="date" name="fecha_inicio" class="form-control"></div>
        <div class="col-sm-4"><label class="form-label">Fecha fin</label><input type="date" name="fecha_fin" class="form-control"></div>
        <div class="col-sm-6"><label class="form-label">Area</label><input type="text" name="area" class="form-control" placeholder="Educacion, Salud, Medio ambiente..."></div>
        <div class="col-12"><label class="form-label">Descripcion</label><textarea name="descripcion" class="form-control" rows="2"></textarea></div>
        <div class="col-12"><label class="form-label">Objetivo general</label><textarea name="objetivo_general" class="form-control" rows="2"></textarea></div>
      </div></div>
      <div class="modal-footer"><button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Cancelar</button><button type="submit" class="btn btn-primary"><i class="fa fa-save me-1"></i>Crear proyecto</button></div>
    </form>
  </div></div></div>
<?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>
</body></html>