import { useState } from "react"; import { BellRing, HelpCircle, Loader2 } from "lucide-react"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; import { Card } from "@/components/crapp/ui-bits"; import { Avatar } from "@/components/crapp/Avatar"; import { Barra } from "@/components/motion/Barra"; import { statoMeta, type Giocatore, type Stato } from "@/lib/crapp-data"; import { usePresenzeEvento, useSalvaPresenza } from "@/lib/presenze"; import { useAnagraficaRosa } from "@/lib/rosa"; import { useGiocatoreBase, useGiocatoreInCampo } from "@/lib/user-store"; import { intestazioniAutenticate } from "@/lib/auth"; import { usePuoGestireEventi } from "@/lib/ruoli"; import { dataOggi } from "@/lib/scout-live"; const ordine: Stato[] = ["presente", "ritardo", "forse", "infortunato", "assente"]; export function RosaPresenze({ eventoId, data }: { eventoId: string; data: string }) { const { risposte, isPending } = usePresenzeEvento(eventoId); const salva = useSalvaPresenza(); // Solo `.id`/`.nome` servono qui: `useGiocatoreBase`/`useAnagraficaRosa` bastano, // niente statistiche di squadra. const io = useGiocatoreInCampo(); // Il nome di chi sollecita: admin o allenatore, che non ha una risposta propria (DD-034). const mittente = useGiocatoreBase(); const puoSollecitare = usePuoGestireEventi(); const rosa = useAnagraficaRosa(); const [sollecito, setSollecito] = useState(false); const passato = data < dataOggi(); const mancanti = rosa.filter((g) => !risposte[g.id]); const risposteN = rosa.length - mancanti.length; const perc = rosa.length ? Math.round((risposteN / rosa.length) * 100) : 0; const daSollecitare = mancanti.length + rosa.filter((g) => risposte[g.id] === "forse").length; async function sollecita() { setSollecito(true); try { const res = await fetch("/api/public/sollecita-presenze", { method: "POST", headers: { "Content-Type": "application/json", ...(await intestazioniAutenticate()) }, body: JSON.stringify({ eventoId, da: mittente?.nome }), }); if (!res.ok) throw new Error(); const dati = (await res.json()) as { inviate: number; destinatari: number }; toast.success( dati.inviate > 0 ? `Sollecito inviato a ${dati.inviate} giocatori` : `Nessuna notifica attiva tra i ${dati.destinatari} da sollecitare`, ); } catch { toast.error("Non sono riuscito a inviare il sollecito"); } finally { setSollecito(false); } } return (
Hanno risposto {risposteN}/{rosa.length}
{perc}%La tua risposta
Carico le risposte…
) : null} {ordine.map((s) => { const lista = rosa.filter((g) => risposte[g.id] === s); if (lista.length === 0) return null; return (
{titolo} · {n}
{attenzione ?