import { useEffect } from 'react'; import { Link } from 'react-router-dom'; import { useAuthStore } from '../stores/authStore'; import { useProgressStore } from '../stores/progressStore'; import { Card } from '../components/ui/Card'; import { Button } from '../components/ui/Button'; import { ProgressBar } from '../components/progress/ProgressBar'; import { ScoreDisplay } from '../components/progress/ScoreDisplay'; import { BadgesSection } from '../components/progress/Badges'; import { Loader } from '../components/ui/Loader'; import { BookOpen, User, LogOut, LayoutGrid, Award, Star, Target, CheckCircle, FileText, Headphones } from 'lucide-react'; import { SistemaAnuncios } from '../components/announcements/SistemaAnuncios'; const MODULOS_CONFIG = [ { id: 'modulo1', numero: 1, titulo: 'Fundamentos de Economía', descripcion: 'Introducción a los conceptos básicos', totalEjercicios: 3 }, { id: 'modulo2', numero: 2, titulo: 'Oferta, Demanda y Equilibrio', descripcion: 'Curvas de mercado', totalEjercicios: 3 }, { id: 'modulo3', numero: 3, titulo: 'Utilidad y Elasticidad', descripcion: 'Teoría del consumidor', totalEjercicios: 3 }, { id: 'modulo4', numero: 4, titulo: 'Teoría del Productor', descripcion: 'Costos y producción', totalEjercicios: 3 }, ]; export function Dashboard() { const { usuario, logout } = useAuthStore(); const { puntuacionTotal, nivel, calcularPorcentajeModulo, getBadgesDesbloqueados, getBadgesBloqueados, modulos, loadProgreso, isLoading, error, } = useProgressStore(); useEffect(() => { loadProgreso(); }, [loadProgreso]); const handleLogout = async () => { await logout(); }; if (isLoading && Object.keys(modulos).length === 0) { return (

Cargando tu progreso...

); } if (error) { return (

Error al cargar el progreso

{error}

); } // Calcular progreso total const totalProgreso = Math.round( MODULOS_CONFIG.reduce((acc, mod) => { return acc + calcularPorcentajeModulo(mod.id, mod.totalEjercicios); }, 0) / MODULOS_CONFIG.length ); const badgesDesbloqueados = getBadgesDesbloqueados(); const badgesBloqueados = getBadgesBloqueados(); // Calcular ejercicios completados por módulo const getEjerciciosCompletados = (moduloId: string) => { const modulo = modulos[moduloId]; if (!modulo) return 0; return Object.values(modulo.ejercicios).filter(ej => ej.completado).length; }; return (

Economía Interactiva

{usuario?.nombre || 'Usuario'} {nivel} {usuario?.rol === 'admin' && ( Admin )}

Tu progreso

Continúa donde lo dejaste y desbloquea nuevos logros

{/* Sistema de Anuncios */} {/* Stats Cards */}

Progreso total

{totalProgreso}%

{totalProgreso === 100 ? '¡Has completado todos los módulos!' : 'Sigue así, vas por buen camino'}

Puntuación total

{puntuacionTotal.toLocaleString()}

Acumula puntos completando ejercicios para subir de nivel

Logros

{badgesDesbloqueados.length}/{badgesDesbloqueados.length + badgesBloqueados.length}

{badgesBloqueados.length === 0 ? '¡Todos los logros desbloqueados!' : `${badgesBloqueados.length} logros por desbloquear`}

{/* Columna izquierda - Módulos */}
{/* Puntuación y Nivel */}

Módulos

{usuario?.rol === 'admin' && ( )}
{MODULOS_CONFIG.map((modulo) => { const porcentaje = calcularPorcentajeModulo(modulo.id, modulo.totalEjercicios); const completados = getEjerciciosCompletados(modulo.id); return (
{modulo.numero}

{modulo.titulo}

{completados}/{modulo.totalEjercicios} ejercicios

{porcentaje}% completado {porcentaje === 100 && ( Completado )}
); })}
{/* Columna derecha - Logros */}
); } export default Dashboard;