<?php
declare(strict_types=1);

require_once __DIR__ . '/../../app/bootstrap.php';
require_login();

if (!has_role('DOCENTE')) { http_response_code(403); die("Acceso no permitido"); }

$pdo = db();
$uid = (int)($_SESSION['uid'] ?? 0);

$evalId = (int)($_GET['eval'] ?? 0);
if ($evalId<=0) { header('Location: /Comercio/public/docente/mis_clases.php'); exit; }

// docente_id real
$d = $pdo->prepare("SELECT id FROM docentes WHERE usuario_id=? LIMIT 1");
$d->execute([$uid]);
$doc = $d->fetch(PDO::FETCH_ASSOC);
if (!$doc) { http_response_code(403); die("Tu usuario no está vinculado a la tabla docentes."); }
$docenteId = (int)$doc['id'];

function h($v): string { return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); }
function tipo_label(string $t): string {
  return match($t){
    'TP_IND' => 'TP Individual',
    'TP_GRUP'=> 'TP Grupal',
    'PARCIAL'=> 'Parcial',
    default  => $t
  };
}

// traer evaluación + validar pertenencia por clase del docente
$ev = $pdo->prepare(
  "SELECT e.id, e.tipo, e.titulo, e.fecha, e.puntaje_max,
          c.id AS clase_id, c.anio_lectivo, c.etapa, c.nivel, c.turno,
          cu.nombre AS curso, s.nombre AS seccion,
          m.nombre AS materia
   FROM evaluaciones e
   JOIN clases c ON c.id = e.clase_id
   JOIN cursos cu ON cu.id=c.curso_id
   JOIN secciones s ON s.id=c.seccion_id
   JOIN materias m ON m.id = c.materia_id
   WHERE e.id=? AND c.docente_id=? AND c.activo=1"
);
$ev->execute([$evalId,$docenteId]);
$E = $ev->fetch(PDO::FETCH_ASSOC);
if (!$E) { http_response_code(403); die("No tenés permiso."); }

// (opcional) TP grupal luego
if ($E['tipo'] === 'TP_GRUP') {
  die("TP Grupal: lo habilitamos en otra pantalla.");
}

// contar inscriptos (pro)
$st = $pdo->prepare("SELECT COUNT(*) FROM inscripciones_clase WHERE clase_id=?");
$st->execute([(int)$E['clase_id']]);
$totalInscriptos = (int)$st->fetchColumn();

$msg = null;
$err = null;

// ============================
// POST: guardar puntajes
// ============================
if ($_SERVER['REQUEST_METHOD']==='POST') {
  csrf_check();

  $puntajes = $_POST['puntaje'] ?? [];
  $obs      = $_POST['obs'] ?? [];

  try {
    $ins = $pdo->prepare(
      "INSERT INTO calificaciones (evaluacion_id, estudiante_id, puntaje, observacion)
       VALUES (?, ?, ?, ?)
       ON DUPLICATE KEY UPDATE puntaje=VALUES(puntaje), observacion=VALUES(observacion)"
    );

    $ok=0; $bad=0;
    foreach ($puntajes as $estIdStr => $val) {
      $estId = (int)$estIdStr;
      $p = trim((string)$val);

      if ($estId<=0) { $bad++; continue; }
      if ($p === '') continue;

      $pnum = (float)str_replace(',', '.', $p);
      if ($pnum < 0 || $pnum > (float)$E['puntaje_max']) { $bad++; continue; }

      $o = trim((string)($obs[$estIdStr] ?? ''));
      $ins->execute([$evalId, $estId, $pnum, $o !== '' ? $o : null]);
      $ok++;
    }

    $msg = "✅ Guardado: $ok · Inválidos: $bad";
  } catch (Throwable $e) {
    $err = "❌ ".$e->getMessage();
  }
}

