import { useState } from 'react'; import { motion } from 'framer-motion'; import { Card } from '../../ui/Card'; import { Button } from '../../ui/Button'; import { CheckCircle, AlertCircle } from 'lucide-react'; interface EjercicioProps { ejercicioId: string; onComplete?: (puntuacion: number) => void; } const NECESIDADES = [ { id: 'alimentacion', nombre: 'Alimentación', icono: '🍽️' }, { id: 'vivienda', nombre: 'Vivienda', icono: '🏠' }, { id: 'educacion', nombre: 'Educación', icono: '📚' }, { id: 'salud', nombre: 'Salud', icono: '🏥' } ]; export function EscasezSimulator({ ejercicioId: _ejercicioId, onComplete }: EjercicioProps) { const [asignaciones, setAsignaciones] = useState>({ alimentacion: 25, vivienda: 25, educacion: 25, salud: 25 }); const [validado, setValidado] = useState(false); const [completado, setCompletado] = useState(false); const total = Object.values(asignaciones).reduce((sum, val) => sum + val, 0); const restante = 100 - total; const excedido = total > 100; const handleSliderChange = (id: string, value: number) => { setAsignaciones(prev => ({ ...prev, [id]: value })); setValidado(false); }; const handleValidar = () => { if (excedido) return; setValidado(true); // Calcular puntuación basada en equilibrio // Ideal: todas las necesidades tienen al menos 15 puntos y no se excede const valores = Object.values(asignaciones); const todasConMinimo = valores.every(v => v >= 15); const sumaExacta = total === 100; let puntuacion = 0; if (sumaExacta) { puntuacion = 60; // Base por usar exactamente 100 if (todasConMinimo) puntuacion += 40; // Bonus por equilibrio } else if (total <= 100) { puntuacion = Math.round((total / 100) * 50); // Proporcional si no usa todo } setTimeout(() => { setCompletado(true); onComplete?.(puntuacion); }, 1500); }; if (completado) { return (

¡Simulación Completada!

Has distribuido los recursos disponibles.

Distribución final:

{NECESIDADES.map(nec => (
{nec.icono} {nec.nombre}: {asignaciones[nec.id]} pts
))}
); } return (

Simulador de Escasez

Tienes 100 puntos para distribuir entre 4 necesidades básicas.

{/* Indicador de recursos */}
{excedido ? '¡Excedido!' : `Restante: ${restante} pts`} {total} / 100
{excedido && (

Has excedido los 100 puntos disponibles. Reduce alguna asignación.

)}
{/* Sliders */}
{NECESIDADES.map(necesidad => (
{necesidad.icono} {necesidad.nombre}
{asignaciones[necesidad.id]} pts
handleSliderChange(necesidad.id, parseInt(e.target.value))} className="w-full h-2 bg-gray-300 rounded-lg appearance-none cursor-pointer accent-blue-500" />
0 50
))}
{/* Botón validar */} {validado && !excedido && (

{total === 100 ? '¡Excelente! Has utilizado todos los recursos disponibles.' : `Has utilizado ${total} de 100 puntos. ¿Quieres ajustar o continuar?`}

)}
); } export default EscasezSimulator;