/**
 * Módulo 2: Ejercicios Interactivos
 * 
 * Este módulo contiene la estructura de ejercicios para practicar
 * los conceptos de oferta, demanda y equilibrio.
 */

import type { PuntoMercado } from './equilibrio';

// ============================================
// TIPOS Y ENUMERACIONES
// ============================================

export enum TipoEjercicio {
  CONSTRUCTOR_CURVAS = 'constructor_curvas',
  SIMULADOR_PRECIOS = 'simulador_precios',
  IDENTIFICAR_SHOCKS = 'identificar_shocks'
}

export enum Dificultad {
  FACIL = 'facil',
  MEDIO = 'medio',
  DIFICIL = 'dificil'
}

export enum TipoRespuesta {
  MULTIPLE_CHOICE = 'multiple_choice',
  ARRASTRAR_SOLTAR = 'arrastrar_soltar',
  GRAFICO_INTERACTIVO = 'grafico_interactivo',
  NUMERICO = 'numerico',
  SELECCIONAR = 'seleccionar'
}

export enum TipoShock {
  DEMANDA_AUMENTA = 'demanda_aumenta',
  DEMANDA_DISMINUYE = 'demanda_disminuye',
  OFERTA_AUMENTA = 'oferta_aumenta',
  OFERTA_DISMINUYE = 'oferta_disminuye',
  AMBAS_OFERTA_DEMANDA = 'ambas_oferta_demanda'
}

// ============================================
// INTERFACES
// ============================================

export interface PuntoGrafico {
  x: number;
  y: number;
  etiqueta?: string;
  tipo: 'demanda' | 'oferta' | 'equilibrio' | 'interseccion';
}

export interface CurvaEjercicio {
  id: string;
  tipo: 'demanda' | 'oferta';
  puntos: PuntoGrafico[];
  color: string;
  etiqueta: string;
  editable: boolean;
}

export interface OpcionRespuesta {
  id: string;
  texto: string;
  correcta: boolean;
  retroalimentacion?: string;
}

export interface Pregunta {
  id: string;
  enunciado: string;
  tipo: TipoRespuesta;
  opciones?: OpcionRespuesta[];
  respuestaCorrecta?: number | string | string[];
  ayuda?: string;
  puntos: number;
}

export interface NivelEjercicio {
  id: string;
  nombre: string;
  dificultad: Dificultad;
  descripcion: string;
  completado: boolean;
  desbloqueado: boolean;
}

export interface Ejercicio {
  id: string;
  tipo: TipoEjercicio;
  titulo: string;
  descripcion: string;
  instrucciones: string[];
  dificultad: Dificultad;
  niveles: NivelEjercicio[];
  preguntas?: Pregunta[];
  configuracionGrafico?: ConfiguracionGrafico;
  datosSimulacion?: DatosSimulacion;
  escenariosShock?: EscenarioShock[];
}

export interface ConfiguracionGrafico {
  ancho: number;
  alto: number;
  escalaX: { min: number; max: number; etiqueta: string };
  escalaY: { min: number; max: number; etiqueta: string };
  curvasIniciales: CurvaEjercicio[];
  puntosObjetivo: PuntoGrafico[];
  toleranciaError: number;
}

export interface DatosSimulacion {
  funcionDemanda: string;
  funcionOferta: string;
  precioEquilibrio: number;
  cantidadEquilibrio: number;
  rangoPrecios: { min: number; max: number };
  controlesPrecio: {
    precioMaximo: number | null;
    precioMinimo: number | null;
  };
}

export interface EscenarioShock {
  id: string;
  titulo: string;
  descripcion: string;
  mercado: string;
  evento: string;
  tipoShock: TipoShock;
  magnitud: 'pequeña' | 'media' | 'grande';
  graficoInicial: {
    demanda: PuntoMercado[];
    oferta: PuntoMercado[];
  };
  graficoFinal: {
    demanda: PuntoMercado[];
    oferta: PuntoMercado[];
  };
  resultadoEsperado: {
    precioCambio: 'sube' | 'baja' | 'igual';
    cantidadCambio: 'sube' | 'baja' | 'igual' | 'indeterminado';
    explicacion: string;
  };
  opciones: OpcionRespuesta[];
}