// ============================
// GET: alumnos inscriptos
// ============================
$al = $pdo->prepare(
  "SELECT e.id, e.ci, e.nombres, e.apellidos
   FROM inscripciones_clase ic
   JOIN matriculas m ON m.id = ic.matricula_id
   JOIN estudiantes e ON e.id = m.estudiante_id
   WHERE ic.clase_id = ?
     AND m.estado='ACTIVO'
   ORDER BY e.apellidos, e.nombres"
);
$al->execute([(int)$E['clase_id']]);
$alumnos = $al->fetchAll(PDO::FETCH_ASSOC);

// traer calificaciones existentes
$cal = $pdo->prepare(
  "SELECT estudiante_id, puntaje, observacion
   FROM calificaciones
   WHERE evaluacion_id=? AND estudiante_id IS NOT NULL"
);
$cal->execute([$evalId]);
$mapCal = [];
foreach ($cal->fetchAll(PDO::FETCH_ASSOC) as $r) {
  $mapCal[(int)$r['estudiante_id']] = $r;
}

$title="Cargar puntajes";
include __DIR__ . '/../../app/views/header.php';
?>

<div class="d-flex justify-content-between align-items-start flex-wrap gap-2 mb-2">
  <div>
    <h1 class="h5 mb-1"><?= h($E['materia']) ?></h1>
    <div class="text-muted">
      <?= h(tipo_label((string)$E['tipo'])) ?> · <b><?= h($E['titulo']) ?></b>
      · Etapa <?= (int)$E['etapa'] ?>
      · Puntaje máx: <b><?= h((string)$E['puntaje_max']) ?></b>
      · <?= h($E['nivel'].' '.$E['curso'].' '.$E['seccion'].' · '.$E['turno'].' · '.$E['anio_lectivo']) ?>
      · Inscriptos: <b><?= (int)$totalInscriptos ?></b>
    </div>
  </div>
  <a class="btn btn-outline-secondary btn-sm" href="/Comercio/public/docente/cargar.php?clase=<?= (int)$E['clase_id'] ?>">← Volver</a>
</div>

<?php if ($msg): ?><div class="alert alert-info"><?= h($msg) ?></div><?php endif; ?>
<?php if ($err): ?><div class="alert alert-danger"><?= h($err) ?></div><?php endif; ?>

<div class="card card-pro p-3">
  <form method="post">
    <input type="hidden" name="csrf" value="<?= h(csrf_token()) ?>">

    <?php if (empty($alumnos)): ?>
      <div class="alert alert-warning mb-0">
        No hay alumnos inscriptos a esta clase.<br>
        👉 En Admin: Matricular PRO y luego <b>Sync inscripciones</b> (Matricular o Asignar Clases).
      </div>
    <?php else: ?>
      <div class="table-responsive">
        <table class="table table-sm align-middle">
          <thead>
            <tr>
              <th style="min-width:220px;">Alumno</th>
              <th>CI</th>
              <th style="width:140px;">Puntaje</th>
              <th>Observación</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach($alumnos as $a):
              $id = (int)$a['id'];
              $v = $mapCal[$id]['puntaje'] ?? '';
              $o = $mapCal[$id]['observacion'] ?? '';
            ?>
              <tr>
                <td class="fw-semibold"><?= h($a['apellidos'].' '.$a['nombres']) ?></td>
                <td><?= h($a['ci'] ?? '-') ?></td>
                <td>
                  <input class="form-control form-control-sm" name="puntaje[<?= $id ?>]"
                         value="<?= h((string)$v) ?>"
                         inputmode="decimal"
                         placeholder="0 - <?= h((string)$E['puntaje_max']) ?>">
                </td>
                <td>
                  <input class="form-control form-control-sm" name="obs[<?= $id ?>]" value="<?= h((string)$o) ?>">
                </td>
              </tr>
            <?php endforeach; ?>
          </tbody>
        </table>
      </div>

      <div class="d-flex gap-2">
        <button class="btn btn-brand"><i class="bi bi-save me-1"></i>Guardar</button>
        <span class="text-muted small d-flex align-items-center">Se guarda y permite editar luego.</span>
      </div>
    <?php endif; ?>
  </form>
</div>

<?php include __DIR__ . '/../../app/views/footer.php'; ?>
