/**
 * Módulo 2: Equilibrio de Mercado
 * 
 * Este módulo cubre el concepto de equilibrio, desequilibrios,
 * y controles de precios en los mercados.
 */

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

export enum TipoDesequilibrio {
  EXCESO_OFERTA = 'exceso_oferta',     // Superávit
  EXCESO_DEMANDA = 'exceso_demanda',   // Escasez
  EQUILIBRIO = 'equilibrio'
}

export enum TipoControlPrecio {
  PRECIO_MAXIMO = 'precio_maximo',     // Techo
  PRECIO_MINIMO = 'precio_minimo',     // Piso
  NINGUNO = 'ninguno'
}

export enum EfectoControlPrecio {
  ESCASEZ = 'escasez',
  SUPERAVIT = 'superavit',
  MERCADO_NEGRO = 'mercado_negro',
  DESEMPLEO = 'desempleo',
  RACIONAMIENTO = 'racionamiento',
  NINGUNO = 'ninguno'
}

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

export interface PuntoMercado {
  precio: number;
  cantidad: number;
}

export interface EquilibrioMercado {
  precioEquilibrio: number;
  cantidadEquilibrio: number;
  punto: PuntoMercado;
  excedenteConsumidor: number;
  excedenteProductor: number;
  bienestarTotal: number;
}

export interface CurvaMercado {
  demanda: PuntoMercado[];
  oferta: PuntoMercado[];
}

export interface Desequilibrio {
  tipo: TipoDesequilibrio;
  precioActual: number;
  cantidadDemandada: number;
  cantidadOfrecida: number;
  diferencia: number;
  magnitud: number;
  presionPrecio: 'subir' | 'bajar' | 'ninguna';
}

export interface ControlPrecio {
  tipo: TipoControlPrecio;
  nivel: number;
  precioEquilibrio: number;
  efectivo: boolean;
  efectos: EfectoControlPrecio[];
  cantidadTransada: number;
  perdidaBienestar: number;
}

export interface EjemploEquilibrio {
  titulo: string;
  mercado: string;
  descripcion: string;
  datos: CurvaMercado;
  equilibrio: EquilibrioMercado;
  escenarios: EscenarioDesequilibrio[];
}

export interface EscenarioDesequilibrio {
  nombre: string;
  precio: number;
  tipo: TipoDesequilibrio;
  explicacion: string;
  resultado: string;
}

export interface HistoriaPrecio {
  periodo: string;
  descripcion: string;
  precioControl: number;
  precioEquilibrio: number;
  consecuencias: string[];
  lecciones: string;
}

// ============================================
// CONTENIDO TEÓRICO
// ============================================

export const definicionEquilibrio = {
  titulo: 'Equilibrio de Mercado',
  
  definicion: 'El equilibrio de mercado es una situación en la que la cantidad demandada de un bien es igual a la cantidad ofrecida. En este punto, no hay tendencia al cambio: ni compradores ni vendedores tienen incentivo para alterar sus decisiones.',
  
  caracteristicas: [
    {
      caracteristica: 'Cantidad demandada = Cantidad ofrecida',
      explicacion: 'No hay exceso de oferta ni de demanda'
    },
    {
      caracteristica: 'Precio estable',
      explicacion: 'No hay presiones para que el precio suba o baje'
    },
    {
      caracteristica: 'Eficiencia',
      explicacion: 'Se maximiza el bienestar social (excedente total)'
    },
    {
      caracteristica: 'Voluntad de intercambio',
      explicacion: 'Todos los intercambios mutuamente beneficiosos ocurren'
    }
  ],
  
  mecanismoAjuste: {
    titulo: 'Mecanismo de Ajuste al Equilibrio',
    proceso: [
      {
        paso: 1,
        situacion: 'Precio por encima del equilibrio',
        resultado: 'Exceso de oferta (superávit)',
        ajuste: 'Vendedores compiten reduciendo precios para vender excedentes'
      },
      {
        paso: 2,
        situacion: 'Precio por debajo del equilibrio',
        resultado: 'Exceso de demanda (escasez)',
        ajuste: 'Compradores compiten ofreciendo precios más altos'
      },
      {
        paso: 3,
        situacion: 'Precio de equilibrio',
        resultado: 'Cantidad demandada = Cantidad ofrecida',
        ajuste: 'No hay presiones adicionales; mercado está en equilibrio'
      }
    ]
  },
  
  representacionMatematica: {
    condicion: 'Qd = Qs',
    ejemplo: {
      demanda: 'Qd = 100 - 2P',
      oferta: 'Qs = 20 + 3P',
      resolucion: [
        '100 - 2P = 20 + 3P',
        '80 = 5P',
        'P* = 16 (precio de equilibrio)',
        'Q* = 100 - 2(16) = 68 (cantidad de equilibrio)'
      ]
    }
  }
};