export interface ProgresoEjercicio {
  ejercicioId: string;
  completado: boolean;
  puntuacion: number;
  tiempoSegundos: number;
  intentos: number;
  nivelesCompletados: string[];
}

// ============================================
// EJERCICIO 1: CONSTRUCTOR DE CURVAS
// ============================================

export const constructorCurvas: Ejercicio = {
  id: 'ejercicio-1-constructor-curvas',
  tipo: TipoEjercicio.CONSTRUCTOR_CURVAS,
  titulo: 'Constructor de Curvas de Oferta y Demanda',
  descripcion: 'Construye curvas de oferta y demanda arrastrando puntos para entender sus pendientes y movimientos.',
  instrucciones: [
    'Observa los puntos dados en el gráfico',
    'Arrastra cada punto para formar una curva de demanda con pendiente negativa',
    'Arrastra los puntos de oferta para formar una curva con pendiente positiva',
    'Encuentra el punto de equilibrio donde se intersecan ambas curvas',
    'Verifica tu respuesta con el botón "Comprobar"'
  ],
  dificultad: Dificultad.FACIL,
  
  niveles: [
    {
      id: 'nivel-1-basico',
      nombre: 'Nivel 1: Trazado Básico',
      dificultad: Dificultad.FACIL,
      descripcion: 'Traza una curva de demanda simple con 3 puntos',
      completado: false,
      desbloqueado: true
    },
    {
      id: 'nivel-2-oferta-demanda',
      nombre: 'Nivel 2: Ambas Curvas',
      dificultad: Dificultad.FACIL,
      descripcion: 'Traza curvas de oferta y demanda y encuentra el equilibrio',
      completado: false,
      desbloqueado: false
    },
    {
      id: 'nivel-3-desplazamientos',
      nombre: 'Nivel 3: Desplazamientos',
      dificultad: Dificultad.MEDIO,
      descripcion: 'Muestra cómo cambian las curvas ante diferentes shocks',
      completado: false,
      desbloqueado: false
    },
    {
      id: 'nivel-4-precision',
      nombre: 'Nivel 4: Precisión',
      dificultad: Dificultad.DIFICIL,
      descripcion: 'Traza curvas con tolerancia mínima de error',
      completado: false,
      desbloqueado: false
    }
  ],
  
  configuracionGrafico: {
    ancho: 600,
    alto: 400,
    escalaX: { min: 0, max: 100, etiqueta: 'Cantidad (Q)' },
    escalaY: { min: 0, max: 50, etiqueta: 'Precio (P)' },
    toleranciaError: 5,
    
    curvasIniciales: [
      {
        id: 'demanda-nivel-1',
        tipo: 'demanda',
        etiqueta: 'Demanda',
        color: '#e74c3c',
        editable: true,
        puntos: [
          { x: 20, y: 40, tipo: 'demanda', etiqueta: 'A' },
          { x: 50, y: 25, tipo: 'demanda', etiqueta: 'B' },
          { x: 80, y: 10, tipo: 'demanda', etiqueta: 'C' }
        ]
      },
      {
        id: 'oferta-nivel-2',
        tipo: 'oferta',
        etiqueta: 'Oferta',
        color: '#27ae60',
        editable: true,
        puntos: [
          { x: 20, y: 10, tipo: 'oferta', etiqueta: 'D' },
          { x: 50, y: 25, tipo: 'oferta', etiqueta: 'E' },
          { x: 80, y: 40, tipo: 'oferta', etiqueta: 'F' }
        ]
      }
    ],
    
    puntosObjetivo: [
      { x: 50, y: 25, tipo: 'equilibrio', etiqueta: 'E*' }
    ]
  },
  
  preguntas: [
    {
      id: 'pregunta-1-pendiente',
      enunciado: '¿Qué tipo de pendiente tiene la curva de demanda?',
      tipo: TipoRespuesta.MULTIPLE_CHOICE,
      puntos: 10,
      ayuda: 'Recuerda la ley de la demanda: cuando el precio sube, la cantidad demandada baja.',
      opciones: [
        { id: 'a', texto: 'Pendiente positiva (sube de izquierda a derecha)', correcta: false, retroalimentacion: 'Incorrecto. La demanda tiene pendiente negativa.' },
        { id: 'b', texto: 'Pendiente negativa (baja de izquierda a derecha)', correcta: true, retroalimentacion: '¡Correcto! La curva de demanda tiene pendiente negativa por la ley de la demanda.' },
        { id: 'c', texto: 'Pendiente cero (línea horizontal)', correcta: false, retroalimentacion: 'Incorrecto. Eso sería oferta perfectamente elástica.' },
        { id: 'd', texto: 'Pendiente infinita (línea vertical)', correcta: false, retroalimentacion: 'Incorrecto. Eso sería oferta perfectamente inelástica.' }
      ]
    },
    {
      id: 'pregunta-2-equilibrio',
      enunciado: '¿Dónde ocurre el equilibrio de mercado?',
      tipo: TipoRespuesta.MULTIPLE_CHOICE,
      puntos: 15,
      ayuda: 'El equilibrio es donde las decisiones de compradores y vendedores coinciden.',
      opciones: [
        { id: 'a', texto: 'Donde la demanda es máxima', correcta: false },
        { id: 'b', texto: 'Donde la oferta es máxima', correcta: false },
        { id: 'c', texto: 'En la intersección de oferta y demanda', correcta: true, retroalimentacion: '¡Correcto! El equilibrio ocurre donde Qd = Qs.' },
        { id: 'd', texto: 'En el origen (0,0)', correcta: false }
      ]
    }
  ]
};

