import { useState, type ReactNode } from "react"; import { cn } from "@/lib/utils"; import type { Giocatore } from "@/lib/crapp-data"; import { collezioneBadge, gradoMeta, iconaSegreto as Lucchetto, mancanoPer, microcopyBadge, prossimoTraguardo, type BadgeStato, } from "@/lib/badges"; import { badgeSocialVinti, categorieSocial, type VotoSocial, type CategoriaSocial, } from "@/lib/badge-social"; import { Reveal } from "@/components/motion/Reveal"; import { Barra } from "@/components/motion/Barra"; import { Numero } from "@/components/motion/Numero"; import { BadgeDrawer } from "@/components/crapp/BadgeDrawer"; import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@/components/ui/drawer"; function CardBadge({ b, opaco, indice = 0 }: { b: BadgeStato; opaco?: boolean; indice?: number }) { const Icon = b.def.icon; const meta = b.grado ? gradoMeta[b.grado] : null; return (
{meta ? ( {meta.label} ) : null}

{b.def.nome}

{b.valore} {b.def.unita}

{b.prossimaSoglia ? ( <>

{mancanoPer(b)}

{microcopyBadge(b)}

) : (

{microcopyBadge(b)}

)}
); } function SocialDrawer({ cat, conteggio, children, }: { cat: CategoriaSocial; conteggio: number; children: ReactNode; }) { const [open, setOpen] = useState(false); return ( {children} {cat.nome} {cat.descrizione}
{cat.emoji}
{cat.nome} {cat.descrizione}

Vinto

{conteggio}{" "} {conteggio === 1 ? "volta" : "volte"}

); } /** Sezione "Collezione badge": sbloccati, in progresso e segreti. */ export function CollezioneBadge({ g, votiSocial = [], }: { g: Giocatore; votiSocial?: VotoSocial[]; }) { const c = collezioneBadge(g); const vicino = prossimoTraguardo(g); const social = badgeSocialVinti(votiSocial, g.id); const socialVinti = categorieSocial.filter((cat) => social[cat.id]); const pct = Math.round((c.ottenuti / c.totali) * 100); return (

Collezione badge

/{c.totali}

completata

{vicino ? (

Prossimo traguardo

{vicino.def.nome}

{mancanoPer(vicino)} ยท {microcopyBadge(vicino)}

) : null} {c.sbloccati.length > 0 ? (

Sbloccati ({c.sbloccati.length})

{c.sbloccati.map((b, i) => ( ))}
) : null} {c.inProgresso.length > 0 ? (

In progresso ({c.inProgresso.length})

{c.inProgresso.map((b, i) => ( ))}
) : null} {socialVinti.length > 0 ? (

Votati dai compagni

{socialVinti.map((cat) => (

{cat.emoji}

{cat.nome}

Vinto {social[cat.id]} {social[cat.id] === 1 ? "volta" : "volte"}

))}
) : null}

Badge segreti

{c.segreti.map((b) => { const Icon = b.def.icon; return (

{b.def.nome}

{b.def.celebrazione ?? "Badge segreto sbloccato."}

); })} {Array.from({ length: c.nascosti }).map((_, i) => (

???

Badge segreto da scoprire

))}
); }