<?php
// ═══════════════════════════════════════════════════════════════════
//  modules/admin/migrar_estudiantes.php  — v2
//  Migra TODO: usuario, estudiante, datos extendidos, ficha
//  socioeconómica, postulación, documentos y pagos.
// ═══════════════════════════════════════════════════════════════════
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/flash.php';
require_once __DIR__ . '/../../includes/functions.php';
requireRol(ROL_ADMIN);

$user  = currentUser();
$db    = getDB();
$dbMat = getDBMatriculate();
$pageTitle = 'Migrar Estudiantes';

// ── helpers ────────────────────────────────────────────────────────
function mapCarreraId(string $c, PDO $db): int {
    $c = strtolower(trim($c));
    if (str_contains($c,'marketing'))  return 3;
    if (str_contains($c,'talento'))  { ensureCarrera($db,4,'GTH-001','Tecnología en Gestión de Talento Humano'); return 4; }
    return 2; // Administración por defecto
}
function ensureCarrera(PDO $db, int $id, string $cod, string $nom): void {
    $r = $db->prepare("SELECT id_carrera FROM carreras WHERE id_carrera=:id");
    $r->execute([':id'=>$id]);
    if (!$r->fetch())
        $db->prepare("INSERT IGNORE INTO carreras(id_carrera,codigo,nombre,horas_minimas,nivel,activa)VALUES(:id,:c,:n,400,'tecnologo',1)")
           ->execute([':id'=>$id,':c'=>$cod,':n'=>$nom]);
}
function ensurePeriodo(PDO $db, string $nombre): int {
    $r = $db->prepare("SELECT id_periodo FROM periodos_academicos WHERE nombre=:n LIMIT 1");
    $r->execute([':n'=>$nombre]);
    $row = $r->fetch();
    if ($row) return (int)$row['id_periodo'];
    $fi = str_contains($nombre,'C1') ? '2026-01-01' : '2026-04-01';
    $ff = str_contains($nombre,'C1') ? '2026-06-30' : '2026-09-30';
    $db->prepare("INSERT INTO periodos_academicos(nombre,fecha_inicio,fecha_fin,activo)VALUES(:n,:fi,:ff,1)")
       ->execute([':n'=>$nombre,':fi'=>$fi,':ff'=>$ff]);
    return (int)$db->lastInsertId();
}