// ============================================
// EJERCICIO 2: SIMULADOR DE PRECIOS INTERVENIDOS
// ============================================

export const simuladorPrecios: Ejercicio = {
  id: 'ejercicio-2-simulador-precios',
  tipo: TipoEjercicio.SIMULADOR_PRECIOS,
  titulo: 'Simulador de Precios Intervenidos',
  descripcion: 'Ajusta precios máximos y mínimos para observar sus efectos en el mercado: escasez, superávit, y pérdida de bienestar.',
  instrucciones: [
    'Observa el equilibrio inicial del mercado',
    'Usa los controles deslizantes para establecer un precio máximo o mínimo',
    'Observa cómo cambian las cantidades demandadas y ofrecidas',
    'Identifica si se genera escasez o superávit',
    'Analiza el área de pérdida de bienestar (triángulo)',
    'Responde las preguntas sobre cada escenario'
  ],
  dificultad: Dificultad.MEDIO,
  
  niveles: [
    {
      id: 'nivel-1-techo',
      nombre: 'Nivel 1: Precio Máximo',
      dificultad: Dificultad.FACIL,
      descripcion: 'Establece un precio máximo y observa la escasez generada',
      completado: false,
      desbloqueado: true
    },
    {
      id: 'nivel-2-piso',
      nombre: 'Nivel 2: Precio Mínimo',
      dificultad: Dificultad.FACIL,
      descripcion: 'Establece un precio mínimo y observa el superávit',
      completado: false,
      desbloqueado: false
    },
    {
      id: 'nivel-3-ambos',
      nombre: 'Nivel 3: Combinado',
      dificultad: Dificultad.MEDIO,
      descripcion: 'Analiza escenarios con precios mínimos y máximos simultáneos',
      completado: false,
      desbloqueado: false
    },
    {
      id: 'nivel-4-calculo',
      nombre: 'Nivel 4: Cálculo de Pérdida',
      dificultad: Dificultad.DIFICIL,
      descripcion: 'Calcula numéricamente la pérdida de bienestar',
      completado: false,
      desbloqueado: false
    }
  ],
  
  datosSimulacion: {
    funcionDemanda: 'Qd = 100 - 2P',
    funcionOferta: 'Qs = 20 + 2P',
    precioEquilibrio: 20,
    cantidadEquilibrio: 60,
    rangoPrecios: { min: 0, max: 50 },
    controlesPrecio: {
      precioMaximo: 15,
      precioMinimo: 25
    }
  },
  
  preguntas: [
    {
      id: 'sim-pregunta-1',
      enunciado: 'Si estableces un precio máximo de $15 (debajo del equilibrio de $20), ¿qué ocurre?',
      tipo: TipoRespuesta.MULTIPLE_CHOICE,
      puntos: 20,
      opciones: [
        { 
          id: 'a', 
          texto: 'Se genera un exceso de oferta (superávit)', 
          correcta: false, 
          retroalimentacion: 'Incorrecto. Un precio máximo por debajo del equilibrio genera escasez, no superávit.' 
        },
        { 
          id: 'b', 
          texto: 'Se genera un exceso de demanda (escasez)', 
          correcta: true, 
          retroalimentacion: '¡Correcto! A $15, Qd = 70 y Qs = 50, hay escasez de 20 unidades.' 
        },
        { 
          id: 'c', 
          texto: 'El mercado permanece en equilibrio', 
          correcta: false, 
          retroalimentacion: 'Incorrecto. El precio controlado impide alcanzar el equilibrio.' 
        },
        { 
          id: 'd', 
          texto: 'La cantidad transada aumenta', 
          correcta: false, 
          retroalimentacion: 'Incorrecto. La cantidad transada disminuye al nivel de la oferta (50).' 
        }
      ]
    },
    {
      id: 'sim-pregunta-2',
      enunciado: '¿Cuál es la cantidad transada con un precio máximo de $15?',
      tipo: TipoRespuesta.NUMERICO,
      puntos: 25,
      respuestaCorrecta: 50,
      ayuda: 'Con precio máximo, la cantidad transada es el menor entre cantidad demandada y cantidad ofrecida.'
    },
    {
      id: 'sim-pregunta-3',
      enunciado: 'Si el gobierno establece un precio mínimo de $25, ¿qué cantidad demandarán los consumidores?',
      tipo: TipoRespuesta.NUMERICO,
      puntos: 25,
      respuestaCorrecta: 50,
      ayuda: 'Usa la función de demanda: Qd = 100 - 2P. Sustituye P = 25.'
    },
    {
      id: 'sim-pregunta-4',
      enunciado: 'Selecciona todos los efectos de un precio máximo efectivo:',
      tipo: TipoRespuesta.SELECCIONAR,
      puntos: 30,
      opciones: [
        { id: 'a', texto: 'Escasez del bien', correcta: true },
        { id: 'b', texto: 'Colas y listas de espera', correcta: true },
        { id: 'c', texto: 'Aumento de calidad', correcta: false },
        { id: 'd', texto: 'Mercados negros', correcta: true },
        { id: 'e', texto: 'Reducción de oferta', correcta: true },
        { id: 'f', texto: 'Mayor bienestar total', correcta: false }
      ]
    }
  ]
};

