'use client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Progress } from '@/components/ui/progress' import { Badge } from '@/components/ui/badge' import { useStudyStats, useFlashcardStats } from '@/lib/hooks/use-quiz' import { LoadingSpinner } from '@/components/common/LoadingSpinner' import { Trophy, Flame, Target, Brain, Award, TrendingUp, Calendar, Zap, GraduationCap } from 'lucide-react' export function StudyStatsCard() { const { data: stats, isLoading } = useStudyStats() const { data: flashcardStats } = useFlashcardStats() if (isLoading) { return (
) } if (!stats) { return ( No study data yet. Start studying to see your progress! ) } const xpProgress = ((stats.total_xp % 500) / 500) * 100 const accuracyRate = stats.total_flashcards_reviewed > 0 ? (stats.total_correct_answers / stats.total_flashcards_reviewed) * 100 : 0 return (
{/* Summary Stats Row */}
Current Streak
{stats.current_streak} days

Longest: {stats.longest_streak} days

Level & XP
Level {stats.level}

{stats.total_xp} Total XP

Accuracy
{accuracyRate.toFixed(0)}%

{stats.total_correct_answers} / {stats.total_flashcards_reviewed} correct

Completed
{stats.total_quizzes_completed}

Quizzes taken

{/* Detailed Stats Grid */}
{/* XP & Level Card */} Experience Points Your learning progress
Lv.{stats.level}
{stats.total_xp} XP
Progress to Level {stats.level + 1} {500 - stats.xp_to_next_level} / 500 XP

How to earn XP

  • • Complete a quiz: +50 XP
  • • Perfect quiz score: +100 XP
  • • Daily review: +25 XP
  • • Create flashcard: +10 XP
  • • Streak bonus: +10 XP per day
{/* Streak Card */} Study Streak Keep your momentum going!
{stats.current_streak}
Current Streak
{stats.longest_streak}
Best Streak

This Week

{['M', 'T', 'W', 'T', 'F', 'S', 'S'].map((day, i) => (
{day}
{i < stats.current_streak ? '🔥' : ''}
))}
{/* Performance Stats */} Performance Your learning metrics
Quizzes Completed
{stats.total_quizzes_completed}
Cards Reviewed
{stats.total_flashcards_reviewed}
Accuracy Rate
{accuracyRate.toFixed(0)}%
{/* Badges Card */} Achievements Badges you've earned {stats.badges && stats.badges.length > 0 ? (
{stats.badges.map((badge: string, i: number) => ( {badge} ))}
) : (

No badges yet

Complete quizzes and maintain streaks to earn badges!

)} {/* Upcoming Badges Preview */}

Upcoming Badges

🎯
First Quiz
🔥
7 Day Streak
💯
Perfect Score
) }