"use client"; import { useEffect, useState } from "react"; import { useSession } from "next-auth/react"; // Format number with consistent locale to avoid hydration mismatch const formatNumber = (num: number): string => { return num.toLocaleString("en-US"); }; export default function PlayerStats() { const { data: session } = useSession(); const [userData, setUserData] = useState({ username: "Guest", avatar: null as string | null, hp: 1000, maxHp: 1000, xp: 0, maxXp: 5000, level: 1, }); useEffect(() => { if (session?.user?.id) { fetch(`/api/users/${session.user.id}`) .then((res) => res.json()) .then((data) => { if (data) { setUserData({ username: data.username || "Guest", avatar: data.avatar, hp: data.hp || 1000, maxHp: data.maxHp || 1000, xp: data.xp || 0, maxXp: data.maxXp || 5000, level: data.level || 1, }); } }) .catch(() => { // Utiliser les données de session si l'API échoue setUserData({ username: session.user.username || "Guest", avatar: null, hp: 1000, maxHp: 1000, xp: 0, maxXp: 5000, level: 1, }); }); } else { setUserData({ username: "Guest", avatar: null, hp: 1000, maxHp: 1000, xp: 0, maxXp: 5000, level: 1, }); } }, [session]); const { username, avatar, hp, maxHp, xp, maxXp, level } = userData; const [hpPercentage, setHpPercentage] = useState(0); const [xpPercentage, setXpPercentage] = useState(0); useEffect(() => { // Animate HP bar const hpTimer = setTimeout(() => { setHpPercentage((hp / maxHp) * 100); }, 100); // Animate XP bar const xpTimer = setTimeout(() => { setXpPercentage((xp / maxXp) * 100); }, 200); return () => { clearTimeout(hpTimer); clearTimeout(xpTimer); }; }, [hp, maxHp, xp, maxXp]); const hpColor = hpPercentage > 60 ? "from-green-600 to-green-700" : hpPercentage > 30 ? "from-yellow-600 to-orange-700" : "from-red-700 to-red-900"; return (