// ============================================
// EXCEDENTES DEL CONSUMIDOR Y PRODUCTOR
// ============================================

export const excedentesMercado = {
  titulo: 'Bienestar en el Equilibrio',
  
  excedenteConsumidor: {
    nombre: 'Excedente del Consumidor (EC)',
    definicion: 'Diferencia entre lo que los consumidores están dispuestos a pagar y lo que realmente pagan',
    formula: 'EC = Valoración - Precio pagado',
    calculo: 'Área bajo la curva de demanda y arriba del precio de equilibrio',
    interpretacion: 'Beneficio neto que obtienen los consumidores del intercambio',
    ejemplo: 'Dispuesto a pagar $50, pago $30 → Excedente = $20'
  },
  
  excedenteProductor: {
    nombre: 'Excedente del Productor (EP)',
    definicion: 'Diferencia entre el precio que reciben los productores y el costo mínimo al que estarían dispuestos a vender',
    formula: 'EP = Precio recibido - Costo de producción',
    calculo: 'Área arriba de la curva de oferta y debajo del precio de equilibrio',
    interpretacion: 'Beneficio neto que obtienen los productores del intercambio',
    ejemplo: 'Dispuesto a vender a $20, recibo $30 → Excedente = $10'
  },
  
  bienestarTotal: {
    nombre: 'Bienestar Total (Excedente Total)',
    definicion: 'Suma de excedentes del consumidor y del productor',
    formula: 'BT = EC + EP',
    propiedad: 'En equilibrio competitivo, el bienestar total se maximiza',
    perdida: 'Cualquier desviación del equilibrio genera pérdida de bienestar'
  }
};

// ============================================
// DESEQUILIBRIOS DE MERCADO
// ============================================

export const excesoOferta: Desequilibrio = {
  tipo: TipoDesequilibrio.EXCESO_OFERTA,
  precioActual: 25,
  cantidadDemandada: 40,
  cantidadOfrecida: 80,
  diferencia: 40,
  magnitud: 40,
  presionPrecio: 'bajar'
};

export const excesoDemanda: Desequilibrio = {
  tipo: TipoDesequilibrio.EXCESO_DEMANDA,
  precioActual: 10,
  cantidadDemandada: 90,
  cantidadOfrecida: 30,
  diferencia: 60,
  magnitud: 60,
  presionPrecio: 'subir'
};

export const tiposDesequilibrio = {
  excesoOferta: {
    nombre: 'Exceso de Oferta (Superávit)',
    definicion: 'Cantidad ofrecida > Cantidad demandada',
    causas: [
      'Precio por encima del equilibrio',
      'Aumento repentino de producción',
      'Caída inesperada de la demanda'
    ],
    consecuencias: [
      'Acumulación de inventarios',
      'Presión a la baja en precios',
      'Posibles quiebras si persiste',
      'Competencia agresiva entre vendedores'
    ],
    ejemplos: [
      'Viviendas sin vender después de una burbuja',
      'Excedentes agrícolas después de buenas cosechas',
      'Autos en concesionarias durante recesión'
    ],
    grafico: {
      descripcion: 'A P > P*, Qs > Qd',
      areaSuperavit: 'Distancia horizontal entre curvas al precio dado'
    }
  },
  
  excesoDemanda: {
    nombre: 'Exceso de Demanda (Escasez)',
    definicion: 'Cantidad demandada > Cantidad ofrecida',
    causas: [
      'Precio por debajo del equilibrio',
      'Aumento repentino de la demanda',
      'Caída inesperada de la oferta'
    ],
    consecuencias: [
      'Colas y listas de espera',
      'Presión al alza en precios',
      'Racionamiento de productos',
      'Mercados negros',
      'Malestar social'
    ],
    ejemplos: [
      'Gasolina en crisis (colas en bomba)',
      'Entradas para conciertos populares',
      'Vivienda asequible en ciudades caras',
      'Productos básicos con precios controlados'
    ],
    grafico: {
      descripcion: 'A P < P*, Qd > Qs',
      areaEscasez: 'Distancia horizontal entre curvas al precio dado'
    }
  }
};

