<?php
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);

$claseId = (int)($_GET['clase'] ?? 0);
if ($claseId <= 0) die("Clase inválida.");

// docente_id real (docentes.id)
$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'];

// validar que la clase sea de este docente
$own = $pdo->prepare("SELECT id FROM clases WHERE id=? AND docente_id=?");
$own->execute([$claseId, $docenteId]);
if (!$own->fetch()) { http_response_code(403); die("No tenés permiso."); }

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
  };
}

// info clase
$cl = $pdo->prepare(
  "SELECT c.id, c.anio_lectivo, c.etapa, c.nivel, c.turno,
          cu.nombre AS curso, s.nombre AS seccion,
          m.nombre AS materia
   FROM clases c
   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 c.id=? AND c.docente_id=?"
);
$cl->execute([$claseId, $docenteId]);
$clase = $cl->fetch(PDO::FETCH_ASSOC);
if (!$clase) die("Clase no encontrada.");

// categorías (si existe tabla categorias_evaluacion)
$cats = $pdo->query("SELECT id, nombre FROM categorias_evaluacion ORDER BY id")->fetchAll(PDO::FETCH_ASSOC);
$catFallback = (int)($cats[0]['id'] ?? 1);

function cat_id(PDO $pdo, array $cats, string $tipo): int {
  // intenta match por nombre
  $want = match($tipo){
    'TP_IND' => 'TP',
    'TP_GRUP'=> 'TP',
    'PARCIAL'=> 'Parcial',
    default  => ''
  };
  if ($want !== '') {
    foreach ($cats as $c) {
      if (stripos((string)$c['nombre'], $want) !== false) return (int)$c['id'];
    }
  }
  return (int)($cats[0]['id'] ?? 1);
}

$msg = null;
$err = null;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  csrf_check();

  $tp_ind = max(0, (int)($_POST['tp_ind'] ?? 0));
  $tp_gru = max(0, (int)($_POST['tp_gru'] ?? 0));
  $parc   = max(0, (int)($_POST['parc'] ?? 0));

  $max_ind = (float)str_replace(',', '.', (string)($_POST['max_ind'] ?? 100));
  $max_gru = (float)str_replace(',', '.', (string)($_POST['max_gru'] ?? 100));
  $max_par = (float)str_replace(',', '.', (string)($_POST['max_par'] ?? 100));

  $modo = (string)($_POST['modo'] ?? 'add'); // add|replace

  try {
    $pdo->beginTransaction();

    if ($modo === 'replace') {
      // Borra solo las evaluaciones de esta clase
      $pdo->prepare("DELETE FROM evaluaciones WHERE clase_id=?")->execute([$claseId]);
    }

    // insert normal (sin numero, lo metemos en titulo)
    $ins = $pdo->prepare("
      INSERT INTO evaluaciones (clase_id, categoria_id, titulo, tipo, fecha, puntaje_max)
      VALUES (?,?,?,?,?,?)
    ");

    $creadas = 0;

    for ($i=1; $i<=$tp_ind; $i++) {
      $ins->execute([
        $claseId,
        cat_id($pdo, $cats, 'TP_IND') ?: $catFallback,
        "TP Individual $i",
        "TP_IND",
        null,
        $max_ind
      ]);
      $creadas++;
    }
    for ($i=1; $i<=$tp_gru; $i++) {
      $ins->execute([
        $claseId,
        cat_id($pdo, $cats, 'TP_GRUP') ?: $catFallback,
        "TP Grupal $i",
        "TP_GRUP",
        null,
        $max_gru
      ]);
      $creadas++;
    }
    for ($i=1; $i<=$parc; $i++) {
      $ins->execute([
        $claseId,
        cat_id($pdo, $cats, 'PARCIAL') ?: $catFallback,
        "Parcial $i",
        "PARCIAL",
        null,
        $max_par
      ]);
      $creadas++;
    }

    $pdo->commit();
    $msg = "✅ Configuración guardada. Evaluaciones creadas: $creadas";
  } catch (Throwable $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();
    $err = "❌ ".$e->getMessage();
  }
}

