import { createFileRoute, Link } from "@tanstack/react-router";
import { ChevronRight, RefreshCw } from "lucide-react";
import { cn } from "@/lib/utils";
import { formatData } from "@/lib/crapp-data";
import { PageHeader, Section, SezioneTendina } from "@/components/crapp/ui-bits";
import { useScoutMatches } from "@/lib/scout-store";
import { useCsi } from "@/lib/csi";
import { isNostraSquadra, matchDaPartitaCsi, partiteGiocate } from "@/lib/csi-core";
import { ScoutEntry } from "@/components/crapp/ScoutEntry";
import { useVotiMvp, vincitoriMvp } from "@/lib/mvp-voti";
import { useEventi } from "@/lib/eventi";
export const Route = createFileRoute("/classifica")({
head: () => ({
meta: [
{ title: "Classifica campionato — CrAPP" },
{
name: "description",
content: "Classifica e risultati del girone CSI seguiti in tempo reale dal CRAP Volley.",
},
{ property: "og:title", content: "Classifica campionato — CrAPP" },
{ property: "og:description", content: "Posizioni, set e risultati aggiornati del girone." },
],
}),
component: Classifica,
});
function formatAggiornamento(iso: string) {
const d = new Date(iso);
const oggi = new Date().toDateString() === d.toDateString();
const ora = d.toLocaleTimeString("it-IT", { hour: "2-digit", minute: "2-digit" });
return oggi ? `oggi alle ${ora}` : `il ${d.toLocaleDateString("it-IT")} alle ${ora}`;
}
function Classifica() {
const scoutMatches = useScoutMatches();
const { data: csi } = useCsi();
const votiMvp = useVotiMvp();
const mvpPerMatch = vincitoriMvp(votiMvp.data ?? []);
const { eventi } = useEventi();
const classifica = csi?.classifica ?? [];
const csiGiocate = csi ? partiteGiocate(csi.partite) : [];
const eventoIdPerData = new Map(
eventi.filter((e) => e.tipo === "partita").map((e) => [e.data, e.id]),
);
const tuttiMatch = csiGiocate.length
? csiGiocate.map((p) => ({
...matchDaPartitaCsi(p),
mvp: mvpPerMatch[p.id] ?? "",
scout: false,
}))
: scoutMatches.map((m) => ({
id: m.id,
data: m.data,
avversario: m.avversario,
casa: m.casa,
setNostri: m.setNostri,
setLoro: m.setLoro,
parziali: m.parziali,
mvp: mvpPerMatch[m.id] ?? "",
scout: true,
}));
return (
<>
Classifica non ancora disponibile.
) : ( classifica.map((r) => { const noi = isNostraSquadra(r.squadra) || r.squadra === "CRAP Volley"; return (Nessun match disponibile.
) : ({m.casa ? "CRAP Volley" : m.avversario} vs{" "} {m.casa ? m.avversario : "CRAP Volley"}
{formatData(m.data)} · MVP {m.mvp || "da votare"} {m.scout ? " · scoutata" : ""}