import React, { useState, useEffect } from 'react' import { motion } from 'framer-motion' import { progressAPI, topicAPI } from '../../services/api' import { TrendingUp, Target, Award, Brain, Calendar, Activity, Zap } from 'lucide-react' import KnowledgeGraph from './KnowledgeGraph' import ProgressTimeline from './ProgressTimeline' import toast from 'react-hot-toast' const Progress = () => { const [loading, setLoading] = useState(true) const [summary, setSummary] = useState(null) const [topicProgress, setTopicProgress] = useState([]) useEffect(() => { loadProgressData() }, []) const loadProgressData = async () => { try { setLoading(true) const [summaryRes, topicsRes] = await Promise.all([ progressAPI.getProgressSummary(), topicAPI.getAll() ]) setSummary(summaryRes.data) // Get knowledge state for each topic const progressPromises = topicsRes.data.map(async (topic) => { try { const stateRes = await progressAPI.getKnowledgeState(topic.id) return { ...topic, ...stateRes.data } } catch (err) { return { ...topic, knowledge_level: 0, confidence: 0, practice_count: 0 } } }) const progressData = await Promise.all(progressPromises) setTopicProgress(progressData) } catch (error) { toast.error('Failed to load progress data') } finally { setLoading(false) } } const container = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { staggerChildren: 0.1 } } } const item = { hidden: { y: 20, opacity: 0 }, show: { y: 0, opacity: 1 } } if (loading) { return (

Loading your progress...

) } return ( {/* Header */}

Your Learning Progress

Track your journey and celebrate your achievements

{/* Summary Stats */}
{summary?.topics_mastered || 0}
Topics Mastered
{summary?.topics_in_progress || 0}
In Progress
{Math.round((summary?.average_knowledge || 0) * 100)}%
Avg Knowledge
{summary?.total_practice_count || 0}
Practice Sessions
{/* Knowledge Graph */} {/* Weak and Strong Topics */}
{/* Weak Topics */}

Topics Needing Focus

{summary?.weak_topics && summary.weak_topics.length > 0 ? (
{summary.weak_topics.map((topic, index) => (
{topic.name} {Math.round(topic.level * 100)}%
))}
) : (

No weak topics - great job!

)}
{/* Strong Topics */}

Strong Topics

{summary?.strong_topics && summary.strong_topics.length > 0 ? (
{summary.strong_topics.map((topic, index) => (
{topic.name} {Math.round(topic.level * 100)}%
))}
) : (

Start learning to build strong topics

)}
{/* Progress Timeline */}
) } export default Progress