'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
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 */}
)
}