// ============================================
// EJERCICIO 3: IDENTIFICAR SHOCKS
// ============================================

export const identificarShocks: Ejercicio = {
  id: 'ejercicio-3-identificar-shocks',
  tipo: TipoEjercicio.IDENTIFICAR_SHOCKS,
  titulo: 'Identificador de Shocks del Mercado',
  descripcion: 'Analiza escenarios económicos reales e identifica si afectan la oferta, la demanda, ambas, y cómo cambian precio y cantidad de equilibrio.',
  instrucciones: [
    'Lee el escenario presentado cuidadosamente',
    'Identifica qué factor económico ha cambiado',
    'Determina si afecta a la oferta, demanda, o ambas',
    'Predice la dirección del cambio (aumenta/disminuye)',
    'Indica cómo cambiarán el precio y la cantidad de equilibrio',
    'Verifica tu respuesta y lee la explicación'
  ],
  dificultad: Dificultad.MEDIO,
  
  niveles: [
    {
      id: 'nivel-1-shocks-simples',
      nombre: 'Nivel 1: Shocks Simples',
      dificultad: Dificultad.FACIL,
      descripcion: 'Identifica cambios solo en oferta o solo en demanda',
      completado: false,
      desbloqueado: true
    },
    {
      id: 'nivel-2-magnitud',
      nombre: 'Nivel 2: Magnitud de Cambios',
      dificultad: Dificultad.MEDIO,
      descripcion: 'Determina qué curva se desplaza más y efecto neto',
      completado: false,
      desbloqueado: false
    },
    {
      id: 'nivel-3-escenarios-reales',
      nombre: 'Nivel 3: Escenarios Reales',
      dificultad: Dificultad.MEDIO,
      descripcion: 'Analiza noticias económicas reales',
      completado: false,
      desbloqueado: false
    },
    {
      id: 'nivel-4-complejos',
      nombre: 'Nivel 4: Casos Complejos',
      dificultad: Dificultad.DIFICIL,
      descripcion: 'Escenarios donde oferta y demanda cambian simultáneamente',
      completado: false,
      desbloqueado: false
    }
  ],
  
  escenariosShock: [
    // Nivel 1 - Simples
    {
      id: 'shock-1-cafe',
      titulo: 'Café y Clima',
      descripcion: 'Una sequía severa afecta las principales zonas cafetaleras de Brasil.',
      mercado: 'Café',
      evento: 'Sequía en Brasil',
      tipoShock: TipoShock.OFERTA_DISMINUYE,
      magnitud: 'grande',
      graficoInicial: {
        demanda: [
          { precio: 10, cantidad: 100 },
          { precio: 8, cantidad: 120 },
          { precio: 6, cantidad: 140 }
        ],
        oferta: [
          { precio: 6, cantidad: 100 },
          { precio: 8, cantidad: 120 },
          { precio: 10, cantidad: 140 }
        ]
      },
      graficoFinal: {
        demanda: [
          { precio: 10, cantidad: 100 },
          { precio: 8, cantidad: 120 },
          { precio: 6, cantidad: 140 }
        ],
        oferta: [
          { precio: 8, cantidad: 80 },
          { precio: 10, cantidad: 100 },
          { precio: 12, cantidad: 120 }
        ]
      },
      resultadoEsperado: {
        precioCambio: 'sube',
        cantidadCambio: 'baja',
        explicacion: 'La sequía reduce la cosecha, desplazando la oferta a la izquierda. Menor cantidad disponible a cada precio.'
      },
      opciones: [
        { id: 'a', texto: 'Demanda aumenta → P sube, Q sube', correcta: false },
        { id: 'b', texto: 'Oferta disminuye → P sube, Q baja', correcta: true },
        { id: 'c', texto: 'Oferta aumenta → P baja, Q sube', correcta: false },
        { id: 'd', texto: 'Demanda disminuye → P baja, Q baja', correcta: false }
      ]
    },
    {
      id: 'shock-2-ingreso',
      titulo: 'Restaurant y Bonos',
      descripcion: 'El gobierno entrega bonos de $500 a todos los ciudadanos.',
      mercado: 'Comida en restaurantes',
      evento: 'Aumento de ingreso',
      tipoShock: TipoShock.DEMANDA_AUMENTA,
      magnitud: 'media',
      graficoInicial: {
        demanda: [
          { precio: 20, cantidad: 100 },
          { precio: 16, cantidad: 140 },
          { precio: 12, cantidad: 180 }
        ],
        oferta: [
          { precio: 12, cantidad: 100 },
          { precio: 16, cantidad: 140 },
          { precio: 20, cantidad: 180 }
        ]
      },
      graficoFinal: {
        demanda: [
          { precio: 24, cantidad: 100 },
          { precio: 20, cantidad: 140 },
          { precio: 16, cantidad: 180 }
        ],
        oferta: [
          { precio: 12, cantidad: 100 },
          { precio: 16, cantidad: 140 },
          { precio: 20, cantidad: 180 }
        ]
      },
      resultadoEsperado: {
        precioCambio: 'sube',
        cantidadCambio: 'sube',
        explicacion: 'Los restaurantes son un bien normal. Al aumentar el ingreso, la demanda se desplaza a la derecha.'
      },
      opciones: [
        { id: 'a', texto: 'Demanda aumenta → P sube, Q sube', correcta: true },
        { id: 'b', texto: 'Demanda disminuye → P baja, Q baja', correcta: false },
        { id: 'c', texto: 'Oferta aumenta → P baja, Q sube', correcta: false },
        { id: 'd', texto: 'Oferta disminuye → P sube, Q baja', correcta: false }
      ]
    },
    // Nivel 2 - Magnitud
    {
      id: 'shock-3-tecnologia',
      titulo: 'Autos Eléctricos',
      descripcion: 'Nueva tecnología de baterías reduce costos de producción en 40%.',
      mercado: 'Autos eléctricos',
      evento: 'Avance tecnológico',
      tipoShock: TipoShock.OFERTA_AUMENTA,
      magnitud: 'grande',
      graficoInicial: {
        demanda: [
          { precio: 50000, cantidad: 10000 },
          { precio: 40000, cantidad: 20000 }
        ],
        oferta: [
          { precio: 30000, cantidad: 10000 },
          { precio: 40000, cantidad: 20000 }
        ]
      },
      graficoFinal: {
        demanda: [
          { precio: 50000, cantidad: 10000 },
          { precio: 40000, cantidad: 20000 }
        ],
        oferta: [
          { precio: 20000, cantidad: 10000 },
          { precio: 28000, cantidad: 20000 }
        ]
      },
      resultadoEsperado: {
        precioCambio: 'baja',
        cantidadCambio: 'sube',
        explicacion: 'La tecnología mejora la productividad, aumentando oferta. Precios más bajos y mayor cantidad.'
      },
      opciones: [
        { id: 'a', texto: 'Oferta aumenta significativamente → P baja mucho, Q sube mucho', correcta: true },
        { id: 'b', texto: 'Oferta disminuye → P sube, Q baja', correcta: false },
        { id: 'c', texto: 'Demanda aumenta → P sube, Q sube', correcta: false },
        { id: 'd', texto: 'Demanda disminuye → P baja, Q baja', correcta: false }
      ]
    },
    // Nivel 3 - Escenarios reales
    {
      id: 'shock-4-petroleo',
      titulo: 'Crisis del Petróleo',
      descripcion: 'Conflicto en Medio Oriente reduce exportaciones de petróleo. Simultáneamente, países invierten en energías renovables.',
      mercado: 'Petróleo',
      evento: 'Reducción oferta + cambio gustos',
      tipoShock: TipoShock.AMBAS_OFERTA_DEMANDA,
      magnitud: 'media',
      graficoInicial: {
        demanda: [
          { precio: 100, cantidad: 80 },
          { precio: 80, cantidad: 100 }
        ],
        oferta: [
          { precio: 60, cantidad: 80 },
          { precio: 80, cantidad: 100 }
        ]
      },
      graficoFinal: {
        demanda: [
          { precio: 100, cantidad: 70 },
          { precio: 80, cantidad: 90 }
        ],
        oferta: [
          { precio: 70, cantidad: 70 },
          { precio: 90, cantidad: 90 }
        ]
      },
      resultadoEsperado: {
        precioCambio: 'sube',
        cantidadCambio: 'baja',
        explicacion: 'Oferta disminuye (conflicto) y demanda disminuye (alternativas). El precio sube (oferta cae más), cantidad cae (ambas).'
      },
      opciones: [
        { id: 'a', texto: 'Oferta ↓ y Demanda ↓ → P indeterminado, Q baja', correcta: false },
        { id: 'b', texto: 'Oferta ↓ más que Demanda ↓ → P sube, Q baja', correcta: true },
        { id: 'c', texto: 'Oferta ↑ y Demanda ↑ → P indeterminado, Q sube', correcta: false },
        { id: 'd', texto: 'Solo oferta ↓ → P sube, Q baja', correcta: false }
      ]
    },
    {
      id: 'shock-5-casa',
      titulo: 'Mercado Inmobiliario',
      descripcion: 'Tasas de interés bajan a mínimos históricos. Al mismo tiempo, regulaciones ambientales dificultan nueva construcción.',
      mercado: 'Vivienda',
      evento: 'Crédito barato + regulaciones',
      tipoShock: TipoShock.AMBAS_OFERTA_DEMANDA,
      magnitud: 'media',
      graficoInicial: {
        demanda: [
          { precio: 300000, cantidad: 1000 },
          { precio: 250000, cantidad: 1500 }
        ],
        oferta: [
          { precio: 200000, cantidad: 1000 },
          { precio: 250000, cantidad: 1500 }
        ]
      },
      graficoFinal: {
        demanda: [
          { precio: 350000, cantidad: 1000 },
          { precio: 300000, cantidad: 1500 }
        ],
        oferta: [
          { precio: 250000, cantidad: 800 },
          { precio: 300000, cantidad: 1200 }
        ]
      },
      resultadoEsperado: {
        precioCambio: 'sube',
        cantidadCambio: 'indeterminado',
        explicacion: 'Demanda aumenta (crédito barato) y oferta disminuye (regulaciones). El precio definitivamente sube, pero el efecto en cantidad depende de qué cambio sea mayor.'
      },
      opciones: [
        { id: 'a', texto: 'Demanda ↑ y Oferta ↓ → P sube, Q indeterminado', correcta: true },
        { id: 'b', texto: 'Demanda ↓ y Oferta ↑ → P baja, Q indeterminado', correcta: false },
        { id: 'c', texto: 'Demanda ↑ y Oferta ↑ → P indeterminado, Q sube', correcta: false },
        { id: 'd', texto: 'Demanda ↓ y Oferta ↓ → P indeterminado, Q baja', correcta: false }
      ]
    },
    // Nivel 4 - Complejos
    {
      id: 'shock-6-pandemia',
      titulo: 'Efecto Pandemia',
      descripcion: 'Durante COVID-19: cierres de fábricas reducen producción de laptops, pero trabajo remoto aumenta demanda dramáticamente.',
      mercado: 'Laptops',
      evento: 'Pandemia',
      tipoShock: TipoShock.AMBAS_OFERTA_DEMANDA,
      magnitud: 'grande',
      graficoInicial: {
        demanda: [
          { precio: 800, cantidad: 50000 },
          { precio: 600, cantidad: 80000 }
        ],
        oferta: [
          { precio: 400, cantidad: 50000 },
          { precio: 600, cantidad: 80000 }
        ]
      },
      graficoFinal: {
        demanda: [
          { precio: 1200, cantidad: 80000 },
          { precio: 1000, cantidad: 110000 }
        ],
        oferta: [
          { precio: 600, cantidad: 40000 },
          { precio: 800, cantidad: 60000 }
        ]
      },
      resultadoEsperado: {
        precioCambio: 'sube',
        cantidadCambio: 'indeterminado',
        explicacion: 'Oferta disminuyó (cierres) pero demanda aumentó mucho más (trabajo remoto). Precios subieron significativamente. La cantidad pudo subir o bajar según magnitudes relativas.'
      },
      opciones: [
        { id: 'a', texto: 'Demanda ↑↑↑ más que Oferta ↓ → P sube mucho, Q probablemente sube', correcta: true },
        { id: 'b', texto: 'Demanda y Oferta disminuyen → P indeterminado, Q baja', correcta: false },
        { id: 'c', texto: 'Solo demanda aumenta → P sube, Q sube', correcta: false },
        { id: 'd', texto: 'Solo oferta disminuye → P sube, Q baja', correcta: false }
      ]
    }
  ]
};