// ============================================
// CONTROLES DE PRECIO
// ============================================

export const controlesPrecio = {
  titulo: 'Controles de Precio',
  
  introduccion: 'Los gobiernos a veces intervienen estableciendo precios máximos o mínimos que difieren del precio de equilibrio de mercado.',
  
  precioMaximo: {
    nombre: 'Precio Máximo (Techo)',
    definicion: 'Precio legal más alto al que se puede vender un bien',
    condicionEfectivo: 'Debe estar DEBAJO del precio de equilibrio',
    efectos: {
      cuandoEsEfectivo: [
        'Escasez persistente (Qd > Qs)',
        'Racionamiento del bien',
        'Colas y esperas',
        'Mercados negros',
        'Reducción de calidad',
        'Pérdida de bienestar'
      ],
      cuandoNoEsEfectivo: [
        'Precio máximo > precio de equilibrio',
        'Mercado opera normalmente',
        'Sin efectos sobre cantidad transada'
      ]
    },
    ejemplos: [
      { caso: 'Alquileres', ubicacion: 'Nueva York, San Francisco', resultado: 'Escasez de vivienda, subarriendos' },
      { caso: 'Gasolina', ubicacion: 'Estados Unidos 1970s', resultado: 'Largas colas, mercado negro' },
      { caso: 'Productos básicos', ubicacion: 'Venezuela', resultado: 'Desabastecimiento, contrabando' }
    ]
  },
  
  precioMinimo: {
    nombre: 'Precio Mínimo (Piso)',
    definicion: 'Precio legal más bajo al que se puede vender un bien',
    condicionEfectivo: 'Debe estar ARRIBA del precio de equilibrio',
    efectos: {
      cuandoEsEfectivo: [
        'Superávit persistente (Qs > Qd)',
        'Acumulación de inventarios',
        'Desperdicio de recursos',
        'Mercados negros (venta a precio menor)',
        'Pérdida de bienestar'
      ],
      cuandoNoEsEfectivo: [
        'Precio mínimo < precio de equilibrio',
        'Mercado opera normalmente',
        'Sin efectos sobre cantidad transada'
      ]
    },
    ejemplos: [
      { caso: 'Salario mínimo', ubicacion: 'Mayoría de países', resultado: 'Desempleo potencial en trabajadores no calificados' },
      { caso: 'Precios agrícolas', ubicacion: 'Unión Europea', resultado: 'Superávits, gasto gubernamental' },
      { caso: 'Alcohol/tabaco', ubicacion: 'Políticas de salud', resultado: 'Menor consumo, contrabando' }
    ]
  }
};

// ============================================
// EJEMPLOS DE CONTROLES HISTÓRICOS
// ============================================

export const historiasControlesPrecio: HistoriaPrecio[] = [
  {
    periodo: '1971-1974',
    descripcion: 'Control de precios de gasolina en EE.UU.',
    precioControl: 0.36,
    precioEquilibrio: 0.55,
    consecuencias: [
      'Largas colas en gasolineras (hasta 4 horas)',
      'Racionamiento por día par/impar',
      'Mercado negro de gasolina',
      'Violencia en gasolineras',
      'Desabastecimiento regional'
    ],
    lecciones: 'Los controles de precios generan escasez cuando están por debajo del equilibrio'
  },
  {
    periodo: '1946-1947',
    descripcion: 'Control de alquileres en Nueva York',
    precioControl: 75,
    precioEquilibrio: 100,
    consecuencias: [
      'Reducción de mantenimiento de edificios',
      'Conversión de apartamentos a condominios',
      'Mercado negro (pagos bajo mesa)',
      'Escasez crónica de vivienda',
      'Subarriendos a precios más altos'
    ],
    lecciones: 'Precios máximos reducen la calidad y cantidad de oferta a largo plazo'
  },
  {
    periodo: 'Actual',
    descripcion: 'Salario mínimo en diferentes países',
    precioControl: 15,
    precioEquilibrio: 12,
    consecuencias: [
      'Reducción de contratación de jóvenes',
      'Automatización de trabajos (kioscos)',
      'Reducción de horas trabajadas',
      'Beneficio para trabajadores que mantienen empleo',
      'Posible aumento de precios'
    ],
    lecciones: 'Los precios mínimos crean desempleo cuando están por encima del equilibrio, pero benefician a quienes mantienen el empleo'
  }
];