// listado actual de evaluaciones
$st = $pdo->prepare("
  SELECT id, tipo, titulo, fecha, puntaje_max, creado_en
  FROM evaluaciones
  WHERE clase_id=?
  ORDER BY id DESC
");
$st->execute([$claseId]);
$evals = $st->fetchAll(PDO::FETCH_ASSOC);

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

<h1 class="h5 mb-1">Configurar evaluaciones · Etapa <?= (int)$clase['etapa'] ?></h1>
<div class="text-muted mb-3">
  <?= h($clase['materia']) ?> · <?= h($clase['nivel']) ?> · <?= h($clase['curso'].' '.$clase['seccion']) ?> · Turno <?= h($clase['turno']) ?>
</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 mb-3">
  <form method="post" class="row g-2">
    <input type="hidden" name="csrf" value="<?= h(csrf_token()) ?>">

    <div class="col-12">
      <div class="fw-bold mb-1">Creación de evaluaciones</div>
      <div class="text-muted small">Se crean en <b>evaluaciones</b> y el “número” queda en el <b>título</b>.</div>
    </div>

    <div class="col-12 col-md-6">
      <label class="form-label">Modo</label>
      <select class="form-select" name="modo">
        <option value="add">Agregar (no borra existentes)</option>
        <option value="replace">Reemplazar (borra evaluaciones de la clase y vuelve a crear)</option>
      </select>
    </div>

    <hr class="my-2">

    <div class="col-12 col-md-4">
      <label class="form-label">TP Individual (cantidad)</label>
      <input class="form-control" type="number" name="tp_ind" value="0" min="0">
    </div>
    <div class="col-12 col-md-4">
      <label class="form-label">TP Grupal (cantidad)</label>
      <input class="form-control" type="number" name="tp_gru" value="0" min="0">
    </div>
    <div class="col-12 col-md-4">
      <label class="form-label">Parciales (cantidad)</label>
      <input class="form-control" type="number" name="parc" value="0" min="0">
    </div>

    <div class="col-12 col-md-4">
      <label class="form-label">Puntaje máx TP Ind</label>
      <input class="form-control" type="number" step="0.01" name="max_ind" value="100">
    </div>
    <div class="col-12 col-md-4">
      <label class="form-label">Puntaje máx TP Grup</label>
      <input class="form-control" type="number" step="0.01" name="max_gru" value="100">
    </div>
    <div class="col-12 col-md-4">
      <label class="form-label">Puntaje máx Parcial</label>
      <input class="form-control" type="number" step="0.01" name="max_par" value="100">
    </div>

    <div class="col-12 d-flex gap-2 mt-2">
      <button class="btn btn-brand"><i class="bi bi-save me-1"></i>Guardar</button>
      <a class="btn btn-outline-secondary" href="/Comercio/public/docente/clase.php?id=<?= (int)$claseId ?>">Volver</a>
    </div>
  </form>
</div>

<div class="card card-pro p-3">
  <div class="fw-bold mb-2">Evaluaciones actuales</div>

  <?php if (empty($evals)): ?>
    <div class="text-muted">Aún no hay evaluaciones creadas para esta clase.</div>
  <?php else: ?>
    <div class="table-responsive">
      <table class="table table-sm align-middle">
        <thead>
          <tr>
            <th>ID</th>
            <th>Tipo</th>
            <th>Título</th>
            <th>Fecha</th>
            <th>Puntaje máx</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach ($evals as $e): ?>
            <tr>
              <td><?= (int)$e['id'] ?></td>
              <td class="fw-semibold"><?= h(tipo_label((string)$e['tipo'])) ?></td>
              <td><?= h($e['titulo']) ?></td>
              <td><?= h($e['fecha'] ?? '-') ?></td>
              <td><?= h($e['puntaje_max']) ?></td>
            </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
  <?php endif; ?>
</div>

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