// ============================================
// FUNCIÓN AUXILIAR: CALCULAR RESULTADO
// ============================================

export function calcularResultadoShock(
  shockOferta: 'aumenta' | 'disminuye' | 'sin_cambio',
  shockDemanda: 'aumenta' | 'disminuye' | 'sin_cambio',
  _magnitudOferta: 'mayor' | 'menor' | 'igual',
  _magnitudDemanda: 'mayor' | 'menor' | 'igual'
): { precio: 'sube' | 'baja' | 'igual' | 'indeterminado'; cantidad: 'sube' | 'baja' | 'igual' | 'indeterminado' } {
  // Lógica simplificada para determinar resultado
  let precio: 'sube' | 'baja' | 'igual' | 'indeterminado' = 'igual';
  let cantidad: 'sube' | 'baja' | 'igual' | 'indeterminado' = 'igual';
  
  // Análisis de precio
  if (shockOferta === 'aumenta' && shockDemanda === 'aumenta') {
    precio = 'indeterminado';
  } else if (shockOferta === 'disminuye' && shockDemanda === 'disminuye') {
    precio = 'indeterminado';
  } else if (shockOferta === 'aumenta' && shockDemanda === 'disminuye') {
    precio = 'baja';
  } else if (shockOferta === 'disminuye' && shockDemanda === 'aumenta') {
    precio = 'sube';
  } else if (shockDemanda === 'aumenta') {
    precio = 'sube';
  } else if (shockDemanda === 'disminuye') {
    precio = 'baja';
  } else if (shockOferta === 'aumenta') {
    precio = 'baja';
  } else if (shockOferta === 'disminuye') {
    precio = 'sube';
  }
  
  // Análisis de cantidad
  if (shockOferta === 'aumenta' && shockDemanda === 'disminuye') {
    cantidad = 'indeterminado';
  } else if (shockOferta === 'disminuye' && shockDemanda === 'aumenta') {
    cantidad = 'indeterminado';
  } else if (shockOferta === 'aumenta' && shockDemanda === 'aumenta') {
    cantidad = 'sube';
  } else if (shockOferta === 'disminuye' && shockDemanda === 'disminuye') {
    cantidad = 'baja';
  } else if (shockOferta === 'aumenta') {
    cantidad = 'sube';
  } else if (shockOferta === 'disminuye') {
    cantidad = 'baja';
  } else if (shockDemanda === 'aumenta') {
    cantidad = 'sube';
  } else if (shockDemanda === 'disminuye') {
    cantidad = 'baja';
  }
  
  return { precio, cantidad };
}

