"use client"; import { useEffect, useState } from "react"; type PublicProfile = { id: string; name: string; createdAt: string; stats: { total: number; wins: number; winRate: number; avgClicks: number | null; bestClicks: number | null; bestTime: number | null; avgTime: number | null; solo: { games: number; wins: number }; multi: { games: number; wins: number }; daily: { games: number; wins: number }; blitz: { games: number; wins: number }; }; }; function fmt(s: number): string { const m = Math.floor(s / 60); const sec = Math.floor(s % 60); return `${m}:${String(sec).padStart(2, "0")}`; } const MODE_LABELS: Record = { solo: "Solo", multi: "Multijoueur", daily: "Défi du jour", blitz: "Blitz", }; export function PublicProfileScreen({ userId, onBack, }: { userId: string; onBack: () => void; }) { const [profile, setProfile] = useState(null); const [loading, setLoading] = useState(true); const [notFound, setNotFound] = useState(false); useEffect(() => { fetch(`/api/users/${userId}`) .then((r) => { if (r.status === 404) { setNotFound(true); return null; } return r.json(); }) .then((d) => { if (d) setProfile(d); }) .finally(() => setLoading(false)); }, [userId]); const statCard = "bg-[#1a1a1a] border border-[#2e2e2e] rounded-xl p-3 sm:p-3.5 text-center flex flex-col gap-1"; const btnGhost = "min-h-9 px-3 rounded-lg text-xs sm:text-sm font-semibold bg-[#242424] border border-[#2e2e2e] text-[#f0f0f0] hover:bg-[#1a1a1a] cursor-pointer transition-colors"; return (
{profile && (
{profile.name[0].toUpperCase()}

{profile.name}

Membre depuis {new Date(profile.createdAt).toLocaleDateString("fr-FR", { month: "long", year: "numeric" })}

)}
{loading &&
Chargement...
} {notFound &&

Joueur introuvable.

} {profile && (
{/* Stats principales */}
{profile.stats.total} Parties
{profile.stats.wins} Victoires
{profile.stats.winRate}% Win rate
{profile.stats.avgClicks ?? "-"} Clics moy.
{profile.stats.bestClicks ?? "-"} Meilleur clics
{profile.stats.bestTime ? fmt(profile.stats.bestTime) : "-"} Meilleur temps
{/* Stats par mode */}

Par mode

{(["solo", "multi", "daily", "blitz"] as const).map((m) => { const s = profile.stats[m]; if (s.games === 0) return null; return (
{MODE_LABELS[m]}
{s.wins} victoires {s.games} parties
); })}
)}
); }