// ============================================
// EJEMPLOS PRÁCTICOS DE EQUILIBRIO
// ============================================

export const ejemplosEquilibrio: EjemploEquilibrio[] = [
  {
    titulo: 'Mercado de Manzanas',
    mercado: 'Manzanas',
    descripcion: 'Análisis del equilibrio en un mercado agrícola simple',
    datos: {
      demanda: [
        { precio: 1, cantidad: 90 },
        { precio: 2, cantidad: 80 },
        { precio: 3, cantidad: 70 },
        { precio: 4, cantidad: 60 },
        { precio: 5, cantidad: 50 }
      ],
      oferta: [
        { precio: 1, cantidad: 10 },
        { precio: 2, cantidad: 30 },
        { precio: 3, cantidad: 50 },
        { precio: 4, cantidad: 70 },
        { precio: 5, cantidad: 90 }
      ]
    },
    equilibrio: {
      precioEquilibrio: 3.5,
      cantidadEquilibrio: 60,
      punto: { precio: 3.5, cantidad: 60 },
      excedenteConsumidor: 45,
      excedenteProductor: 45,
      bienestarTotal: 90
    },
    escenarios: [
      {
        nombre: 'Precio por encima del equilibrio',
        precio: 5,
        tipo: TipoDesequilibrio.EXCESO_OFERTA,
        explicacion: 'A $5, los productores ofrecen 90 unidades pero solo se demandan 50',
        resultado: 'Superávit de 40 unidades. Presión a la baja en precios.'
      },
      {
        nombre: 'Precio por debajo del equilibrio',
        precio: 2,
        tipo: TipoDesequilibrio.EXCESO_DEMANDA,
        explicacion: 'A $2, se demandan 80 unidades pero solo se ofrecen 30',
        resultado: 'Escasez de 50 unidades. Colas y presión al alza.'
      }
    ]
  },
  {
    titulo: 'Mercado Laboral: Desempleo',
    mercado: 'Trabajo no calificado',
    descripcion: 'Efecto del salario mínimo en el empleo',
    datos: {
      demanda: [
        { precio: 4, cantidad: 100 },
        { precio: 6, cantidad: 80 },
        { precio: 8, cantidad: 60 },
        { precio: 10, cantidad: 40 },
        { precio: 12, cantidad: 20 }
      ],
      oferta: [
        { precio: 4, cantidad: 20 },
        { precio: 6, cantidad: 40 },
        { precio: 8, cantidad: 60 },
        { precio: 10, cantidad: 80 },
        { precio: 12, cantidad: 100 }
      ]
    },
    equilibrio: {
      precioEquilibrio: 8,
      cantidadEquilibrio: 60,
      punto: { precio: 8, cantidad: 60 },
      excedenteConsumidor: 180,
      excedenteProductor: 180,
      bienestarTotal: 360
    },
    escenarios: [
      {
        nombre: 'Salario mínimo efectivo',
        precio: 12,
        tipo: TipoDesequilibrio.EXCESO_OFERTA,
        explicacion: 'Salario mínimo de $12 está por encima del equilibrio de $8',
        resultado: '100 personas buscan trabajo, pero solo 20 empleos. Desempleo de 80 personas.'
      }
    ]
  }
];

// ============================================
// TABLA COMPARATIVA: CONTROLES DE PRECIO
// ============================================