// ============================================
// DATOS DE PROGRESO EJEMPLO
// ============================================

export const progresoInicial: ProgresoEjercicio[] = [
  {
    ejercicioId: 'ejercicio-1-constructor-curvas',
    completado: false,
    puntuacion: 0,
    tiempoSegundos: 0,
    intentos: 0,
    nivelesCompletados: []
  },
  {
    ejercicioId: 'ejercicio-2-simulador-precios',
    completado: false,
    puntuacion: 0,
    tiempoSegundos: 0,
    intentos: 0,
    nivelesCompletados: []
  },
  {
    ejercicioId: 'ejercicio-3-identificar-shocks',
    completado: false,
    puntuacion: 0,
    tiempoSegundos: 0,
    intentos: 0,
    nivelesCompletados: []
  }
];

// ============================================
// RESUMEN DE EJERCICIOS
// ============================================

export const resumenEjercicios = {
  titulo: 'Ejercicios del Módulo 2',
  descripcion: 'Practica los conceptos de oferta, demanda y equilibrio con estos ejercicios interactivos.',
  
  ejercicios: [
    {
      id: 'ejercicio-1',
      nombre: 'Constructor de Curvas',
      habilidades: ['Trazar curvas', 'Identificar pendientes', 'Encontrar equilibrio'],
      tiempoEstimado: '10-15 minutos'
    },
    {
      id: 'ejercicio-2',
      nombre: 'Simulador de Precios',
      habilidades: ['Controles de precio', 'Calcular desequilibrios', 'Pérdida de bienestar'],
      tiempoEstimado: '15-20 minutos'
    },
    {
      id: 'ejercicio-3',
      nombre: 'Identificar Shocks',
      habilidades: ['Análisis de escenarios', 'Desplazamientos de curvas', 'Predicción de cambios'],
      tiempoEstimado: '20-25 minutos'
    }
  ],
  
  consejos: [
    'Comienza con el Ejercicio 1 si eres principiante',
    'Revisa la teoría antes de intentar los ejercicios',
    'Usa papel y lápiz para hacer cálculos',
    'No te preocupes por errores, son parte del aprendizaje',
    'Repite los ejercicios hasta dominarlos'
  ]
};

// Exportación por defecto
export default {
  constructorCurvas,
  simuladorPrecios,
  identificarShocks,
  progresoInicial,
  resumen: resumenEjercicios,
  utilidades: {
    calcularResultadoShock
  }
};
