<?php

declare(strict_types=1);

require_once dirname(__DIR__) . '/includes/bootstrap.php';
require_login();

$pageTitle = 'Tabla de posiciones';
$currentNav = 'posiciones';

$campeonatoSel = (int) ($_GET['campeonato_id'] ?? 0);
$cams = db()->query('SELECT id, nombre FROM campeonatos ORDER BY nombre')->fetchAll();

/**
 * Misma lógica que v_tabla_posiciones, pero cuenta partidos con resultado cerrado:
 * finalizado, walk-over y en_juego (por si no se pasó aún a finalizado).
 * Además incluye partidos en "programado" con marcador ya cargado (datos antiguos).
 */
$sqlTablaPosiciones = <<<'SQL'
SELECT
  ce.id                    AS campeonato_equipo_id,
  ce.campeonato_id,
  ce.equipo_id,
  e.nombre                 AS nombre_equipo,
  e.abreviatura,
  e.escudo_url,
  ce.grupo_codigo,
  COALESCE(r.partidos_jugados, 0)   AS partidos_jugados,
  COALESCE(r.ganados, 0)            AS ganados,
  COALESCE(r.empatados, 0)          AS empatados,
  COALESCE(r.perdidos, 0)           AS perdidos,
  COALESCE(r.goles_favor, 0)        AS goles_favor,
  COALESCE(r.goles_contra, 0)       AS goles_contra,
  COALESCE(r.goles_favor, 0) - COALESCE(r.goles_contra, 0) AS diferencia_goles,
  COALESCE(r.puntos, 0)             AS puntos
FROM campeonato_equipo ce
JOIN equipos e ON e.id = ce.equipo_id
LEFT JOIN (
  SELECT
    u.campeonato_id,
    u.equipo_id,
    SUM(u.pj)  AS partidos_jugados,
    SUM(u.pg)  AS ganados,
    SUM(u.pe)  AS empatados,
    SUM(u.pp)  AS perdidos,
    SUM(u.gf)  AS goles_favor,
    SUM(u.gc)  AS goles_contra,
    SUM(u.pts) AS puntos
  FROM (
    SELECT
      p.campeonato_id,
      p.equipo_local_id AS equipo_id,
      1 AS pj,
      CASE WHEN p.goles_local > p.goles_visitante THEN 1 ELSE 0 END AS pg,
      CASE WHEN p.goles_local = p.goles_visitante THEN 1 ELSE 0 END AS pe,
      CASE WHEN p.goles_local < p.goles_visitante THEN 1 ELSE 0 END AS pp,
      p.goles_local  AS gf,
      p.goles_visitante AS gc,
      CASE
        WHEN p.goles_local > p.goles_visitante  THEN c.puntos_victoria
        WHEN p.goles_local = p.goles_visitante THEN c.puntos_empate
        ELSE c.puntos_derrota
      END AS pts
    FROM partidos p
    JOIN campeonatos c ON c.id = p.campeonato_id
    WHERE p.estado IN ('finalizado', 'wo', 'en_juego')
       OR (p.estado = 'programado' AND (p.goles_local > 0 OR p.goles_visitante > 0))
    UNION ALL
    SELECT
      p.campeonato_id,
      p.equipo_visitante_id,
      1,
      CASE WHEN p.goles_visitante > p.goles_local THEN 1 ELSE 0 END,
      CASE WHEN p.goles_visitante = p.goles_local THEN 1 ELSE 0 END,
      CASE WHEN p.goles_visitante < p.goles_local THEN 1 ELSE 0 END,
      p.goles_visitante,
      p.goles_local,
      CASE
        WHEN p.goles_visitante > p.goles_local  THEN c.puntos_victoria
        WHEN p.goles_visitante = p.goles_local THEN c.puntos_empate
        ELSE c.puntos_derrota
      END
    FROM partidos p
    JOIN campeonatos c ON c.id = p.campeonato_id
    WHERE p.estado IN ('finalizado', 'wo', 'en_juego')
       OR (p.estado = 'programado' AND (p.goles_local > 0 OR p.goles_visitante > 0))
  ) u
  GROUP BY u.campeonato_id, u.equipo_id
) r ON r.campeonato_id = ce.campeonato_id AND r.equipo_id = ce.equipo_id
WHERE ce.campeonato_id = ?
  AND ce.estado IN ('inscrito', 'activo')
ORDER BY puntos DESC, diferencia_goles DESC, goles_favor DESC, nombre_equipo ASC
SQL;

$rows = [];
$campeonatoInfo = null;
if ($campeonatoSel) {
    $st = db()->prepare($sqlTablaPosiciones);
    $st->execute([$campeonatoSel]);
    $rows = $st->fetchAll();
    $st = db()->prepare('SELECT nombre, temporada FROM campeonatos WHERE id = ?');
    $st->execute([$campeonatoSel]);
    $campeonatoInfo = $st->fetch();
}

