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

function h($v): string { return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); }

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

// Filtros (TODO por IDs)
$anio      = (int)($_GET['anio'] ?? (int)date('Y'));
$etapa     = (int)($_GET['etapa'] ?? 0);          // 0 = todas
$turno     = trim((string)($_GET['turno'] ?? '')); // '' = todos
$cursoId   = (int)($_GET['curso_id'] ?? 0);       // 0 = todos
$seccionId = (int)($_GET['seccion_id'] ?? 0);     // 0 = todas
$materiaId = (int)($_GET['materia_id'] ?? 0);     // 0 = todas

// Años disponibles (solo de clases asignadas a este docente)
$anioOpts = $pdo->prepare("
  SELECT DISTINCT anio_lectivo
  FROM clases
  WHERE docente_id=? AND activo=1
  ORDER BY anio_lectivo DESC
");
$anioOpts->execute([$docenteId]);
$anios = $anioOpts->fetchAll(PDO::FETCH_COLUMN);

// Si aún no tiene clases, igual mostramos el año actual para que no quede vacío
if (empty($anios)) {
  $anios = [$anio];
} else {
  if (!in_array($anio, array_map('intval', $anios), true)) {
    array_unshift($anios, $anio);
  }
}

// Etapas disponibles
$etapaOpts = $pdo->prepare("
  SELECT DISTINCT etapa
  FROM clases
  WHERE docente_id=? AND anio_lectivo=? AND activo=1
  ORDER BY etapa
");
$etapaOpts->execute([$docenteId, $anio]);
$etapas = $etapaOpts->fetchAll(PDO::FETCH_COLUMN);

// Turnos disponibles
$turnoOpts = $pdo->prepare("
  SELECT DISTINCT turno
  FROM clases
  WHERE docente_id=? AND anio_lectivo=? AND activo=1
  ORDER BY turno
");
$turnoOpts->execute([$docenteId, $anio]);
$turnos = $turnoOpts->fetchAll(PDO::FETCH_COLUMN);

// Cursos disponibles (ID + nombre)
$cursoOpts = $pdo->prepare("
  SELECT DISTINCT cu.id, cu.nombre
  FROM clases c
  JOIN cursos cu ON cu.id=c.curso_id
  WHERE c.docente_id=? AND c.anio_lectivo=? AND c.activo=1
  ORDER BY cu.orden, cu.nombre
");
$cursoOpts->execute([$docenteId, $anio]);
$cursos = $cursoOpts->fetchAll(PDO::FETCH_ASSOC);

// Secciones disponibles (ID + nombre)
$seccOpts = $pdo->prepare("
  SELECT DISTINCT s.id, s.nombre
  FROM clases c
  JOIN secciones s ON s.id=c.seccion_id
  WHERE c.docente_id=? AND c.anio_lectivo=? AND c.activo=1
  ORDER BY s.nombre
");
$seccOpts->execute([$docenteId, $anio]);
$secciones = $seccOpts->fetchAll(PDO::FETCH_ASSOC);

// Materias disponibles (ID + nombre)
$matOpts = $pdo->prepare("
  SELECT DISTINCT m.id, m.nombre
  FROM clases c
  JOIN materias m ON m.id=c.materia_id
  WHERE c.docente_id=? AND c.anio_lectivo=? AND c.activo=1
  ORDER BY m.nombre
");
$matOpts->execute([$docenteId, $anio]);
$materias = $matOpts->fetchAll(PDO::FETCH_ASSOC);

// Query principal
$where = "c.docente_id=:did AND c.anio_lectivo=:anio AND c.activo=1";
$params = [':did'=>$docenteId, ':anio'=>$anio];

if ($etapa > 0)       { $where .= " AND c.etapa=:et"; $params[':et']=$etapa; }
if ($turno !== '')    { $where .= " AND c.turno=:tu"; $params[':tu']=$turno; }
if ($cursoId > 0)     { $where .= " AND c.curso_id=:cid"; $params[':cid']=$cursoId; }
if ($seccionId > 0)   { $where .= " AND c.seccion_id=:sid"; $params[':sid']=$seccionId; }
if ($materiaId > 0)   { $where .= " AND c.materia_id=:mid"; $params[':mid']=$materiaId; }

$st = $pdo->prepare("
  SELECT
    c.id, c.etapa, c.turno, c.nivel,
    cu.nombre AS curso,
    s.nombre AS seccion,
    m.nombre AS materia,
    COALESCE(ic.inscriptos, 0) AS inscriptos,
    COALESCE(ev.evals, 0) AS evals
  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
  LEFT JOIN (
    SELECT clase_id, COUNT(*) AS inscriptos
    FROM inscripciones_clase
    GROUP BY clase_id
  ) ic ON ic.clase_id=c.id
  LEFT JOIN (
    SELECT clase_id, COUNT(*) AS evals
    FROM evaluaciones
    GROUP BY clase_id
  ) ev ON ev.clase_id=c.id
  WHERE $where
  ORDER BY c.etapa, cu.orden, cu.nombre, s.nombre, m.nombre
");
$st->execute($params);
$clases = $st->fetchAll(PDO::FETCH_ASSOC);

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

<style>
  .card-pro{border-radius:16px;border:1px solid rgba(0,0,0,.06);background:#fff;box-shadow:0 8px 22px rgba(0,0,0,.04);}
  .tile{border-radius:16px;border:1px solid rgba(0,0,0,.06);background:#fff;box-shadow:0 8px 22px rgba(0,0,0,.04);padding:14px;height:100%}
  .chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:.85rem;border:1px solid rgba(0,0,0,.08);background:#fff;}
</style>

<div class="d-flex justify-content-between align-items-start flex-wrap gap-2 mb-3">
  <div>
    <h1 class="h5 mb-1">Mis asignaturas (<?= (int)$anio ?>)</h1>
    <div class="text-muted small"><?= h($doc['apellidos'].' '.$doc['nombres']) ?></div>
  </div>
  <a class="btn btn-outline-secondary btn-sm" href="/Comercio/public/dashboard.php">← Dashboard</a>
</div>

<div class="card-pro p-3 mb-3">
  <form method="get" class="row g-2 align-items-end">

    <div class="col-6 col-md-2">
      <label class="form-label">Año</label>
      <select class="form-select" name="anio" onchange="this.form.submit()">
        <?php foreach ($anios as $a): $aa=(int)$a; ?>
          <option value="<?= $aa ?>" <?= $aa===$anio?'selected':'' ?>><?= $aa ?></option>
        <?php endforeach; ?>
      </select>
    </div>

    <div class="col-6 col-md-2">
      <label class="form-label">Etapa</label>
      <select class="form-select" name="etapa" onchange="this.form.submit()">
        <option value="0">Todas</option>
        <?php foreach ($etapas as $e): $ee=(int)$e; ?>
          <option value="<?= $ee ?>" <?= $ee===$etapa?'selected':'' ?>><?= $ee ?></option>
        <?php endforeach; ?>
      </select>
    </div>

    <div class="col-6 col-md-2">
      <label class="form-label">Turno</label>
      <select class="form-select" name="turno" onchange="this.form.submit()">
        <option value="">Todos</option>
        <?php foreach ($turnos as $t): ?>
          <option value="<?= h($t) ?>" <?= $t===$turno?'selected':'' ?>><?= h($t) ?></option>
        <?php endforeach; ?>
      </select>
    </div>

    <div class="col-6 col-md-2">
      <label class="form-label">Curso</label>
      <select class="form-select" name="curso_id" onchange="this.form.submit()">
        <option value="0">Todos</option>
        <?php foreach ($cursos as $c): ?>
          <option value="<?= (int)$c['id'] ?>" <?= (int)$c['id']===$cursoId?'selected':'' ?>>
            <?= h($c['nombre']) ?>
          </option>
        <?php endforeach; ?>
      </select>
    </div>

    <div class="col-6 col-md-2">
      <label class="form-label">Sección</label>
      <select class="form-select" name="seccion_id" onchange="this.form.submit()">
        <option value="0">Todas</option>
        <?php foreach ($secciones as $s): ?>
          <option value="<?= (int)$s['id'] ?>" <?= (int)$s['id']===$seccionId?'selected':'' ?>>
            <?= h($s['nombre']) ?>
          </option>
        <?php endforeach; ?>
      </select>
    </div>

    <div class="col-6 col-md-2">
      <label class="form-label">Materia</label>
      <select class="form-select" name="materia_id" onchange="this.form.submit()">
        <option value="0">Todas</option>
        <?php foreach ($materias as $m): ?>
          <option value="<?= (int)$m['id'] ?>" <?= (int)$m['id']===$materiaId?'selected':'' ?>>
            <?= h($m['nombre']) ?>
          </option>
        <?php endforeach; ?>
      </select>
    </div>

    <div class="col-12 d-flex gap-2 mt-2">
      <a class="btn btn-outline-secondary w-100" href="/Comercio/public/docente/mis_clases.php">Limpiar filtros</a>
    </div>

  </form>

  <div class="d-flex flex-wrap gap-2 mt-3">
    <span class="chip"><i class="bi bi-easel2"></i> Clases: <b><?= (int)count($clases) ?></b></span>
    <span class="chip"><i class="bi bi-people"></i> Inscriptos (sum): <b><?= (int)array_sum(array_map(fn($x)=>(int)$x['inscriptos'],$clases)) ?></b></span>
    <span class="chip"><i class="bi bi-ui-checks"></i> Eval (sum): <b><?= (int)array_sum(array_map(fn($x)=>(int)$x['evals'],$clases)) ?></b></span>
  </div>
</div>

<?php if (empty($clases)): ?>
  <div class="alert alert-warning">
    No tenés clases asignadas con esos filtros.
    <div class="small text-muted mt-1">
      Si debería haber, revisá que en <code>clases.docente_id</code> esté el ID <?= (int)$docenteId ?> para el año <?= (int)$anio ?> y <code>activo=1</code>.
    </div>
  </div>
<?php else: ?>
  <div class="row g-3">
    <?php foreach ($clases as $c): ?>
      <div class="col-12 col-md-6 col-xl-4">
        <div class="tile">
          <div class="fw-bold"><?= h($c['materia']) ?></div>
          <div class="text-muted small mb-2">
            <?= h($c['nivel'].' · '.$c['curso'].' · '.$c['seccion'].' · Turno '.$c['turno']) ?>
            · Etapa <?= (int)$c['etapa'] ?>
          </div>

          <div class="d-flex flex-wrap gap-2 mb-3">
            <span class="badge text-bg-light"><i class="bi bi-people me-1"></i><?= (int)$c['inscriptos'] ?> inscriptos</span>
            <span class="badge text-bg-light"><i class="bi bi-ui-checks me-1"></i><?= (int)$c['evals'] ?> evals</span>
          </div>

          <div class="d-flex gap-2">
            <a class="btn btn-sm btn-outline-secondary" href="/Comercio/public/docente/clase.php?id=<?= (int)$c['id'] ?>">Clase</a>
            <a class="btn btn-sm btn-outline-primary" href="/Comercio/public/docente/cargar.php?clase=<?= (int)$c['id'] ?>">Cargar</a>
            <a class="btn btn-sm btn-brand ms-auto" href="/Comercio/public/docente/configurar.php?clase=<?= (int)$c['id'] ?>">
              <i class="bi bi-gear me-1"></i>Config
            </a>
          </div>
        </div>
      </div>
    <?php endforeach; ?>
  </div>
<?php endif; ?>

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