"use client"; import React, { useEffect, useState } from 'react'; import { lmsApi, ProgressStats } from '@/lib/api'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, AreaChart, Area } from 'recharts'; import { Calendar, CheckCircle2, TrendingUp, Clock, AlertTriangle } from 'lucide-react'; import { format, parseISO } from 'date-fns'; import { es } from 'date-fns/locale'; interface ProgressDashboardProps { courseId: string; } const ProgressDashboard: React.FC = ({ courseId }) => { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchStats = async () => { try { const data = await lmsApi.getProgressStats(courseId); setStats(data); } catch (err) { console.error("Error fetching progress stats:", err); setError("No se pudieron cargar las estadísticas de progreso."); } finally { setLoading(false); } }; fetchStats(); }, [courseId]); if (loading) return
; if (error || !stats) return
{error || "Error al cargar datos."}
; const chartData = stats.daily_completions.map(d => ({ date: format(parseISO(d.date), 'dd MMM', { locale: es }), count: d.count })); return (
{/* Summary Cards */}
Progreso Total
{Math.round(stats.progress_percentage)}% Completado
Lecciones
{stats.completed_lessons} de {stats.total_lessons}

Lecciones finalizadas con éxito

Predicción
{stats.estimated_completion_date ? format(parseISO(stats.estimated_completion_date), "d 'de' MMMM", { locale: es }) : "N/A" } Fecha estimada de cierre
Estado
{stats.progress_percentage >= 80 ? 'Excelente' : stats.progress_percentage >= 50 ? 'Buen Ritmo' : 'En Progreso'} Según tu ritmo actual
{/* Activity Chart */}

Actividad de Aprendizaje

Lecciones completadas por día (Últimos 30 días)

); }; export default ProgressDashboard;