require dirname(__DIR__) . '/includes/layout/header.php';
?>

<div class="card" style="margin-bottom:1rem;">
  <div class="card-header"><h2>Seleccionar campeonato</h2></div>
  <form method="get" class="form-grid" style="padding:1rem 1.25rem;max-width:480px;">
    <div>
      <label class="field" for="campeonato_id">Campeonato</label>
      <select id="campeonato_id" name="campeonato_id" onchange="this.form.submit()">
        <option value="0">— Elegir —</option>
        <?php foreach ($cams as $c) : ?>
          <option value="<?= (int) $c['id'] ?>" <?= $campeonatoSel === (int) $c['id'] ? 'selected' : '' ?>><?= h($c['nombre']) ?></option>
        <?php endforeach; ?>
      </select>
    </div>
  </form>
</div>

<?php if ($campeonatoSel && $rows) : ?>
<section class="posiciones-standings" aria-labelledby="posiciones-heading">
  <div class="posiciones-standings__bg" aria-hidden="true"></div>
  <div class="posiciones-standings__inner">
    <p class="posiciones-standings__kicker"><?= !empty($campeonatoInfo['temporada']) ? h((string) $campeonatoInfo['temporada']) : 'Campeonato' ?></p>
    <h2 id="posiciones-heading" class="posiciones-standings__title">Tabla de posiciones</h2>
    <p class="posiciones-standings__subtitle">
      — <?= h($campeonatoInfo['nombre'] ?? '') ?> —
    </p>
    <div class="posiciones-table-wrap">
      <table class="posiciones-table">
        <thead>
          <tr>
            <th class="posiciones-th-team" scope="col">Equipo</th>
            <th scope="col">PJ</th>
            <th scope="col">PG</th>
            <th scope="col">PE</th>
            <th scope="col">PP</th>
            <th scope="col">GF</th>
            <th scope="col">GC</th>
            <th scope="col">DG</th>
            <th scope="col">Pts</th>
          </tr>
        </thead>
        <tbody>
          <?php
          $pos = 0;
          foreach ($rows as $r) {
              $pos++;
              $rowClass = $pos <= 3 ? 'posiciones-row--top3' : '';
              $tituloEquipo = (string) $r['nombre_equipo'];
              if (!empty($r['abreviatura'])) {
                  $tituloEquipo .= ' (' . $r['abreviatura'] . ')';
              }
              ?>
            <tr<?= $rowClass !== '' ? ' class="' . h($rowClass) . '"' : '' ?>>
              <td>
                <div class="posiciones-team-cell">
                  <?php if (!empty($r['escudo_url'])) : ?>
                    <img class="posiciones-escudo" src="<?= h(url($r['escudo_url'])) ?>" alt="" width="44" height="44" loading="lazy">
                  <?php else : ?>
                    <span class="posiciones-escudo--ph" role="img" aria-hidden="true"></span>
                  <?php endif; ?>
                  <span class="posiciones-rank-num"><?= (string) $pos ?></span>
                  <span class="posiciones-namebox" title="<?= h($tituloEquipo) ?>"><?= h(function_exists('mb_strtoupper') ? mb_strtoupper((string) $r['nombre_equipo'], 'UTF-8') : strtoupper((string) $r['nombre_equipo'])) ?></span>
                </div>
              </td>
              <td class="posiciones-td-num"><?= (int) $r['partidos_jugados'] ?></td>
              <td class="posiciones-td-num"><?= (int) $r['ganados'] ?></td>
              <td class="posiciones-td-num"><?= (int) $r['empatados'] ?></td>
              <td class="posiciones-td-num"><?= (int) $r['perdidos'] ?></td>
              <td class="posiciones-td-num"><?= (int) $r['goles_favor'] ?></td>
              <td class="posiciones-td-num"><?= (int) $r['goles_contra'] ?></td>
              <td class="posiciones-td-num"><?= (int) $r['diferencia_goles'] ?></td>
              <td class="posiciones-td-pts"><?= (int) $r['puntos'] ?></td>
            </tr>
          <?php } ?>
        </tbody>
      </table>
    </div>
    <p class="posiciones-footnote">
      Cuentan partidos en estado <strong>finalizado</strong>, <strong>wo</strong> o <strong>en_juego</strong>, y los programados con marcador cargado.
      Al guardar el acta, el estado pasa a <strong>finalizado</strong> si estaba programado o en juego.
    </p>
  </div>
</section>
<?php elseif ($campeonatoSel) : ?>
  <div class="empty-state card" style="padding:2rem;">No hay equipos inscritos o aún no hay partidos finalizados en este campeonato.</div>
<?php else : ?>
  <div class="empty-state card" style="padding:2rem;">Elige un campeonato para ver la tabla.</div>
<?php endif; ?>

<?php require dirname(__DIR__) . '/includes/layout/footer.php'; ?>
