<?php
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'app.php';
require_once __DIR__ . '/../../config/onedrive.php';
require_once __DIR__ . '/../../includes/OneDriveStorage.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'auth.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'functions.php';
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'flash.php';
requireRol(ROL_ESTUDIANTE);
$idInst = instId();

$user = currentUser();
$db   = getDB();
$pageTitle = 'Informe Final';

// ── Obtener práctica activa del estudiante ─────────────────
$stEst = $db->prepare("SELECT id_estudiante FROM estudiantes WHERE id_usuario=:u");
$stEst->execute([':u' => $user['id']]);
$est = $stEst->fetch();

$practica = null;
$informe  = null;

if ($est) {
    $stPr = $db->prepare("
        SELECT pr.id_practica, pr.estado, pr.horas_requeridas, pr.horas_cumplidas,
               pr.nota_tutor_academico, pr.nota_tutor_empresa, pr.nota_empresa_100,
               pr.nota_bitacoras,      pr.nota_informe,
               pr.nota_final,          pr.fecha_calificacion,
               pr.modalidad,
               COALESCE(em.razon_social, pr.emp_nueva_nombre) AS empresa,
               pe.nombre AS periodo
        FROM   practicas pr
        LEFT JOIN empresas em       ON em.id_empresa  = pr.id_empresa
        JOIN   periodos_academicos pe ON pe.id_periodo = pr.id_periodo
        WHERE  pr.id_estudiante = :eid
          AND  pe.activo = 1
        ORDER  BY pr.created_at DESC LIMIT 1
    ");
    $stPr->execute([':eid' => $est['id_estudiante']]);
    $practica = $stPr->fetch();

    if ($practica) {
        $stInf = $db->prepare("SELECT * FROM informes_finales WHERE id_practica=:pid ORDER BY created_at DESC LIMIT 1");
        $stInf->execute([':pid' => $practica['id_practica']]);
        $informe = $stInf->fetch();
    }
}

// ── Detectar si es convalidación ───────────────────────────
$esConval = false;
if ($practica) {
    $stConv = $db->prepare("
        SELECT COUNT(*) FROM convalidaciones
        WHERE id_practica = :pid
    ");
    $stConv->execute([':pid' => $practica['id_practica']]);
    $esConval = (int)$stConv->fetchColumn() > 0
                || ($practica['modalidad'] ?? '') === 'convalidacion';
}

// ── SUBIR INFORME ──────────────────────────────────────────
$errUpload = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $practica && !$informe) {
    $titulo  = trim($_POST['titulo']  ?? '');
    $resumen = trim($_POST['resumen'] ?? '');
    $archivo = $_FILES['archivo_pdf'] ?? null;

    if (!$titulo) {
        $errUpload = 'El título es obligatorio.';
    } elseif (!$archivo || $archivo['error'] === UPLOAD_ERR_NO_FILE || empty($archivo['name'])) {
        $errUpload = 'Debes seleccionar un archivo PDF antes de enviar.';
    } elseif ($archivo['error'] === UPLOAD_ERR_INI_SIZE || $archivo['error'] === UPLOAD_ERR_FORM_SIZE) {
        $errUpload = 'El archivo supera el tamaño máximo permitido por el servidor. Usa un PDF de menos de 10 MB.';
    } elseif ($archivo['error'] !== UPLOAD_ERR_OK) {
        $errUpload = 'Error al recibir el archivo (código ' . $archivo['error'] . '). Intenta nuevamente.';
    } elseif ($archivo['size'] > 10 * 1024 * 1024) {
        $errUpload = 'El archivo no debe superar 10 MB.';
    } elseif ($archivo['size'] === 0) {
        $errUpload = 'El archivo está vacío. Selecciona un PDF válido.';

    // ── Capa 1: extensión del nombre ─────────────────────────
    } elseif (strtolower(pathinfo($archivo['name'], PATHINFO_EXTENSION)) !== 'pdf') {
        $errUpload = 'Solo se aceptan archivos PDF. El archivo seleccionado tiene otra extensión.';

    // ── Capa 2: MIME type real (acepta variantes válidas de PDF) ─
    } elseif (function_exists('finfo_open') && ($__fi = finfo_open(FILEINFO_MIME_TYPE)) !== false) {
        $__mt = finfo_file($__fi, $archivo['tmp_name']);
        finfo_close($__fi);
        $mimesPermitidos = ['application/pdf', 'application/x-pdf', 'application/acrobat', 'application/vnd.pdf'];
        if ($__mt && !in_array($__mt, $mimesPermitidos)) {
            $errUpload = 'El archivo no es un PDF válido. Tipo detectado: ' . htmlspecialchars($__mt);
        }
    }

    // ── Capa 3: magic bytes — solo si no hay error previo ────
    if (!$errUpload && $archivo && $archivo['error'] === UPLOAD_ERR_OK) {
        $__fh = @fopen($archivo['tmp_name'], 'rb');
        if ($__fh !== false) {
            $__mb = fread($__fh, 5);
            fclose($__fh);
            if ($__mb !== '%PDF-') {
                $errUpload = 'El archivo no tiene la firma interna de un PDF. Asegúrate de subir un PDF real.';
            }
        }
    }

    if (!$errUpload && $archivo && $archivo['error'] === UPLOAD_ERR_OK) {

        $nombreArchivo = 'informe_' . $practica['id_practica'] . '_' . time() . '.pdf';
        $hash          = hash_file('sha256', $archivo['tmp_name']);

        try {
            $rutaBD = OneDriveStorage::upload($archivo['tmp_name'], 'informes', $nombreArchivo, (string)$practica['id_practica'], $idInst);
            $db->prepare("
                INSERT INTO informes_finales
                    (id_practica, titulo, resumen, archivo_pdf, hash_sha256, fecha_entrega, estado_coordinador, estado_tutor)
                VALUES
                    (:pid, :tit, :res, :arch, :hash, NOW(), 'pendiente', 'pendiente')
            ")->execute([
                ':pid'  => $practica['id_practica'],
                ':tit'  => $titulo,
                ':res'  => $resumen,
                ':arch' => $rutaBD,
                ':hash' => $hash,
            ]);

            // Actualizar estado de la práctica
            $db->prepare("UPDATE practicas SET estado='informe_enviado' WHERE id_practica=:pid")
               ->execute([':pid' => $practica['id_practica']]);

            // ── Notificar a secretarias y gestores PPP ────────────
            $nombreEst = $user['nombre'] ?? 'Estudiante';
            $stNotifRoles = $db->prepare("
                INSERT INTO notificaciones (id_usuario, tipo, asunto, mensaje)
                VALUES (:uid, 'sistema', :asunto, :msg)
            ");

            // → Secretarias
            $stSecs = $db->query("SELECT id_usuario FROM usuarios WHERE id_rol = " . ROL_SECRETARIA . " AND activo = 1" . instCond() . "");
            foreach ($stSecs->fetchAll() as $dest) {
                $stNotifRoles->execute([
                    ':uid'    => $dest['id_usuario'],
                    ':asunto' => "Informe final recibido de {$nombreEst}",
                    ':msg'    => "El estudiante {$nombreEst} envió su informe final '{$titulo}' y está pendiente de revisión.",
                ]);
            }

            // → Gestores PPP (responsables de calificar)
            $stGestores = $db->query("SELECT id_usuario FROM usuarios WHERE id_rol = " . ROL_GESTOR_PPP . " AND activo = 1" . instCond() . "");
            foreach ($stGestores->fetchAll() as $dest) {
                $stNotifRoles->execute([
                    ':uid'    => $dest['id_usuario'],
                    ':asunto' => "Informe para calificar — {$nombreEst}",
                    ':msg'    => "El estudiante {$nombreEst} envió su informe final '{$titulo}'. Practica #{$practica['id_practica']} lista para calificar.",
                ]);
            }

            // → Tutor Empresa de esta práctica (si existe)
            $stTutEmp = $db->prepare("
                SELECT te.id_usuario
                FROM   practicas p
                JOIN   empresas em ON em.id_empresa = p.id_empresa
                JOIN   tutores_empresa te ON te.id_empresa = em.id_empresa AND te.activo = 1
                WHERE  p.id_practica = :pid LIMIT 1
            ");
            $stTutEmp->execute([':pid' => $practica['id_practica']]);
            $tutEmpUser = $stTutEmp->fetch();
            if ($tutEmpUser) {
                $stNotifRoles->execute([
                    ':uid'    => $tutEmpUser['id_usuario'],
                    ':asunto' => "Practicante {$nombreEst} envió su informe",
                    ':msg'    => "El practicante {$nombreEst} finalizó sus horas y envió su informe final. Accede a tu panel para registrar la calificación de empresa.",
                ]);
            }

            registrarAudit($user['id'], 'subir_informe_final', 'informes_finales', $practica['id_practica']);
            flashSet('ok', 'Informe final enviado correctamente. Espera la revisión del tutor y coordinador.');
            header('Location: informe_final.php'); exit;
        } catch(Exception $e) {
            $errUpload = 'Error al subir a OneDrive: '.$e->getMessage();
        }
    }
}

// ── Calcular horas y progreso ──────────────────────────────
// Usamos el mayor entre horas_cumplidas (campo directo) y suma de bitácoras validadas
// para ser consistente con la pantalla de Bitácoras del estudiante.
$horasValidadas = 0;
if ($practica) {
    $stH = $db->prepare("SELECT COALESCE(SUM(horas_semana),0) FROM bitacoras WHERE id_practica=:pid AND estado='validada'");
    $stH->execute([':pid' => $practica['id_practica']]);
    $horasValidadas = max(
        (int)$stH->fetchColumn(),
        (int)($practica['horas_cumplidas'] ?? 0)
    );
}
$horasReq    = $practica['horas_requeridas'] ?? 6;
$pctHoras    = pct($horasValidadas, $horasReq);
// Convalidación: puede subir sin validar horas; PPP: necesita horas ok
$horasOk      = $horasValidadas >= $horasReq;              // ← se define PRIMERO
$horasOkFinal = $esConval ? true : $horasOk;               // ← luego se usa aquí ✅
$puedeSubir   = $practica && in_array($practica['estado'], ['en_progreso','aprobado','completado']) && !$informe;
?>
<?php $paginaActual = 'informe_final'; ?>
<!DOCTYPE html>
<html lang="es">
<head><?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'head.php'; ?>
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar.css">
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-estudiante.css">
</head>
<body>
<?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'navbar.php'; ?>

<div class="app-shell">
  <?php
  // Pasar flag de convalidación al sidebar
  $__esConvalSidebar = $esConval ?? false;
  include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'sidebar-estudiante.php';
  ?>

  <main class="main-area">
    <div class="page-header">
      <h4>Informe Final de Prácticas</h4>
      <p>Sube tu informe en PDF una vez cumplidas las horas requeridas</p>
    </div>

    <?= flashHtml() ?>

    <?php if (!$practica): ?>
    <!-- Sin práctica -->
    <div class="alert-dark-warn p-3">
      <i class="fa fa-triangle-exclamation me-2"></i>
      No tienes una práctica registrada.
      <a href="mi_practica.php" style="color:#f7b93e;"> Solicitar práctica →</a>
    </div>

    <?php else: ?>

    <!-- ── INFO PRÁCTICA ── -->
    <div class="tbl-wrap p-4 mb-4">
      <div class="d-flex justify-content-between align-items-start flex-wrap gap-2 mb-3">
        <div>
          <div style="font-size:15px;font-weight:700;"><?= htmlspecialchars($practica['empresa']) ?></div>
          <div style="font-size:12px;color:#8b949e;"><?= htmlspecialchars($practica['periodo']) ?></div>
        </div>
        <?= badgeEstado($practica['estado']) ?>
      </div>
      <?php if ($esConval): ?>
      <!-- Convalidación: no aplica control de horas -->
      <div style="background:rgba(249,115,22,.08);border:1px solid rgba(249,115,22,.3);
                  border-radius:10px;padding:14px 18px;display:flex;align-items:center;gap:12px;">
        <i class="fa fa-rotate" style="color:#f97316;font-size:20px;flex-shrink:0;"></i>
        <div>
          <div style="font-size:13px;font-weight:700;color:#f97316;">Modalidad: Convalidación PPP</div>
          <div style="font-size:12px;color:#8b949e;margin-top:3px;">
            No se requiere validación de horas. Sube el informe de tus actividades laborales directamente.
          </div>
        </div>
        <span style="margin-left:auto;background:rgba(16,185,129,.15);color:#3dffa0;
                     border:1px solid rgba(16,185,129,.3);border-radius:20px;
                     font-size:11px;font-weight:700;padding:4px 12px;white-space:nowrap;">
          ✓ Habilitado
        </span>
      </div>
      <?php else: ?>
      <div class="row g-3">
        <!-- Horas realizadas -->
        <div class="col-sm-3">
          <div style="font-size:10px;color:#8b949e;text-transform:uppercase;letter-spacing:.6px;margin-bottom:4px;">Horas realizadas</div>
          <div style="font-size:32px;font-weight:700;color:<?= $horasOk?'#3dffa0':'#2ea8ff' ?>;line-height:1;">
            <?= $horasValidadas ?>
            <span style="font-size:13px;font-weight:400;color:#8b949e;">h</span>
          </div>
          <div style="font-size:11px;color:#8b949e;margin-top:2px;">validadas por el tutor</div>
        </div>

        <!-- Separador -->
        <div class="col-sm-1 d-flex align-items-center justify-content-center">
          <div style="font-size:20px;color:#30363d;font-weight:300;">／</div>
        </div>

        <!-- Horas requeridas -->
        <div class="col-sm-3">
          <div style="font-size:10px;color:#8b949e;text-transform:uppercase;letter-spacing:.6px;margin-bottom:4px;">Horas requeridas</div>
          <div style="font-size:32px;font-weight:700;color:#f7b93e;line-height:1;">
            <?= $horasReq ?>
            <span style="font-size:13px;font-weight:400;color:#8b949e;">h</span>
          </div>
          <div style="font-size:11px;color:#8b949e;margin-top:2px;">según tu carrera</div>
        </div>

        <!-- Barra de progreso -->
        <div class="col-sm-5 d-flex align-items-center">
          <div style="flex:1;">
            <div style="display:flex;justify-content:space-between;font-size:11px;color:#8b949e;margin-bottom:4px;">
              <span>Progreso de horas</span><span><?= $pctHoras ?>%</span>
            </div>
            <div style="background:#30363d;border-radius:6px;height:12px;">
              <div style="width:<?= min($pctHoras,100) ?>%;height:12px;border-radius:6px;
                           background:<?= $horasOk?'#3dffa0':'#2ea8ff' ?>;transition:width .4s;"></div>
            </div>
            <?php if (!$horasOk): ?>
            <div style="font-size:11px;color:#f7b93e;margin-top:5px;">
              <i class="fa fa-clock me-1"></i>
              Te faltan <strong><?= $horasReq - $horasValidadas ?> horas</strong> para poder enviar el informe.
            </div>
            <?php else: ?>
            <div style="font-size:11px;color:#3dffa0;margin-top:5px;">
              <i class="fa fa-circle-check me-1"></i>Horas completadas. Puedes enviar tu informe final.
            </div>
            <?php endif; ?>
          </div>
        </div>
      </div>

      <!-- Nota explicativa para el estudiante -->
      <div style="margin-top:14px;background:rgba(247,185,62,.07);border:1px solid rgba(247,185,62,.25);
                  border-radius:8px;padding:10px 14px;font-size:12px;color:#8b949e;display:flex;gap:10px;align-items:flex-start;">
        <i class="fa fa-circle-info" style="color:#f7b93e;margin-top:1px;flex-shrink:0;"></i>
        <span>
          <?php if ($horasOk): ?>
            <strong style="color:#3dffa0;">¡Felicitaciones!</strong>
            Completaste las <strong style="color:#f7b93e;"><?= $horasReq ?> horas</strong> requeridas.
            Sube tu informe final en la sección de abajo para continuar con el proceso.
          <?php else: ?>
            Debes completar <strong style="color:#f7b93e;"><?= $horasReq ?> horas</strong> de práctica validadas por tu tutor.
            Actualmente tienes <strong style="color:#2ea8ff;"><?= $horasValidadas ?> horas</strong> validadas.
            Envía tus bitácoras semanales y espera que el tutor las apruebe.
          <?php endif; ?>
        </span>
      </div>
      <?php endif; ?>
    </div>

    <?php if ($informe): ?>
    <!-- ── INFORME YA ENVIADO ── -->
    <div class="tbl-wrap p-4 mb-4">
      <div class="d-flex align-items-start gap-3 mb-3">
        <div style="font-size:32px;">📄</div>
        <div style="flex:1;">
          <div style="font-weight:700;font-size:15px;"><?= htmlspecialchars($informe['titulo']) ?></div>
          <div style="font-size:12px;color:#8b949e;margin-top:2px;">
            Enviado el <?= formatFecha($informe['fecha_entrega'], 'd/m/Y H:i') ?>
          </div>
          <?php if ($informe['resumen']): ?>
          <div style="font-size:13px;margin-top:8px;line-height:1.6;"><?= htmlspecialchars($informe['resumen']) ?></div>
          <?php endif; ?>
        </div>
        <a href="<?= BASE_URL ?>/assets/uploads/<?= htmlspecialchars($informe['archivo_pdf']) ?>"
           target="_blank" class="btn btn-sm btn-outline-secondary">
          <i class="fa fa-download me-1"></i>Descargar
        </a>
      </div>

      <!-- ══ SECCIÓN CALIFICACIONES ══ -->
      <?php
        $nta = $practica['nota_tutor_academico'];
        // nota_tutor_empresa está en escala 0-10; usar nota_empresa_100 (0-100) para mostrar
        $nte = $practica['nota_empresa_100'] ?? $practica['nota_tutor_empresa'];
        $nbits = $practica['nota_bitacoras'];
        $ninf  = $practica['nota_informe'];
        $nf    = $practica['nota_final'];
        $hayAlgunaNota = ($nta !== null || $nte !== null || $nbits !== null || $ninf !== null || $nf !== null);
      ?>
      <?php if ($hayAlgunaNota): ?>
      <div style="margin-top:20px;border-top:1px solid #30363d;padding-top:18px;">
        <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
                    color:#8b949e;margin-bottom:14px;">
          <i class="fa fa-star me-1" style="color:#f7b93e;"></i>Mis calificaciones
        </div>

        <!-- Grid de las 4 notas parciales -->
        <div class="row g-2 mb-3">
          <?php
            $notas = [
              ['🎓', 'Tutor Académico', $nta, '25%', '#2ea8ff'],
              ['🏢', 'Tutor Empresa',   $nte, '30%', '#c792ea'],
              ['📓', 'Bitácoras',       $nbits,'20%', '#f7b93e'],
              ['📄', 'Informe',         $ninf, '25%', '#3dffa0'],
            ];
            foreach ($notas as [$ico, $lbl, $val, $peso, $clr]):
              $v = $val !== null ? (float)$val : null;
              $nc = $v === null ? '#8b949e' : ($v >= 70 ? '#3dffa0' : '#ef4444');
          ?>
          <div class="col-6 col-sm-3">
            <div style="background:#0d1117;border:1px solid #30363d;border-radius:10px;
                        padding:12px 10px;text-align:center;">
              <div style="font-size:20px;margin-bottom:4px;"><?= $ico ?></div>
              <div style="font-size:10px;color:#8b949e;font-weight:600;text-transform:uppercase;
                          letter-spacing:.4px;line-height:1.3;margin-bottom:6px;">
                <?= $lbl ?><br>
                <span style="color:#4a5568;font-size:9px;">(peso <?= $peso ?>)</span>
              </div>
              <?php if ($v !== null): ?>
              <div style="font-size:22px;font-weight:800;color:<?= $nc ?>;line-height:1;">
                <?= number_format($v, 1) ?>
              </div>
              <div style="font-size:9px;color:<?= $nc ?>;font-weight:700;margin-top:2px;">
                <?= $v >= 70 ? '✅ Aprobado' : '❌ Reprobado' ?>
              </div>
              <?php else: ?>
              <div style="font-size:13px;color:#4a5568;">
                <i class="fa fa-clock me-1"></i>Pendiente
              </div>
              <?php endif; ?>
            </div>
          </div>
          <?php endforeach; ?>
        </div>

        <!-- Nota final destacada -->
        <?php if ($nf !== null): ?>
        <?php
          $nfv = (float)$nf;
          $nfColor = $nfv >= 90 ? '#3dffa0' : ($nfv >= 70 ? '#f7b93e' : '#ef4444');
          $nfLabel = $nfv >= 90 ? 'EXCELENTE' : ($nfv >= 70 ? 'APROBADO' : 'REPROBADO');
        ?>
        <div style="background:linear-gradient(135deg,#0d1117,#1a2332);
                    border:2px solid <?= $nfColor ?>;border-radius:12px;
                    padding:18px 20px;text-align:center;">
          <div style="font-size:11px;font-weight:700;text-transform:uppercase;
                      letter-spacing:1px;color:#8b949e;margin-bottom:8px;">
            Nota Final Ponderada
          </div>
          <div style="font-size:48px;font-weight:900;color:<?= $nfColor ?>;line-height:1;">
            <?= number_format($nfv, 2) ?>
          </div>
          <div style="font-size:10px;color:#8b949e;margin-top:4px;">de 100 puntos</div>
          <div style="display:inline-block;margin-top:8px;padding:4px 14px;
                      background:<?= $nfColor ?>22;border:1px solid <?= $nfColor ?>55;
                      border-radius:20px;font-size:12px;font-weight:700;color:<?= $nfColor ?>;">
            <?= $nfLabel ?>
          </div>
          <?php if ($practica['fecha_calificacion']): ?>
          <div style="font-size:10px;color:#4a5568;margin-top:6px;">
            <i class="fa fa-calendar me-1"></i>
            Calificado el <?= date('d/m/Y', strtotime($practica['fecha_calificacion'])) ?>
          </div>
          <?php endif; ?>
        </div>
        <?php else: ?>
        <!-- Notas parciales pero sin nota final aún -->
        <div style="background:#0d1117;border:1px dashed #30363d;border-radius:10px;
                    padding:14px;text-align:center;color:#8b949e;font-size:13px;">
          <i class="fa fa-hourglass-half me-2" style="color:#f7b93e;"></i>
          Nota final en proceso — faltan calificaciones pendientes
        </div>
        <?php endif; ?>
      </div>
      <?php endif; ?>

      <!-- SHA-256 del archivo -->
      <?php if ($informe['hash_sha256']): ?>
      <div style="margin-top:14px;border-top:1px solid #30363d;padding-top:12px;">
        <div style="font-size:10px;color:#8b949e;letter-spacing:.6px;text-transform:uppercase;margin-bottom:4px;">
          Hash SHA-256 del archivo
        </div>
        <code style="font-size:11px;color:#3dffa0;word-break:break-all;"><?= $informe['hash_sha256'] ?></code>
      </div>
      <?php endif; ?>
    </div>

    <?php elseif ($puedeSubir && $horasOkFinal): ?>
    <!-- ── FORMULARIO DE SUBIDA ── -->
    <div class="tbl-wrap p-4">
      <h5 class="mb-1">
        <?php if ($esConval): ?>
          <i class="fa fa-rotate me-2" style="color:#f97316;"></i>Subir informe de actividades laborales
        <?php else: ?>
          <i class="fa fa-upload me-2" style="color:#2ea8ff;"></i>Subir informe final
        <?php endif; ?>
      </h5>
      <p style="font-size:13px;color:#8b949e;margin-bottom:20px;">
        <?php if ($esConval): ?>
          Adjunta el informe descriptivo de tus actividades laborales realizadas en la empresa.
          Solo se acepta PDF. Tamaño máximo 10 MB.
        <?php else: ?>
          Solo se acepta formato PDF. Tamaño máximo 10 MB.
        <?php endif; ?>
      </p>

      <?php if ($errUpload): ?>
      <div class="alert-dark-danger p-3 mb-3">
        <i class="fa fa-circle-exclamation me-2"></i><?= htmlspecialchars($errUpload) ?>
      </div>
      <?php endif; ?>

      <form method="POST" enctype="multipart/form-data" id="formInforme">
        <div class="mb-3">
          <label class="form-label">Título del informe <span style="color:#ff9d93;">*</span></label>
          <input type="text" name="titulo" class="form-control" required maxlength="300"
                 placeholder="ej: Informe Final de Prácticas Preprofesionales — TechCorp Ecuador"
                 value="<?= htmlspecialchars($_POST['titulo'] ?? '') ?>">
        </div>

        <div class="mb-3">
          <label class="form-label">Resumen ejecutivo <span style="color:#8b949e;font-weight:400;">(opcional)</span></label>
          <textarea name="resumen" class="form-control" rows="4" maxlength="2000"
                    placeholder="Describe brevemente las actividades, logros y aprendizajes de tu práctica..."><?= htmlspecialchars($_POST['resumen'] ?? '') ?></textarea>
        </div>

        <div class="mb-4">
          <label class="form-label">Archivo PDF <span style="color:#ff9d93;">*</span></label>
          <div id="dropZone" style="border:2px dashed #30363d;border-radius:10px;padding:32px;
                                    text-align:center;cursor:pointer;transition:border-color .2s;
                                    background:#0d1117;">
            <div style="font-size:28px;margin-bottom:8px;">📄</div>
            <div style="font-size:14px;color:#8b949e;" id="dropLabel">
              Arrastra tu PDF aquí o <span style="color:#2ea8ff;text-decoration:underline;cursor:pointer;"
                                            onclick="document.getElementById('archivoInput').click()">
                haz clic para seleccionar
              </span>
            </div>
            <div style="font-size:11px;color:#8b949e;margin-top:6px;">Solo PDF · Máx 10 MB</div>
            <input type="file" name="archivo_pdf" id="archivoInput" accept=".pdf"
                   required style="display:none;">
          </div>
        </div>

        <div class="d-flex gap-2 align-items-center">
          <button type="submit" class="btn btn-primary" id="btnEnviar">
            <i class="fa fa-paper-plane me-2"></i>Enviar informe final
          </button>
          <span style="font-size:12px;color:#8b949e;">
            Una vez enviado no podrás modificarlo. Asegúrate de subir la versión definitiva.
          </span>
        </div>
      </form>
    </div>

    <?php elseif (!$horasOkFinal): ?>
    <!-- Sin horas suficientes (solo PPP) -->
    <div class="alert-dark-warn p-4 text-center">
      <div style="font-size:32px;margin-bottom:10px;">⏳</div>
      <div style="font-weight:700;margin-bottom:6px;">Aún no puedes subir el informe</div>
      <div style="font-size:13px;color:#8b949e;">
        Necesitas <?= $horasReq ?> horas validadas. Actualmente tienes <?= $horasValidadas ?>.
        Completa y envía tus bitácoras semanales para que el tutor las valide.
      </div>
      <a href="bitacoras.php" class="btn btn-sm btn-outline-secondary mt-3">
        <i class="fa fa-book-open me-1"></i>Ir a bitácoras
      </a>
    </div>

    <?php else: ?>
    <!-- Estado de práctica no permite subir -->
    <div class="alert-dark-info p-3">
      <i class="fa fa-info-circle me-2"></i>
      El estado actual de tu práctica (<strong><?= $practica['estado'] ?></strong>)
      no permite subir el informe. Contacta al coordinador.
    </div>
    <?php endif; ?>

    <?php endif; // fin if($practica) ?>
  </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 () {
  var $drop  = $('#dropZone');
  var $input = $('#archivoInput');
  var $label = $('#dropLabel');

  function mostrarArchivo(f) {
    if (!f) return;
    var mb = (f.size / 1024 / 1024).toFixed(2);
    $drop.css('border-color', '#3dffa0');
    $label.html('<strong style="color:#3dffa0;"><i class="fa fa-circle-check me-2"></i>' +
                f.name + '</strong><br><small style="color:#8b949e;">' + mb + ' MB · listo para enviar</small>');
  }

  // Cambio directo del input (clic en zona o "haz clic")
  $input.on('change', function () {
    if (this.files && this.files[0]) mostrarArchivo(this.files[0]);
  });

  // Clic en drop zone abre selector
  $drop.on('click', function (e) {
    if (!$(e.target).is('a, button')) $input.trigger('click');
  });

  // Drag & drop
  $drop.on('dragover dragenter', function (e) {
    e.preventDefault();
    $(this).css('border-color', '#2ea8ff');
  }).on('dragleave', function () {
    $(this).css('border-color', '#30363d');
  }).on('drop', function (e) {
    e.preventDefault();
    $(this).css('border-color', '#30363d');
    var f = e.originalEvent.dataTransfer.files[0];
    if (!f) return;
    if (f.type !== 'application/pdf' && !f.name.toLowerCase().endsWith('.pdf')) {
      $drop.css('border-color', '#ff9d93');
      $label.html('<span style="color:#ff9d93;"><i class="fa fa-circle-exclamation me-1"></i>Solo se aceptan PDF</span>');
      return;
    }
    // Asignar al input
    try {
      var dt = new DataTransfer();
      dt.items.add(f);
      $input[0].files = dt.files;
    } catch(ex) {
      // DataTransfer no disponible — mostrar aviso
      $label.html('<span style="color:#f7b93e;"><i class="fa fa-triangle-exclamation me-1"></i>' +
                  'Arrastra no disponible en este navegador. Usa el botón "haz clic para seleccionar".</span>');
      return;
    }
    mostrarArchivo(f);
  });

  // ── Validar antes de enviar ──────────────────────────────
  $('#formInforme').on('submit', function (e) {
    var titulo = $('[name="titulo"]').val().trim();
    if (!titulo) {
      e.preventDefault();
      alert('Escribe el título del informe antes de enviar.');
      return;
    }
    if (!$input[0].files || $input[0].files.length === 0) {
      e.preventDefault();
      $drop.css('border-color', '#ff9d93');
      $label.html('<span style="color:#ff9d93;"><i class="fa fa-circle-exclamation me-1"></i>' +
                  'Debes seleccionar un archivo PDF. Haz clic aquí para elegirlo.</span>');
      $('html, body').animate({ scrollTop: $drop.offset().top - 80 }, 400);
      return;
    }
    $('#btnEnviar').prop('disabled', true)
                  .html('<i class="fa fa-spinner fa-spin me-2"></i>Subiendo...');
  });
});
</script>
</body>
</html>