'use client' import { useState, useEffect } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Trophy, Users, TrendingUp, Target, Star, Crown } from 'lucide-react' import { motion } from 'framer-motion' import { toast } from 'sonner' // Simple Progress component if not available const Progress = ({ value, className }: { value: number; className?: string }) => (
) interface Rank { id: string name: string description: string minReferrals: number minSalesVolume: number minTeamVolume: number commissionMultiplier: number benefits: string[] color: string icon: string order: number } interface UserProgress { currentRank: Rank | null nextRank: Rank | null metrics: { totalReferrals: number salesVolume: number teamVolume: number } achievements: { id: string rank: Rank achievedAt: string }[] } export default function AchievementsPage() { const [progress, setProgress] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { fetchUserProgress() }, []) const fetchUserProgress = async () => { try { const response = await fetch('/api/achievements') if (!response.ok) { throw new Error(`Failed to fetch achievements: ${response.status}`) } const data = await response.json() setProgress(data) } catch (error) { console.error('Error fetching achievements:', error) toast.error('Failed to load achievements') // Set default data to prevent crashes setProgress({ currentRank: null, nextRank: null, metrics: { totalReferrals: 0, salesVolume: 0, teamVolume: 0 }, achievements: [] }) } finally { setLoading(false) } } const calculateProgress = (current: number, required: number) => { return Math.min((current / required) * 100, 100) } if (loading) { return (
) } return (
{/* Header */}

Achievements & Rankings

Track your progress and unlock new rewards

{progress && ( <> {/* Current Rank */}
{progress.currentRank?.icon || '🥉'}

{progress.currentRank?.name || 'Bronze'}

{progress.currentRank?.description || 'Welcome to the journey!'}

{progress.currentRank?.commissionMultiplier || 1}x Commission Multiplier
{/* Progress to Next Rank */} {progress.nextRank && ( Progress to {progress.nextRank.name} {/* Referrals Progress */}
Direct Referrals {progress.metrics.totalReferrals} / {progress.nextRank.minReferrals}
{/* Sales Volume Progress */}
Personal Sales (30 days) ₹{progress.metrics.salesVolume.toFixed(0)} / ₹{progress.nextRank.minSalesVolume.toFixed(0)}
{/* Team Volume Progress */}
Team Sales (30 days) ₹{progress.metrics.teamVolume.toFixed(0)} / ₹{progress.nextRank.minTeamVolume.toFixed(0)}
{/* Next Rank Benefits */}

{progress.nextRank.name} Benefits:

    {progress.nextRank.benefits.map((benefit, index) => (
  • {benefit}
  • ))}
)} {/* Achievement History */} Achievement History {progress.achievements.length === 0 ? (

No achievements yet

Keep growing to unlock your first rank!

) : (
{progress.achievements.map((achievement, index) => (
{achievement.rank.icon}

{achievement.rank.name} Achieved!

{achievement.rank.description}

Achieved on {new Date(achievement.achievedAt).toLocaleDateString()}

{achievement.rank.commissionMultiplier}x Bonus
))}
)}
)}
) }