import { useState } from "react"; import { BellRing, Loader2 } from "lucide-react"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; import { Card } from "@/components/crapp/ui-bits"; import { nomeCompleto, useGiocatoriSquadra } from "@/lib/giocatori-squadra"; import { useGiocatoreBase } from "@/lib/user-store"; import { intestazioniAutenticate } from "@/lib/auth"; import { useIsAdmin } from "@/lib/ruoli"; import { mediaPartita, sondaggioAperto, sondaggioTerminato, useCacche, useSalvaCacche, } from "@/lib/cacche"; const opzioni = [0, 1, 2, 3, 4, 5]; /** Sondaggio goliardico pre-partita: quante cacche prima del fischio d'inizio. */ export function SondaggioCacche({ eventoId, dataEvento, oraEvento, }: { eventoId: string; dataEvento: string; oraEvento: string; }) { // Solo `.id` serve qui: `useGiocatoreBase` basta, niente statistiche. const io = useGiocatoreBase(); const { righe } = useCacche(); const salva = useSalvaCacche(); const { righe: squadra } = useGiocatoriSquadra(); const admin = useIsAdmin(); const [avviso, setAvviso] = useState(false); const dellaPartita = righe.filter((r) => r.evento_id === eventoId); const mia = dellaPartita.find((r) => r.giocatore_id === io?.id); const media = mediaPartita(righe, eventoId); const classifica = [...dellaPartita] .sort((a, b) => b.quantita - a.quantita) .slice(0, 3) .map((r) => { const g = squadra.find((g) => g.id === r.giocatore_id); return { ...r, nome: g ? nomeCompleto(g) : "โ€”" }; }); async function rispondi(quantita: number) { if (!io) return; try { await salva.mutateAsync({ evento_id: eventoId, giocatore_id: io.id, quantita }); toast.success("Risposta registrata ๐Ÿ’ฉ"); } catch { toast.error("Non sono riuscito a salvare la risposta"); } } async function avvisaTutti() { setAvviso(true); try { const res = await fetch("/api/public/apri-sondaggio", { method: "POST", headers: { "Content-Type": "application/json", ...(await intestazioniAutenticate()) }, body: JSON.stringify({ eventoId }), }); if (!res.ok) throw new Error(); const dati = (await res.json()) as { inviate: number; destinatari: number }; toast.success( dati.inviate > 0 ? `Notifica inviata a ${dati.inviate} dispositivi` : "Nessun dispositivo con le notifiche attive", ); } catch { toast.error("Non sono riuscito a inviare la notifica"); } finally { setAvviso(false); } } if (!sondaggioAperto(dataEvento, oraEvento)) { return (

๐Ÿ’ฉ Sondaggio pre-partita

{sondaggioTerminato(dataEvento, oraEvento) ? "Sondaggio chiuso: era aperto fino al fischio d'inizio." : "Apre alle 8:00 del giorno della partita: riceverai una notifica."}

); } return (

๐Ÿ’ฉ Sondaggio pre-partita

{dellaPartita.length} risposte

Quante cacche hai fatto prima di questa partita? Dato scientifico fondamentale.

{opzioni.map((n) => ( ))}
Media squadra {media} {classifica.map((r, i) => ( {i === 0 ? "๐Ÿฅ‡" : i === 1 ? "๐Ÿฅˆ" : "๐Ÿฅ‰"} {r.nome} ยท {r.quantita} ))}
{admin ? ( ) : null}
); }