import { useState } from "react"; import { Check, Crown, Sparkles } from "lucide-react"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; import { nomeCompleto, useGiocatoriSquadra } from "@/lib/giocatori-squadra"; import { useGiocatoreBase } from "@/lib/user-store"; import { categorieSocial, conteggioCategoria, mioVotoSocial, useVotaSocial, useVotiSocial, vincitoreCategoria, } from "@/lib/badge-social"; /** Voto social post-partita: un compagno per categoria, veloce da mobile. */ export function VotoSocial({ matchId }: { matchId: string }) { // Solo `.id` serve qui: `useGiocatoreBase` basta, niente statistiche. const io = useGiocatoreBase(); const voti = useVotiSocial(); const vota = useVotaSocial(); const { righe: squadra } = useGiocatoriSquadra(); const rosa = squadra.filter((g) => g.attivo); const [aperta, setAperta] = useState(null); const tutti = voti.data ?? []; const fatti = io ? categorieSocial.filter((c) => mioVotoSocial(tutti, matchId, c.id, io.id)).length : 0; async function invia(categoria: string, id: string, nome: string) { if (!io) return; if (id === io.id) { toast.error("Non puoi votare te stesso"); return; } try { await vota.mutateAsync({ match_id: matchId, categoria, votante_id: io.id, votato_id: id, votato_nome: nome, }); setAperta(null); toast.success(`Voto registrato: ${nome}`); } catch { toast.error("Voto non riuscito, riprova"); } } return (
Hai votato {fatti}/{categorieSocial.length} categorie · un solo voto per categoria
{categorieSocial.map((cat) => { const Icon = cat.icon; const mio = io ? mioVotoSocial(tutti, matchId, cat.id, io.id) : null; const vincitore = vincitoreCategoria(tutti, matchId, cat.id); const conteggio = conteggioCategoria(tutti, matchId, cat.id); const totale = conteggio.reduce((s, c) => s + c.voti, 0); const isOpen = aperta === cat.id; return (
{isOpen ? (
{rosa .filter((g) => g.id !== io?.id) .map((g) => ( ))}
) : (
{totale === 0 ? (

Nessun voto ancora: apri e scegli un compagno.

) : vincitore ? (

{vincitore.nome} · {vincitore.voti} {vincitore.voti === 1 ? "voto" : "voti"}

) : (

Parità con {totale} voti: servono altri voti per assegnare il badge.

)}
)}
); })}
); }