import { useState, useCallback } from 'react'; import { Card, CardHeader } from '../../ui/Card'; import { Button } from '../../ui/Button'; import { CheckCircle, RotateCcw, HelpCircle, AlertCircle } from 'lucide-react'; interface ClasificacionElasticidadProps { ejercicioId: string; onComplete?: (puntuacion: number) => void; } type TipoElasticidad = 'elastica' | 'unitaria' | 'inelastica'; interface EjercicioData { ep: number; descripcion: string; explicacion: string; } const ejercicios: EjercicioData[] = [ { ep: -2.5, descripcion: 'Un producto tiene una elasticidad precio de -2.5. ¿Cómo se clasifica?', explicacion: '|Ep| = 2.5 > 1 → Demanda ELÁSTICA. El % de cambio en cantidad es mayor que el % de cambio en precio.', }, { ep: -0.3, descripcion: 'La elasticidad precio de un bien es -0.3. ¿Qué tipo de demanda tiene?', explicacion: '|Ep| = 0.3 < 1 → Demanda INELÁSTICA. El % de cambio en cantidad es menor que el % de cambio en precio.', }, { ep: -1.0, descripcion: 'Un artículo tiene elasticidad precio igual a -1. ¿Cómo se clasifica?', explicacion: '|Ep| = 1 → Demanda UNITARIA. El % de cambio en cantidad es igual al % de cambio en precio.', }, { ep: -0.8, descripcion: 'La elasticidad de un medicamento es de -0.8. ¿Qué tipo de elasticidad tiene?', explicacion: '|Ep| = 0.8 < 1 → Demanda INELÁSTICA. Los medicamentos suelen ser inelásticos porque son necesidades básicas.', }, { ep: -4.2, descripcion: 'Un restaurante de lujo tiene elasticidad de -4.2. ¿Cómo se clasifica?', explicacion: '|Ep| = 4.2 > 1 → Demanda ELÁSTICA. Los lujos suelen tener demanda muy elástica porque son opcionales.', }, ]; export function ClasificacionElasticidad({ ejercicioId: _ejercicioId, onComplete }: ClasificacionElasticidadProps) { const [ejercicioIndex, setEjercicioIndex] = useState(0); const [respuesta, setRespuesta] = useState(null); const [validado, setValidado] = useState(false); const [aciertos, setAciertos] = useState(0); const [completado, setCompletado] = useState(false); const ejercicio = ejercicios[ejercicioIndex]; const obtenerRespuestaCorrecta = useCallback((ep: number): TipoElasticidad => { const valorAbs = Math.abs(ep); if (valorAbs > 1) return 'elastica'; if (valorAbs < 1) return 'inelastica'; return 'unitaria'; }, []); const validarRespuesta = () => { if (!respuesta) return; const correcta = obtenerRespuestaCorrecta(ejercicio.ep); const esCorrecto = respuesta === correcta; setValidado(true); if (esCorrecto) { setAciertos((prev) => prev + 1); } if (ejercicioIndex === ejercicios.length - 1) { setCompletado(true); if (onComplete) { const puntuacion = Math.round((aciertos + (esCorrecto ? 1 : 0)) / ejercicios.length * 100); onComplete(puntuacion); } } }; const siguienteEjercicio = () => { if (ejercicioIndex < ejercicios.length - 1) { setEjercicioIndex((prev) => prev + 1); setRespuesta(null); setValidado(false); } }; const reiniciar = () => { setEjercicioIndex(0); setRespuesta(null); setValidado(false); setAciertos(0); setCompletado(false); }; const respuestaCorrecta = obtenerRespuestaCorrecta(ejercicio.ep); const opciones: { value: TipoElasticidad; label: string; color: string }[] = [ { value: 'elastica', label: 'Elástica (|Ep| > 1)', color: 'bg-green-100 border-green-300 text-green-800' }, { value: 'unitaria', label: 'Unitaria (|Ep| = 1)', color: 'bg-yellow-100 border-yellow-300 text-yellow-800' }, { value: 'inelastica', label: 'Inelástica (|Ep| < 1)', color: 'bg-blue-100 border-blue-300 text-blue-800' }, ]; return (

ELÁSTICA

|Ep| > 1

%ΔQ > %ΔP

UNITARIA

|Ep| = 1

%ΔQ = %ΔP

INELÁSTICA

|Ep| < 1

%ΔQ < %ΔP

{ejercicioIndex + 1}/{ejercicios.length}

Pregunta:

{ejercicio.descripcion}

Ep = {ejercicio.ep}

{opciones.map((opcion) => ( ))}
{validado && (

Explicación:

{ejercicio.explicacion}

)}
{!validado ? ( ) : ejercicioIndex < ejercicios.length - 1 ? ( ) : ( )}
{completado && (

¡Completado! Has acertado {aciertos + (respuesta === respuestaCorrecta ? 1 : 0)} de{' '} {ejercicios.length} ejercicios

)}

Interpretación Económica:

  • Elástica (|Ep| > 1): Los consumidores son muy sensibles al precio. Un cambio de precio genera un cambio proporcionalmente mayor en cantidad demandada.
  • Unitaria (|Ep| = 1): Sensibilidad proporcional. El gasto total de los consumidores se mantiene constante ante cambios de precio.
  • Inelástica (|Ep| < 1): Los consumidores son poco sensibles al precio. La cantidad demandada cambia menos que proporcionalmente al precio.
); } export default ClasificacionElasticidad;