// ═══════════════════════════════════════════════════════════════════
//  POST — Migrar seleccionados
// ═══════════════════════════════════════════════════════════════════
$resultados = [];
if ($_SERVER['REQUEST_METHOD']==='POST' && isset($_POST['migrar'])) {
    if (!$dbMat) { flashSet('err','Sin conexión a base de matrícula.'); header('Location: migrar_estudiantes.php'); exit; }
    $ids = $_POST['ids'] ?? [];
    if (empty($ids)) { flashSet('err','Selecciona al menos un estudiante.'); header('Location: migrar_estudiantes.php'); exit; }

    $ok=0; $skip=0; $err=0;

    foreach ($ids as $rawId) {
        $idMat = (int)$rawId;

        // Datos completos desde matrícula
        $st = $dbMat->prepare("
            SELECT e.*,
                   p.id_postulacion, p.tipo_proceso, p.validacion_conocimiento,
                   p.carrera, p.modalidad, p.nivel AS nivel_post, p.paralelo,
                   p.periodo_lectivo, p.estado_postulacion,
                   p.correo_institucional, p.porcentaje_beca, p.valor_mensual,
                   p.id_beca, p.observaciones_admin, p.fecha_ultima_actualizacion AS fecha_aprobacion,
                   tb.nombre AS nombre_beca
            FROM   estudiantes e
            JOIN   postulaciones p ON p.id_estudiante = e.id_estudiante
            LEFT JOIN tipos_becas tb ON tb.id_beca = p.id_beca
            WHERE  e.id_estudiante = :id
              AND  p.estado_postulacion = 'aprobada'
            ORDER BY p.fecha_ultima_actualizacion DESC
            LIMIT 1
        ");
        $st->execute([':id'=>$idMat]);
        $d = $st->fetch();
        if (!$d) { $err++; $resultados[]=['nombre'=>"ID $idMat",'estado'=>'error','motivo'=>'Sin datos en matrícula']; continue; }

        // ¿Ya existe por cédula?
        $ck = $db->prepare("SELECT id_usuario FROM usuarios WHERE cedula=:c LIMIT 1");
        $ck->execute([':c'=>$d['cedula']]);
        if ($ck->fetch()) {
            $resultados[]=['nombre'=>$d['nombres'].' '.$d['apellidos'],'estado'=>'omitido','motivo'=>'Ya existe'];
            $skip++; continue;
        }

        try {
            $db->beginTransaction();

            // Email de acceso
            $emailSIGVP = !empty($d['correo_institucional']) ? $d['correo_institucional'] : $d['email'];
            $ckEmail = $db->prepare("SELECT COUNT(*) FROM usuarios WHERE email=:e");
            $ckEmail->execute([':e'=>$emailSIGVP]);
            if ((int)$ckEmail->fetchColumn()>0) $emailSIGVP = $d['cedula'].'.est@tecnopolis.edu.ec';

            // 1) usuarios
            $hash = '$2y$10$hOlDfarP2h8PAan06coVQuiIhNxd5vnGVnLKWXbGpcGD9X1/bhPqO';
            $db->prepare("INSERT INTO usuarios(cedula,nombres,apellidos,email,email_personal,telefono,password_hash,id_rol,activo,cambiar_password)
                          VALUES(:ced,:nom,:ape,:email,:emailp,:tel,:pass,5,1,1)")
               ->execute([':ced'=>$d['cedula'],':nom'=>mb_strtoupper(trim($d['nombres'])),
                          ':ape'=>mb_strtoupper(trim($d['apellidos'])),':email'=>$emailSIGVP,
                          ':emailp'=>$d['email'],':tel'=>$d['telefono']??'',':pass'=>$hash]);
            $idUsuario = (int)$db->lastInsertId();

            // 2) estudiantes (SIGVP nativo)
            $idCarrera = mapCarreraId($d['carrera']??'',$db);
            $idPeriodo = ensurePeriodo($db,$d['periodo_lectivo']??'2026-C3');
            $db->prepare("INSERT INTO estudiantes(id_usuario,id_carrera,id_periodo_ingreso,codigo_estudiante,semestre_actual,creditos_aprobados)
                          VALUES(:idu,:idc,:idp,:cod,1,0)")
               ->execute([':idu'=>$idUsuario,':idc'=>$idCarrera,':idp'=>$idPeriodo,':cod'=>$d['numero_matricula']]);
            $idEst = (int)$db->lastInsertId();

            // 3) mat_estudiantes (datos extendidos)
            $db->prepare("INSERT INTO mat_estudiantes
                (id_estudiante,numero_matricula,cedula,genero,fecha_nacimiento,edad,
                 lugar_nacimiento,domicilio,numero_hijos,tiene_discapacidad,
                 porcentaje_discapacidad,dispositivos_tecnologicos,acceso_internet,
                 foto_carnet,fecha_registro_mat)
                VALUES(:ide,:mat,:ced,:gen,:fn,:edad,:lugar,:dom,:hijo,:disc,:pdisc,:disp,:inet,:foto,:fecha)")
               ->execute([
                    ':ide'  => $idEst,
                    ':mat'  => $d['numero_matricula'],
                    ':ced'  => $d['cedula'],
                    ':gen'  => $d['genero']??null,
                    ':fn'   => $d['fecha_nacimiento']??null,
                    ':edad' => $d['edad']??null,
                    ':lugar'=> $d['lugar_nacimiento']??null,
                    ':dom'  => $d['domicilio']??null,
                    ':hijo' => $d['numero_hijos']??0,
                    ':disc' => $d['tiene_discapacidad']??'no',
                    ':pdisc'=> $d['porcentaje_discapacidad']??null,
                    ':disp' => $d['dispositivos_tecnologicos']??null,
                    ':inet' => $d['acceso_internet']??'no',
                    ':foto' => $d['foto_carnet']??null,
                    ':fecha'=> $d['fecha_registro']??date('Y-m-d H:i:s'),
               ]);

            // 4) mat_postulaciones
            $db->prepare("INSERT INTO mat_postulaciones
                (id_estudiante,tipo_proceso,validacion_conocimiento,carrera,modalidad,
                 nivel,paralelo,periodo_lectivo,estado_postulacion,correo_institucional,
                 porcentaje_beca,valor_mensual,id_beca,nombre_beca,observaciones_admin,
                 fecha_postulacion,fecha_aprobacion)
                VALUES(:ide,:tp,:vc,:car,:mod,:niv,:par,:per,:est,:cei,:pbeca,:vmen,:ibeca,:nbeca,:obs,:fpost,:fapro)")
               ->execute([
                    ':ide'   => $idEst,
                    ':tp'    => $d['tipo_proceso']??'beca',
                    ':vc'    => $d['validacion_conocimiento']??'novalidacion',
                    ':car'   => $d['carrera']??'',
                    ':mod'   => $d['modalidad']??'',
                    ':niv'   => $d['nivel_post']??1,
                    ':par'   => $d['paralelo']??null,
                    ':per'   => $d['periodo_lectivo']??'2026-C3',
                    ':est'   => $d['estado_postulacion']??'aprobada',
                    ':cei'   => $d['correo_institucional']??null,
                    ':pbeca' => $d['porcentaje_beca']??null,
                    ':vmen'  => $d['valor_mensual']??null,
                    ':ibeca' => $d['id_beca']??null,
                    ':nbeca' => $d['nombre_beca']??null,
                    ':obs'   => $d['observaciones_admin']??null,
                    ':fpost' => $d['fecha_postulacion']??date('Y-m-d H:i:s'),
                    ':fapro' => $d['fecha_aprobacion']??null,
               ]);

            // 5) mat_ficha_socioeconomica
            $fst = $dbMat->prepare("SELECT * FROM ficha_socioeconomica WHERE id_estudiante=:id LIMIT 1");
            $fst->execute([':id'=>$idMat]);
            $ficha = $fst->fetch();
            if ($ficha) {
                $db->prepare("INSERT INTO mat_ficha_socioeconomica
                    (id_estudiante,num_integrantes_hogar,estado_civil,numero_hijos,estudiante_trabaja,
                     horas_trabajo_semanal,ingresos_estudiante,ingresos_padre,ingresos_madre,otros_ingresos,
                     tipo_vivienda,gasto_vivienda,servicios_basicos,gasto_alimentacion,gasto_transporte,
                     gasto_educacion,otros_gastos,carrera_bachillerato,promedio_academico,
                     centro_educativo_anterior,observaciones_socioeconomicas)
                    VALUES(:ide,:nih,:ec,:nhij,:et,:hts,:ie,:ip,:im,:oi,:tv,:gv,:sb,:ga,:gt,:ge,:og,:cb,:pa,:cea,:obs)")
                   ->execute([
                        ':ide'=>$idEst,':nih'=>$ficha['num_integrantes_hogar'],':ec'=>$ficha['estado_civil'],
                        ':nhij'=>$ficha['numero_hijos'],':et'=>$ficha['estudiante_trabaja'],
                        ':hts'=>$ficha['horas_trabajo_semanal'],':ie'=>$ficha['ingresos_estudiante'],
                        ':ip'=>$ficha['ingresos_padre'],':im'=>$ficha['ingresos_madre'],
                        ':oi'=>$ficha['otros_ingresos'],':tv'=>$ficha['tipo_vivienda'],
                        ':gv'=>$ficha['gasto_vivienda'],':sb'=>$ficha['servicios_basicos'],
                        ':ga'=>$ficha['gasto_alimentacion'],':gt'=>$ficha['gasto_transporte'],
                        ':ge'=>$ficha['gasto_educacion'],':og'=>$ficha['otros_gastos'],
                        ':cb'=>$ficha['carrera_bachillerato'],':pa'=>$ficha['promedio_academico'],
                        ':cea'=>$ficha['centro_educativo_anterior'],':obs'=>$ficha['observaciones_socioeconomicas'],
                   ]);
            }

            // 6) mat_documentos (via id_postulacion del origen)
            $idPostMat = (int)($d['id_postulacion']??0);
            if ($idPostMat) {
                $dst = $dbMat->prepare("SELECT * FROM documentos WHERE id_postulacion=:p");
                $dst->execute([':p'=>$idPostMat]);
                foreach ($dst->fetchAll() as $doc) {
                    $db->prepare("INSERT INTO mat_documentos(id_estudiante,tipo_documento,nombre_archivo,ruta_archivo,es_requerido,fecha_subida,observaciones)
                                  VALUES(:ide,:td,:na,:ra,:er,:fs,:obs)")
                       ->execute([':ide'=>$idEst,':td'=>$doc['tipo_documento'],':na'=>$doc['nombre_archivo'],
                                  ':ra'=>$doc['ruta_archivo'],':er'=>$doc['es_requerido'],
                                  ':fs'=>$doc['fecha_subida'],':obs'=>$doc['observaciones']]);
                }
            }

            // 7) mat_pagos
            $pst = $dbMat->prepare("SELECT * FROM pagos WHERE id_estudiante=:id");
            $pst->execute([':id'=>$idMat]);
            foreach ($pst->fetchAll() as $pago) {
                $db->prepare("INSERT INTO mat_pagos(id_estudiante,concepto,monto,fecha_vencimiento,fecha_pago,comprobante_img,estado,notas)
                              VALUES(:ide,:con,:mon,:fv,:fp,:comp,:est,:not)")
                   ->execute([':ide'=>$idEst,':con'=>$pago['concepto'],':mon'=>$pago['monto'],
                              ':fv'=>$pago['fecha_vencimiento'],':fp'=>$pago['fecha_pago'],
                              ':comp'=>$pago['comprobante_img'],':est'=>$pago['estado'],':not'=>$pago['notas']]);
            }

            registrarAudit($user['id'],'migrar_estudiante_completo','estudiantes',$idUsuario);
            $db->commit();
            $resultados[]=['nombre'=>$d['nombres'].' '.$d['apellidos'],'cedula'=>$d['cedula'],'email'=>$emailSIGVP,'estado'=>'migrado'];
            $ok++;

        } catch (Exception $e) {
            $db->rollBack();
            $resultados[]=['nombre'=>($d['nombres']??'').' '.($d['apellidos']??''),'estado'=>'error','motivo'=>$e->getMessage()];
            $err++;
        }
    }

    $msg = "Migración: ✅ $ok migrados";
    if ($skip) $msg .= " · ⚠️ $skip ya existían";
    if ($err)  $msg .= " · ❌ $err errores";
    flashSet($ok>0?'ok':'err',$msg);
}

// ═══════════════════════════════════════════════════════════════════
//  Cargar listado
// ═══════════════════════════════════════════════════════════════════
$pendientes=[]; $errorConexion=false;
if ($dbMat) {
    try {
        $cedulasMigradas = $db->query("SELECT cedula FROM usuarios WHERE id_rol=5")->fetchAll(PDO::FETCH_COLUMN);
        $aprobados = $dbMat->query("
            SELECT e.id_estudiante, e.numero_matricula, e.cedula, e.nombres, e.apellidos,
                   e.email, e.telefono, e.genero, e.fecha_nacimiento, e.foto_carnet,
                   e.tiene_discapacidad, e.acceso_internet,
                   p.carrera, p.modalidad, p.nivel, p.periodo_lectivo,
                   p.estado_postulacion, p.porcentaje_beca, p.valor_mensual,
                   p.correo_institucional, p.fecha_ultima_actualizacion,
                   tb.nombre AS nombre_beca,
                   (SELECT COUNT(*) FROM ficha_socioeconomica fs WHERE fs.id_estudiante=e.id_estudiante) AS tiene_ficha,
                   (SELECT COUNT(*) FROM documentos dc JOIN postulaciones pp ON pp.id_postulacion=dc.id_postulacion WHERE pp.id_estudiante=e.id_estudiante) AS num_docs
            FROM   estudiantes e
            JOIN   postulaciones p ON p.id_estudiante=e.id_estudiante
            LEFT JOIN tipos_becas tb ON tb.id_beca=p.id_beca
            WHERE  p.estado_postulacion='aprobada'
              AND  e.cedula IS NOT NULL AND e.cedula!=''
              AND  e.nombres IS NOT NULL AND e.nombres!=''
            ORDER BY p.fecha_ultima_actualizacion DESC
        ")->fetchAll();
        foreach ($aprobados as $a) {
            $a['ya_migrado'] = in_array($a['cedula'],$cedulasMigradas);
            $pendientes[] = $a;
        }
    } catch (Exception) { $errorConexion=true; }
} else { $errorConexion=true; }

$total    = count($pendientes);
$migrados = count(array_filter($pendientes, fn($p)=>$p['ya_migrado']));
$xmigrar  = $total - $migrados;
?>
<!DOCTYPE html><html lang="es">
<head><?php include __DIR__.'/../../includes/head.php'; ?>
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-admin.css">
</head>
<body>
<?php include __DIR__.'/../../includes/navbar.php'; ?>
<div class="app-shell">
  <?php $sbActivo = 'migrar'; include __DIR__ . '/../../includes/sidebar_admin.php'; ?>

  <main class="main-area">
    <div class="page-header">
      <h4><i class="fa fa-file-import me-2" style="color:#2ea8ff;"></i>Migrar Estudiantes Aprobados</h4>
      <p>Importa desde <code>tecnopolisedu_matriculate</code> el perfil completo: datos personales, ficha socioeconómica, postulación, documentos y pagos.</p>
    </div>

    <?= flashHtml() ?>

    <?php if ($errorConexion): ?>
    <div class="tbl-wrap p-4" style="border:1px solid #ff9d9344;background:#ff9d9311;">
      <h5 style="color:#ff9d93;"><i class="fa fa-triangle-exclamation me-2"></i>Sin conexión a la base de matrícula</h5>
      <p style="color:#8b949e;">Verifica en <code>config/database.php</code> los datos de <code>DB_MAT_*</code>.</p>
      <pre style="background:#0d1117;color:#c792ea;padding:12px;border-radius:8px;font-size:12px;">
define('DB_MAT_NAME', 'tecnopolisedu_matriculate');
define('DB_MAT_USER', 'root');
define('DB_MAT_PASS', '');</pre>
      <p style="color:#ff9d93;font-size:13px;margin-top:10px;">
        ⚠️ Además asegúrate de haber ejecutado <strong>sigvp_extension.sql</strong> en la BD sigvp antes de migrar.
      </p>
    </div>

    <?php elseif (!empty($resultados)): ?>
    <!-- RESULTADOS -->
    <div class="tbl-wrap mb-4">
      <div class="p-3" style="border-bottom:1px solid #30363d;"><h5 class="mb-0">Resultado de la migración</h5></div>
      <table class="table table-borderless mb-0">
        <thead><tr><th>Estudiante</th><th>Cédula</th><th>Email asignado</th><th>Estado</th></tr></thead>
        <tbody>
          <?php foreach ($resultados as $r): ?>
          <tr>
            <td><?=htmlspecialchars($r['nombre'])?></td>
            <td style="font-family:monospace;"><?=htmlspecialchars($r['cedula']??'—')?></td>
            <td style="font-size:12px;"><?=htmlspecialchars($r['email']??'—')?></td>
            <td>
              <?php if($r['estado']==='migrado'): ?>
                <span class="badge-estado st-aprobado"><i class="fa fa-check me-1"></i>Migrado completo</span>
              <?php elseif($r['estado']==='omitido'): ?>
                <span class="badge-estado st-calificado">Ya existía</span>
              <?php else: ?>
                <span class="badge-estado st-rechazado" title="<?=htmlspecialchars($r['motivo']??'')?>">Error</span>
              <?php endif; ?>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <a href="migrar_estudiantes.php" class="btn btn-outline-secondary btn-sm mb-4">
      <i class="fa fa-arrow-left me-1"></i> Volver al listado
    </a>

    <?php else: ?>
    <!-- ESTADÍSTICAS -->
    <div class="row g-3 mb-4">
      <div class="col-sm-4"><div class="stat-card"><div><div class="stat-num" style="color:var(--accent)"><?=$total?></div><div class="stat-label">Total aprobados</div></div><div class="stat-icon">📋</div></div></div>
      <div class="col-sm-4"><div class="stat-card"><div><div class="stat-num" style="color:var(--green)"><?=$migrados?></div><div class="stat-label">Ya migrados a SIGVP</div></div><div class="stat-icon">✅</div></div></div>
      <div class="col-sm-4"><div class="stat-card"><div><div class="stat-num" style="color:var(--yellow)"><?=$xmigrar?></div><div class="stat-label">Pendientes de migrar</div></div><div class="stat-icon">⏳</div></div></div>
    </div>

    <!-- AVISO extension SQL -->
    <div class="mb-3 p-3" style="background:#c792ea11;border:1px solid #c792ea33;border-radius:8px;font-size:13px;">
      <i class="fa fa-database me-2" style="color:#c792ea;"></i>
      <strong style="color:#e6edf3;">Paso previo requerido:</strong>
      Antes de migrar por primera vez, ejecuta <code>sigvp_extension.sql</code> en la base de datos <code>sigvp</code>
      para crear las tablas <code>mat_*</code> que almacenan la ficha, documentos y pagos.
    </div>

    <?php if ($total===0): ?>
      <div class="tbl-wrap p-4 text-center text-muted"><i class="fa fa-inbox fa-2x mb-2 d-block"></i>No hay estudiantes aprobados con datos completos.</div>
    <?php else: ?>

    <form method="POST">
      <div class="tbl-wrap">
        <div class="p-3 d-flex justify-content-between align-items-center flex-wrap gap-2" style="border-bottom:1px solid #30363d;">
          <div class="d-flex align-items-center gap-3">
            <label style="font-size:13px;color:#8b949e;cursor:pointer;">
              <input type="checkbox" id="chkAll" style="accent-color:#2ea8ff;margin-right:6px;">
              Seleccionar pendientes
            </label>
            <span id="contSel" style="font-size:12px;color:#8b949e;">0 seleccionados</span>
          </div>
          <div class="d-flex gap-2">
            <input type="text" id="filtro" placeholder="🔍 Buscar..."
              class="form-control form-control-sm"
              style="max-width:200px;background:#0d1117;border-color:#30363d;color:#e6edf3;">
            <button type="submit" name="migrar" class="btn btn-primary btn-sm px-4">
              <i class="fa fa-file-import me-2"></i>Migrar seleccionados
            </button>
          </div>
        </div>

        <div style="overflow-x:auto;">
          <table class="table table-borderless mb-0" id="tblEst">
            <thead>
              <tr>
                <th></th>
                <th>Estudiante</th>
                <th>Cédula</th>
                <th>Email</th>
                <th>Teléfono</th>
                <th>Carrera</th>
                <th>Beca</th>
                <th>Valor</th>
                <th>Período</th>
                <th>Ficha</th>
                <th>Docs</th>
                <th>Foto</th>
                <th>Estado</th>
              </tr>
            </thead>
            <tbody>
              <?php foreach($pendientes as $e):
                $migrado = $e['ya_migrado'];
                $op = $migrado ? 'opacity:.45;' : '';
                $cn = strtolower($e['carrera']??'');
                if(str_contains($cn,'marketing'))     $car='📊 Marketing';
                elseif(str_contains($cn,'talento'))   $car='👥 Talento Humano';
                else                                   $car='🏢 Administración';
              ?>
              <tr class="fila-est" style="<?=$op?>">
                <td>
                  <?php if(!$migrado): ?>
                    <input type="checkbox" name="ids[]" value="<?=$e['id_estudiante']?>" class="chk-est" style="accent-color:#2ea8ff;">
                  <?php else: ?>
                    <i class="fa fa-check-circle" style="color:var(--green);" title="Migrado"></i>
                  <?php endif; ?>
                </td>
                <td>
                  <strong style="font-size:13px;"><?=htmlspecialchars($e['apellidos'].' '.$e['nombres'])?></strong>
                  <div style="font-size:11px;color:#8b949e;"><?=htmlspecialchars($e['numero_matricula'])?></div>
                </td>
                <td style="font-family:monospace;font-size:12px;"><?=htmlspecialchars($e['cedula'])?></td>
                <td style="font-size:11px;color:#8b949e;"><?=htmlspecialchars($e['email'])?></td>
                <td style="font-size:12px;"><?=htmlspecialchars($e['telefono']??'—')?></td>
                <td style="font-size:12px;"><?=$car?></td>
                <td style="font-size:11px;color:#c792ea;"><?=htmlspecialchars($e['nombre_beca']??'—')?></td>
                <td style="font-size:12px;"><?=$e['valor_mensual']?'$'.number_format((float)$e['valor_mensual'],2):'—'?></td>
                <td><span style="font-size:11px;font-family:monospace;"><?=htmlspecialchars($e['periodo_lectivo']??'')?></span></td>
                <td class="text-center"><?=$e['tiene_ficha']?'<span style="color:var(--green);">✓</span>':'<span style="color:#555;">—</span>'?></td>
                <td class="text-center"><span style="font-size:12px;color:#8b949e;"><?=(int)$e['num_docs']?></span></td>
                <td class="text-center"><?=(!empty($e['foto_carnet']) && $e['foto_carnet']!='assets/img/placeholder.jpg')?'<i class="fa fa-image" style="color:var(--green);"></i>':'<span style="color:#555;">—</span>'?></td>
                <td>
                  <?php if($migrado): ?>
                    <span class="badge-estado st-aprobado">Migrado</span>
                  <?php else: ?>
                    <span class="badge-estado st-postulado">Pendiente</span>
                  <?php endif; ?>
                </td>
              </tr>
              <?php endforeach; ?>
            </tbody>
          </table>
        </div>
      </div>
    </form>

    <div class="mt-3 p-3" style="background:#2ea8ff11;border:1px solid #2ea8ff33;border-radius:8px;font-size:12px;color:#8b949e;">
      <i class="fa fa-circle-info me-2" style="color:#2ea8ff;"></i>
      <strong style="color:#e6edf3;">¿Qué se migra?</strong>
      Datos personales completos · Postulación y beca · Ficha socioeconómica · Documentos subidos · Pagos registrados · Foto de carnet.
      Contraseña inicial de todos los estudiantes: <code>Sigvp2026!</code><br>
      <strong style="color:#e6edf3;">Fotos:</strong> Copia la carpeta <code>uploads/</code> de matrícula a <code>assets/uploads/</code> de SIGVP.
    </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(){
  $('#chkAll').on('change',function(){ $('.chk-est').prop('checked',this.checked); cont(); });
  $('.chk-est').on('change',cont);
  function cont(){ var n=$('.chk-est:checked').length; $('#contSel').text(n+' seleccionado'+(n===1?'':'s')); }
  $('#filtro').on('input',function(){
    var q=$(this).val().toLowerCase();
    $('.fila-est').each(function(){ $(this).toggle(!q||$(this).text().toLowerCase().includes(q)); });
  });
  $('form').on('submit',function(e){
    var n=$('.chk-est:checked').length;
    if(n===0){ e.preventDefault(); alert('Selecciona al menos un estudiante.'); return; }
    return confirm('¿Migrar '+n+' estudiante(s) con todos sus datos a SIGVP?\n\nEsto incluye: ficha socioeconómica, documentos y pagos.\nContraseña inicial: Sigvp2026!');
  });
});
</script>
</body></html>
