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

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

$pdo = db();

$msg = null;
$err = null;

// cursos activos
$cursos = $pdo->query("SELECT id, nivel, nombre, orden FROM cursos WHERE activo=1 ORDER BY nivel, orden, nombre")
              ->fetchAll(PDO::FETCH_ASSOC);

// curso seleccionado
$cursoId = (int)($_GET['curso'] ?? 0);

// materias activas
$materias = $pdo->query("SELECT id, nombre, area FROM materias WHERE activo=1 ORDER BY area, nombre")
                ->fetchAll(PDO::FETCH_ASSOC);

// materias ya asignadas al curso
$asignadas = [];
if ($cursoId > 0) {
  $st = $pdo->prepare("SELECT materia_id FROM materias_por_curso WHERE curso_id=?");
  $st->execute([$cursoId]);
  $asignadas = array_map('intval', $st->fetchAll(PDO::FETCH_COLUMN));
  $asignadas = array_flip($asignadas); // para isset rápido
}

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

  $cursoIdPost = (int)($_POST['curso_id'] ?? 0);
  $seleccion = $_POST['materias'] ?? []; // array de ids

  if ($cursoIdPost <= 0) {
    $err = "Seleccioná un curso.";
  } else {
    // sanitizar ids
    $ids = [];
    foreach ($seleccion as $mid) {
      $mid = (int)$mid;
      if ($mid > 0) $ids[] = $mid;
    }
    $ids = array_values(array_unique($ids));

    try {
      $pdo->beginTransaction();

      // borrar todo lo actual
      $pdo->prepare("DELETE FROM materias_por_curso WHERE curso_id=?")->execute([$cursoIdPost]);

      // insertar lo seleccionado
      if (!empty($ids)) {
        $ins = $pdo->prepare("INSERT INTO materias_por_curso (curso_id, materia_id) VALUES (?, ?)");
        foreach ($ids as $mid) {
          $ins->execute([$cursoIdPost, $mid]);
        }
      }

      $pdo->commit();
      $msg = "✅ Plan guardado. Materias asignadas: " . count($ids);

      // redirigir para refrescar estado
      header("Location: /Comercio/public/admin/plan_curso.php?curso=" . $cursoIdPost . "&ok=1");
      exit;

    } catch (Throwable $e) {
      if ($pdo->inTransaction()) $pdo->rollBack();
      $err = "Error: " . $e->getMessage();
    }
  }
}

// mensaje por redirect
if (isset($_GET['ok']) && $_GET['ok'] == '1') {
  $msg = $msg ?: "✅ Plan guardado.";
}

$title = "Plan de curso";
include __DIR__ . '/../../app/views/header.php';
?>

<h1 class="h5 mb-2">Plan de estudios · Materias por curso</h1>

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

<div class="card card-pro p-3 mb-3">
  <form method="get" class="row g-2">
    <div class="col-12 col-md-6">
      <label class="form-label">Curso</label>
      <select class="form-select" name="curso" onchange="this.form.submit()">
        <option value="">-- Seleccioná un curso --</option>
        <?php foreach ($cursos as $c): ?>
          <option value="<?= (int)$c['id'] ?>" <?= ($cursoId === (int)$c['id'] ? 'selected' : '') ?>>
            <?= htmlspecialchars($c['nivel'].' · '.$c['nombre']) ?>
          </option>
        <?php endforeach; ?>
      </select>
      <div class="text-muted small mt-1">Elegí un curso para ver y editar sus materias.</div>
    </div>
  </form>
</div>

<?php if ($cursoId <= 0): ?>
  <div class="alert alert-warning">Seleccioná un curso para cargar el plan de materias.</div>
<?php else: ?>
  <div class="card card-pro p-3">
    <form method="post">
      <input type="hidden" name="csrf" value="<?= htmlspecialchars(csrf_token()) ?>">
      <input type="hidden" name="curso_id" value="<?= (int)$cursoId ?>">

      <div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mb-2">
        <div class="fw-bold">Materias activas</div>
        <div class="d-flex gap-2">
          <button type="button" class="btn btn-outline-secondary btn-sm" onclick="toggleAll(true)">Marcar todas</button>
          <button type="button" class="btn btn-outline-secondary btn-sm" onclick="toggleAll(false)">Desmarcar</button>
          <button class="btn btn-brand btn-sm"><i class="bi bi-save me-1"></i>Guardar plan</button>
        </div>
      </div>

      <div class="table-responsive">
        <table class="table table-sm align-middle">
          <thead>
            <tr>
              <th style="width:40px;"></th>
              <th>Materia</th>
              <th>Área</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach ($materias as $m):
              $mid = (int)$m['id'];
              $checked = isset($asignadas[$mid]);
            ?>
              <tr>
                <td>
                  <input class="form-check-input materia-check" type="checkbox"
                         name="materias[]"
                         value="<?= $mid ?>"
                         <?= ($checked ? 'checked' : '') ?>>
                </td>
                <td class="fw-semibold"><?= htmlspecialchars($m['nombre']) ?></td>
                <td class="text-muted"><?= htmlspecialchars($m['area'] ?? '-') ?></td>
              </tr>
            <?php endforeach; ?>
          </tbody>
        </table>
      </div>

      <div class="d-flex gap-2 mt-2">
        <button class="btn btn-brand"><i class="bi bi-save me-1"></i>Guardar plan</button>
        <a class="btn btn-outline-secondary" href="/Comercio/public/admin/">Volver</a>
      </div>
    </form>
  </div>

  <script>
    function toggleAll(on) {
      document.querySelectorAll('.materia-check').forEach(ch => ch.checked = !!on);
    }
  </script>
<?php endif; ?>

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