"""Entry point de la app.

Hace el setup global (config, sidebar de filtros, carga de jugadores) y delega la
navegación a Streamlit usando st.navigation. Cada page lee del session_state.
"""
import streamlit as st
import pandas as pd
from datetime import date, datetime

from lib import (
    cargar_csv, cargar_jugadores, cargar_stats_liga, CSV_PATH,
    _inyectar_css_global, _check_auth, render_user_header,
)

st.set_page_config(page_title="Campograma", layout="wide")
_inyectar_css_global()

# ── Auth: pantalla de login si no hay sesión ───────────────────────────────
_check_auth()
render_user_header()

# ── Estado compartido entre páginas ────────────────────────────────────────
if "jugador_sel" not in st.session_state:
    st.session_state.jugador_sel = None

# ── Sidebar: filtros globales y refresco ───────────────────────────────────
st.sidebar.header("Filtros")
filtro_edad = st.sidebar.multiselect(
    "Categoría de edad",
    options=["Sub-19 (Juvenil)", "Sub-23", "23+"],
    default=["Sub-19 (Juvenil)", "Sub-23", "23+"],
)
filtro_activos = st.sidebar.checkbox("Solo jugadores activos (últimos 4 días)")
filtro_destacados = st.sidebar.checkbox(
    "Solo destacados último partido",
    help="Jugadores con al menos 1 gol o asistencia en su último partido",
)

st.sidebar.markdown("---")
if st.sidebar.button("🔄 Refrescar datos", help="Limpia caches y vuelve a descargar desde SofaScore"):
    st.cache_data.clear()
    st.rerun()

# ── Carga de datos ─────────────────────────────────────────────────────────
meta_csv = cargar_csv()
if not meta_csv:
    st.warning(f"No se encontró `{CSV_PATH}` o está vacío. Añade jugadores al CSV.")
    st.stop()

ids_y_meta = tuple(
    (pid, info["nombre_agencia"], info["notas"])
    for pid, info in meta_csv.items()
)

with st.spinner("Cargando jugadores..."):
    jugadores, errores = cargar_jugadores(ids_y_meta)

if errores:
    with st.sidebar.expander(f"⚠️ {len(errores)} error(es)"):
        for pid, err in errores:
            st.caption(f"ID {pid}: {err}")

if not jugadores:
    st.warning("No se pudieron obtener datos. Comprueba tu conexión y los IDs.")
    st.stop()

df = pd.DataFrame(jugadores)
for col in ("id", "tournament_id", "season_id", "equipo_id"):
    if col in df.columns:
        df[col] = df[col].astype("Int64")

df["posicion_campo"] = df["id"].map({pid: info["posicion_campo"] for pid, info in meta_csv.items()}).fillna("")
df["lesion"]        = df["id"].map({pid: info["lesion"]        for pid, info in meta_csv.items()}).fillna("")
df["fecha_vuelta"]  = df["id"].map({pid: info["fecha_vuelta"]  for pid, info in meta_csv.items()}).fillna("")

# Precarga de stats de liga
ligas_unicas = {
    (j.get("tournament_id"), j.get("season_id"))
    for j in jugadores
    if j.get("tournament_id") and j.get("season_id")
}
if ligas_unicas:
    with st.spinner(f"Precargando referencia de {len(ligas_unicas)} liga(s)..."):
        for tid, sid in ligas_unicas:
            cargar_stats_liga(tid, sid)

# Filtros
df_filtrado = df[df["categoria"].isin(filtro_edad) | (df["categoria"] == "Desconocida")]
if filtro_activos:
    hoy = date.today()
    corte = hoy - pd.Timedelta(days=4)

    def _jugo_reciente(fecha_str):
        try:
            return datetime.strptime(fecha_str, "%d/%m/%Y").date() >= corte
        except Exception:
            return False

    df_filtrado = df_filtrado[df_filtrado["ultimo_fecha"].apply(_jugo_reciente)]

if filtro_destacados:
    # Quedan los que tienen >=1 gol o >=1 asistencia en su último partido
    goles = df_filtrado.get("ultimo_goles", pd.Series(0, index=df_filtrado.index)).fillna(0)
    asist = df_filtrado.get("ultimo_asistencias", pd.Series(0, index=df_filtrado.index)).fillna(0)
    df_filtrado = df_filtrado[(goles > 0) | (asist > 0)]

# Publicamos en session_state para que las pages lean
st.session_state.df = df
st.session_state.df_filtrado = df_filtrado

# ── Navegación ─────────────────────────────────────────────────────────────
campo = st.Page("pages/1_⚽_Campo.py", title="Campo", icon="⚽", default=True)
calendario = st.Page("pages/2_📅_Calendario.py", title="Calendario", icon="📅")
lista = st.Page("pages/3_📋_Lista.py", title="Lista", icon="📋")
directos = st.Page("pages/4_🔴_Directos.py", title="Directos", icon="🔴")
comparar = st.Page("pages/5_📊_Comparar.py", title="Comparar", icon="📊")

nav = st.navigation([campo, lista, calendario, directos, comparar])
nav.run()
