"use client"; import { useState } from "react"; import { Avatar, Modal, CloseButton, Card, BackgroundSection, SectionTitle, } from "@/components/ui"; interface LeaderboardEntry { rank: number; username: string; email: string; score: number; level: number; avatar?: string | null; bio?: string | null; characterClass?: string | null; } interface LeaderboardSectionProps { leaderboard: LeaderboardEntry[]; backgroundImage: string; } // Format number with consistent locale to avoid hydration mismatch const formatScore = (score: number): string => { return score.toLocaleString("en-US"); }; export default function LeaderboardSection({ leaderboard, backgroundImage, }: LeaderboardSectionProps) { const [selectedEntry, setSelectedEntry] = useState( null ); return ( {/* Title Section */} LEADERBOARD {/* Leaderboard Table */}
{/* Header */}
Rank
Player
Score
Level
{/* Entries */}
{leaderboard.map((entry) => (
{/* Rank */}
{entry.rank}
{/* Player */}
setSelectedEntry(entry)} > {entry.username} {entry.characterClass && ( [{entry.characterClass === "WARRIOR" && "⚔️"} {entry.characterClass === "MAGE" && "🔮"} {entry.characterClass === "ROGUE" && "🗡️"} {entry.characterClass === "RANGER" && "🏹"} {entry.characterClass === "PALADIN" && "🛡️"} {entry.characterClass === "ENGINEER" && "⚙️"} {entry.characterClass === "MERCHANT" && "💰"} {entry.characterClass === "SCHOLAR" && "📚"} {entry.characterClass === "BERSERKER" && "🔥"} {entry.characterClass === "NECROMANCER" && "💀"}] )} {entry.rank <= 3 && ( )}
{/* Score */}
{formatScore(entry.score)}
{/* Level */}
Lv.{entry.level}
))}
{/* Footer Info */}

Compete with players worldwide and climb the ranks!

Rankings update every hour

{/* Character Modal */} {selectedEntry && ( setSelectedEntry(null)} size="md" >
{/* Header */}

{selectedEntry.username}

setSelectedEntry(null)} size="md" />
{/* Avatar and Class */}
Rank #{selectedEntry.rank}
{selectedEntry.email}
{selectedEntry.characterClass && (
{selectedEntry.characterClass === "WARRIOR" && "⚔️"} {selectedEntry.characterClass === "MAGE" && "🔮"} {selectedEntry.characterClass === "ROGUE" && "🗡️"} {selectedEntry.characterClass === "RANGER" && "🏹"} {selectedEntry.characterClass === "PALADIN" && "🛡️"} {selectedEntry.characterClass === "ENGINEER" && "⚙️"} {selectedEntry.characterClass === "MERCHANT" && "💰"} {selectedEntry.characterClass === "SCHOLAR" && "📚"} {selectedEntry.characterClass === "BERSERKER" && "🔥"} {selectedEntry.characterClass === "NECROMANCER" && "💀"} {selectedEntry.characterClass === "WARRIOR" && "Guerrier"} {selectedEntry.characterClass === "MAGE" && "Mage"} {selectedEntry.characterClass === "ROGUE" && "Voleur"} {selectedEntry.characterClass === "RANGER" && "Rôdeur"} {selectedEntry.characterClass === "PALADIN" && "Paladin"} {selectedEntry.characterClass === "ENGINEER" && "Ingénieur"} {selectedEntry.characterClass === "MERCHANT" && "Marchand"} {selectedEntry.characterClass === "SCHOLAR" && "Érudit"} {selectedEntry.characterClass === "BERSERKER" && "Berserker"} {selectedEntry.characterClass === "NECROMANCER" && "Nécromancien"}
)}
{/* Stats */}
Score
{formatScore(selectedEntry.score)}
Niveau
Lv.{selectedEntry.level}
{/* Bio */} {selectedEntry.bio && (
Bio

{selectedEntry.bio}

)}
)}
); }