// FCPB Home - Hero + Valores + Categorías carousel + Partidos/Calendar + Galería + Sponsors
const { useState, useEffect, useRef } = React;
// La marquesina vive en shell.jsx (window.Marquesina) porque se usa en
// todas las páginas, no sólo en la home.
const Marquesina = window.Marquesina;
// ---------------- Tarjeta del próximo partido ----------------
// Toma el primer partido programado desde hoy (api/partidos.php).
// Si no hay partidos cargados, invita a inscribirse en vez de mostrar
// datos inventados.
function ProximoPartidoCard() {
const [p, setP] = useState(null);
const [cargando, setCargando] = useState(true);
useEffect(() => {
fetch("api/partidos.php", { headers: { Accept: "application/json" } })
.then((r) => (r.ok ? r.json() : Promise.reject()))
.then((j) => {
if (!j || !j.ok || !Array.isArray(j.partidos)) return;
const hoy = new Date();
const key = `${hoy.getFullYear()}-${String(hoy.getMonth() + 1).padStart(2, "0")}-${String(hoy.getDate()).padStart(2, "0")}`;
const prox = j.partidos
.filter((x) => x.estado !== "finalizado" && x.fecha >= key)
.sort((a, b) => (a.fecha + (a.hora || "")).localeCompare(b.fecha + (b.hora || "")))[0];
if (prox) setP(prox);
})
.catch(() => {})
.finally(() => setCargando(false));
}, []);
if (cargando) {
return (
Próximo partido
Cargando…
);
}
if (!p) {
return (
Próximo partido
Agenda en armado
Pronto publicamos el calendario de la temporada.
);
}
const d = new Date(p.fecha + "T12:00");
const dias = ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"];
const meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"];
const cuando = `${dias[d.getDay()]} ${d.getDate()} ${meses[d.getMonth()]}` +
(p.hora && p.hora !== "—" ? ` · ${p.hora}hs` : "") +
(p.sede ? ` · ${p.sede}` : "");
return (
Próximo partido
{p.es_local ? `FCPB vs. ${p.rival}` : `${p.rival} vs. FCPB`}
{cuando}
{p.categoria && {p.categoria.toUpperCase()}}
{p.es_local ? "LOCAL" : "VISITANTE"}
);
}
// ---------------- HERO ----------------
const MOSTRAR_STATS_HERO = false;
function HomeHero() {
// Contadores reales del club (fallback a los valores por defecto)
const [stats, setStats] = useState({});
useEffect(() => {
if (window.fcpbStats) window.fcpbStats().then(setStats);
}, []);
return (
Inscripción Temporada 2026 abierta
Acá empieza
tu sueño.
Escuela de fútbol infantil y juvenil en el corazón de Puerto Belgrano.
Formamos jugadores, pero sobre todo, formamos personas.
{MOSTRAR_STATS_HERO && (
{[
{ n: stats.jugadores || 217, s: "Jugadores" },
{ n: stats.categorias || 6, s: "Categorías" },
{ n: 38, s: "Años" },
{ n: stats.entrenadores || 14, s: "Entrenadores" },
].map(x => (
))}
)}
★ FCPB · Puerto Belgrano
);
}
// ---------------- VALORES ----------------
function Valores() {
const items = [
{
n: "01",
t: "Todos juegan",
d: "No se arma un equipo 'A'. Acá todos los chicos participan, rotan y cometen errores. Es así como se aprende a jugar.",
icon: "fa-futbol"
},
{
n: "02",
t: "Respeto primero",
d: "Al compañero, al rival, al árbitro y al club. Si hay que elegir entre ganar y faltar el respeto, no se duda.",
icon: "fa-handshake"
},
{
n: "03",
t: "Familia que acompaña",
d: "Los papás y las mamás son parte del equipo. Los invitamos a entrenar con los chicos una vez al mes.",
icon: "fa-people-roof"
},
{
n: "04",
t: "La pelota enseña",
d: "Técnica y táctica sí, pero también paciencia, frustración, victoria y derrota. El fútbol es una escuela de la vida.",
icon: "fa-brain"
},
];
return (
01 · Filosofía
Formamos jugadores.
Y personas.
{items.map((v, i) => (
))}
);
}
window.HomeHero = HomeHero;
window.Valores = Valores;