export const tablaComparativaControles = {
  titulo: 'Comparación de Controles de Precio',
  
  filas: [
    {
      caracteristica: 'Nombre',
      precioMaximo: 'Techo, Precio Máximo',
      precioMinimo: 'Piso, Precio Mínimo'
    },
    {
      caracteristica: 'Ubicación',
      precioMaximo: 'Debajo del equilibrio',
      precioMinimo: 'Arriba del equilibrio'
    },
    {
      caracteristica: 'Desequilibrio',
      precioMaximo: 'Exceso de demanda (escasez)',
      precioMinimo: 'Exceso de oferta (superávit)'
    },
    {
      caracteristica: 'Cantidad transada',
      precioMaximo: 'Determinada por oferta (Qs)',
      precioMinimo: 'Determinada por demanda (Qd)'
    },
    {
      caracteristica: 'Efectos secundarios',
      precioMaximo: 'Colas, mercado negro, baja calidad',
      precioMinimo: 'Inventarios, desperdicio, mercado negro'
    },
    {
      caracteristica: 'Ejemplo común',
      precioMaximo: 'Alquileres, gasolina',
      precioMinimo: 'Salarios mínimos, precios agrícolas'
    }
  ]
};

// ============================================
// PÉRDIDA DE BIENESTAR (DEADWEIGHT LOSS)
// ============================================

export const perdidaBienestar = {
  titulo: 'Pérdida de Eficiencia por Controles',
  
  definicion: 'La pérdida de peso muerto (deadweight loss) es la reducción en el bienestar total que ocurre cuando el mercado no alcanza el equilibrio. Representa transacciones mutuamente beneficiosas que no ocurren.',
  
  calculoPrecioMaximo: {
    pasos: [
      'En equilibrio: BT = EC + EP',
      'Con precio máximo: BT_control = EC_nuevo + EP_nuevo',
      'Pérdida = BT_equilibrio - BT_control',
      'Representada por el triángulo entre cantidad transada y cantidad de equilibrio'
    ],
    areas: [
      'Pérdida de excedente del consumidor (transacciones perdidas)',
      'Pérdida de excedente del productor (transacciones perdidas)',
      'Área total: triángulo entre curvas de oferta y demanda'
    ]
  },
  
  calculoPrecioMinimo: {
    pasos: [
      'En equilibrio: BT = EC + EP',
      'Con precio mínimo: BT_control = EC_nuevo + EP_nuevo',
      'Pérdida = BT_equilibrio - BT_control',
      'Representada por el triángulo entre cantidad demandada y cantidad de equilibrio'
    ],
    areas: [
      'Pérdida por producción ineficiente (costos > beneficios)',
      'Pérdida por consumo perdido (beneficios > costos)',
      'Área total: triángulo entre curvas de oferta y demanda'
    ]
  }
};

// ============================================
// RESUMEN
// ============================================

export const resumenEquilibrio = {
  titulo: 'Resumen: Equilibrio de Mercado',
  
  puntosClave: [
    'Equilibrio: Qd = Qs, sin tendencia al cambio',
    'Precio de equilibrio estable sin presiones',
    'Exceso de oferta: P > P* → presión a la baja',
    'Exceso de demanda: P < P* → presión al alza',
    'Precio máximo efectivo: P_max < P* → escasez',
    'Precio mínimo efectivo: P_min > P* → superávit',
    'Controles de precio generan pérdida de bienestar',
    'Mercados tienden al equilibrio mediante ajustes de precio'
  ],
  
  formulasRecordatorio: {
    condicionEquilibrio: 'Qd = Qs',
    excesoOferta: 'Qs - Qd > 0 cuando P > P*',
    excesoDemanda: 'Qd - Qs > 0 cuando P < P*',
    bienestarTotal: 'BT = EC + EP',
    perdidaBienestar: 'DWL = BT_equilibrio - BT_control'
  },
  
  mapaConceptual: {
    centro: 'Equilibrio',
    ramas: [
      { nombre: 'Condición', elementos: ['Qd = Qs', 'P estable', 'Eficiencia máxima'] },
      { nombre: 'Desequilibrios', elementos: ['Exceso oferta (superávit)', 'Exceso demanda (escasez)'] },
      { nombre: 'Controles', elementos: ['Precio máximo → escasez', 'Precio mínimo → superávit'] },
      { nombre: 'Bienestar', elementos: ['Excedente consumidor', 'Excedente productor', 'Pérdida peso muerto'] }
    ]
  }
};

// Exportación por defecto
export default {
  definicion: definicionEquilibrio,
  excedentes: excedentesMercado,
  desequilibrios: tiposDesequilibrio,
  controles: controlesPrecio,
  historias: historiasControlesPrecio,
  ejemplos: ejemplosEquilibrio,
  comparativa: tablaComparativaControles,
  perdidaBienestar,
  resumen: resumenEquilibrio
};
