import React, { useEffect, useState } from 'react'; import { StorageService } from '../services/storageService'; import { UserProfile } from '../types'; import { Trophy, Medal, User, GraduationCap, Briefcase, BookOpen, Crown, Loader2 } from 'lucide-react'; import { useLanguage } from '../contexts/LanguageContext'; const Leaderboard: React.FC = () => { const { t } = useLanguage(); const [leaders, setLeaders] = useState([]); const [loading, setLoading] = useState(true); const [currentUser, setCurrentUser] = useState(null); useEffect(() => { const fetchData = async () => { setLoading(true); const [allUsers, profile] = await Promise.all([ StorageService.getLeaderboard(50), StorageService.getProfile() ]); setLeaders(allUsers); setCurrentUser(profile); setLoading(false); }; fetchData(); }, []); const getRankStyle = (index: number) => { switch(index) { case 0: return "bg-yellow-100 border-yellow-300 text-yellow-800 dark:bg-yellow-900/30 dark:border-yellow-700 dark:text-yellow-400"; // Gold case 1: return "bg-gray-100 border-gray-300 text-gray-800 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300"; // Silver case 2: return "bg-orange-100 border-orange-300 text-orange-800 dark:bg-orange-900/30 dark:border-orange-700 dark:text-orange-400"; // Bronze default: return "bg-white dark:bg-gray-800 border-gray-100 dark:border-gray-700 text-gray-700 dark:text-gray-200"; } }; const getRoleIcon = (role: string) => { switch(role) { case 'student': return ; case 'teacher': return ; default: return ; } }; if (loading) return (
); return (

{t("Leaderboard", "Leaderboard")}

{t("Top achievers in the Rudraksha community.", "Top achievers in the Rudraksha community.")}

{/* Podium Section (Top 3) */} {leaders.length >= 3 && (
{/* 2nd Place */}
{leaders[1].name}
2nd

{leaders[1].name}

{leaders[1].points} pts

{/* 1st Place */}
{leaders[0].name}
1st

{leaders[0].name}

{leaders[0].points} pts

{/* 3rd Place */}
{leaders[2].name}
3rd

{leaders[2].name}

{leaders[2].points} pts

)} {/* List Section */}
{leaders.map((user, index) => { const isMe = currentUser?.id === user.id; return ( ); })}
Rank User Role Karma Points
{index + 1}
{user.name}

{user.name} {isMe && "(You)"}

{user.role}

{getRoleIcon(user.role)} {user.role} {user.points.toLocaleString()}
); }; export default Leaderboard;