import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { useTranslation } from "@/hooks/useTranslation"; import { Button } from "@/components/ui/button"; import { Play } from "lucide-react"; interface HighScore { id: string; player_name: string; score: number; avg_words_per_round: number; created_at: string; session_id: string; game?: { language: string; }; game_id?: string; } interface ScoresTableProps { scores: HighScore[]; startIndex: number; showThemeColumn?: boolean; onPlayGame?: (gameId: string) => void; selectedMode?: 'daily' | 'all-time'; } const getRankMedal = (rank: number) => { switch (rank) { case 1: return "🥇"; case 2: return "🥈"; case 3: return "🥉"; default: return rank; } }; const getLanguageEmoji = (language: string) => { switch (language) { case 'en': return '🇬🇧'; case 'de': return '🇩🇪'; case 'fr': return '🇫🇷'; case 'it': return '🇮🇹'; case 'es': return '🇪🇸'; default: return '🌐'; } }; export const ScoresTable = ({ scores, startIndex, showThemeColumn = false, onPlayGame, selectedMode = 'daily' }: ScoresTableProps) => { const t = useTranslation(); return (
{t.leaderboard.rank} {t.leaderboard.player} {t.leaderboard.roundsColumn} {t.leaderboard.avgWords} {selectedMode === 'all-time' && ( {t.leaderboard.playSameWords} )} {scores?.map((score, index) => { const absoluteRank = startIndex + index + 1; const medal = getRankMedal(absoluteRank); const language = score.game?.language || 'en'; return ( {medal} {score.player_name} {getLanguageEmoji(language)} {score.score} {score.avg_words_per_round.toFixed(1)} {selectedMode === 'all-time' && ( {score.game_id && onPlayGame && ( )} )} ); })} {!scores?.length && ( {t.leaderboard.noScores} )}
); };