/**
 * Módulo 2: Ley de la Oferta
 * 
 * Este módulo cubre los fundamentos de la oferta en economía,
 * incluyendo la ley de la oferta, factores determinantes y
 * comportamiento de los productores.
 */

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

export enum DireccionDesplazamientoOferta {
  IZQUIERDA = 'izquierda',  // Disminución de oferta
  DERECHA = 'derecha',      // Aumento de oferta
  NINGUNO = 'ninguno'       // Sin cambio
}

export enum HorizonteTemporal {
  CORTO_PLAZO = 'corto_plazo',
  LARGO_PLAZO = 'largo_plazo'
}

export enum TipoMercado {
  COMPETENCIA_PERFECTA = 'competencia_perfecta',
  MONOPOLIO = 'monopolio',
  OLIGOPOLIO = 'oligopolio',
  COMPETENCIA_MONOPOLISTICA = 'competencia_monopolistica'
}

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

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

export interface CurvaOferta {
  id: string;
  nombre: string;
  puntos: PuntoOferta[];
  descripcion: string;
  horizonteTemporal: HorizonteTemporal;
}

export interface FactorDesplazamientoOferta {
  nombre: string;
  descripcion: string;
  direccion: DireccionDesplazamientoOferta;
  ejemplo: string;
  icono: string;
  mecanismo: string;
}

export interface CostoProduccion {
  categoria: string;
  componentes: string[];
  impactoOferta: string;
}

export interface EjemploOferta {
  titulo: string;
  bien: string;
  escenario: string;
  explicacion: string;
  graficoData: PuntoOferta[];
  impactoEconomico: string;
}

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

export const definicionOferta = {
  titulo: 'Definición de Oferta',
  
  definicion: 'La oferta es la cantidad de un bien o servicio que los productores están dispuestos y pueden ofrecer al mercado a diferentes precios durante un período específico, manteniendo constantes otros factores.',
  
  elementosClave: [
    {
      elemento: 'Disposición a vender',
      descripcion: 'El productor debe querer ofrecer el bien (rentabilidad)'
    },
    {
      elemento: 'Capacidad de producción',
      descripcion: 'El productor debe tener los recursos para producir'
    },
    {
      elemento: 'Precios variables',
      descripcion: 'Se analiza la relación a diferentes niveles de precio'
    },
    {
      elemento: 'Período de tiempo',
      descripcion: 'La oferta siempre se refiere a un período específico'
    }
  ],
  
  diferenciaCapacidad: {
    capacidad: 'Puedo producir 1000 unidades (capacidad técnica)',
    oferta: 'Estoy dispuesto a ofrecer 800 unidades a $10 porque es rentable'
  }
};

export const leyOferta = {
  titulo: 'Ley de la Oferta',
  
  enunciado: 'Existe una relación directa entre el precio de un bien y la cantidad ofrecida: cuando el precio aumenta, la cantidad ofrecida aumenta, y viceversa.',
  
  explicacion: 'Esta relación directa se explica por:',
  
  razones: [
    {
      nombre: 'Motivación de lucro',
      descripcion: 'A precios más altos, la producción es más rentable, incentivando a los productores a aumentar la oferta.',
      ejemplo: 'Si el precio de las manzanas sube a $5/kg, más agricultores querrán producir manzanas.'
    },
    {
      nombre: 'Costos crecientes',
      descripcion: 'Para producir más, las empresas deben usar recursos menos eficientes o pagar costos más altos por factores adicionales.',
      ejemplo: 'Para cultivar más trigo, se deben usar tierras menos fértiles que requieren más insumos.'
    },
    {
      nombre: 'Entrada de nuevos productores',
      descripcion: 'Precios más altos atraen a nuevos productores al mercado, aumentando la oferta total.',
      ejemplo: 'Si el café está caro, agricultores de otras zonas comienzan a cultivar café.'
    }
  ],
  
  representacionMatematica: {
    funcion: 'Qs = f(P)',
    donde: {
      Qs: 'Cantidad ofrecida',
      P: 'Precio del bien',
      f: 'Función creciente (pendiente positiva)'
    },
    ejemploLineal: 'Qs = 20 + 3P',
    interpretacion: 'Por cada aumento de $1 en el precio, la cantidad ofrecida aumenta en 3 unidades.'
  },
  
  excepciones: [
    {
      caso: 'Bienes de especulación',
      descripcion: 'Si los productores esperan precios aún más altos en el futuro, pueden reducir la oferta actual.',
      ejemplo: 'Productores de petróleo reducen oferta actual esperando precios más altos.'
    },
    {
      caso: 'Bienes de lujo exclusivo',
      descripcion: 'Para mantener exclusividad, productores pueden limitar cantidad aunque el precio sea alto.',
      ejemplo: 'Relojes suizos de lujo mantienen producción limitada a pesar de alta demanda.'
    },
    {
      caso: 'Trabajo (curva de oferta retrógrada)',
      descripcion: 'Muy altos salarios pueden reducir horas trabajadas (preferencia por ocio).',
      ejemplo: 'Médicos especialistas trabajan menos horas cuando ganan suficiente.'
    }
  ]
};

// ============================================
// FACTORES QUE DESPLAZAN LA CURVA DE OFERTA
// ============================================

export const factoresDesplazamientoOferta: FactorDesplazamientoOferta[] = [
  {
    nombre: 'Tecnología',
    descripcion: 'Avances tecnológicos que mejoran la productividad',
    direccion: DireccionDesplazamientoOferta.DERECHA,
    mecanismo: 'Reduce costos unitarios, permite producir más con mismos recursos',
    ejemplo: 'Nuevas máquinas de coser automáticas duplican la producción de ropa',
    icono: '⚙️'
  },
  {
    nombre: 'Precio de insumos',
    descripcion: 'Cambios en el costo de materias primas, mano de obra o capital',
    direccion: DireccionDesplazamientoOferta.IZQUIERDA,
    mecanismo: 'Aumenta costos de producción, reduce rentabilidad',
    ejemplo: 'Subida del precio del petróleo aumenta costos de transporte y plásticos',
    icono: '⛽'
  },
  {
    nombre: 'Número de vendedores',
    descripcion: 'Entrada o salida de empresas del mercado',
    direccion: DireccionDesplazamientoOferta.DERECHA,
    mecanismo: 'Más productores = más oferta total en el mercado',
    ejemplo: 'Eliminación de aranceles permite entrada de productores extranjeros',
    icono: '🏭'
  },
  {
    nombre: 'Expectativas de precios',
    descripcion: 'Expectativas sobre precios futuros del bien',
    direccion: DireccionDesplazamientoOferta.IZQUIERDA,
    mecanismo: 'Si esperan precios más altos futuros, reducen oferta actual',
    ejemplo: 'Agricultores almacenan granos esperando precios más altos en invierno',
    icono: '📈'
  },
  {
    nombre: 'Impuestos y subsidios',
    descripcion: 'Políticas gubernamentales que afectan costos',
    direccion: DireccionDesplazamientoOferta.IZQUIERDA, // Para impuestos
    mecanismo: 'Impuestos aumentan costos; subsidios reducen costos',
    ejemplo: 'Nuevo impuesto al tabaco reduce oferta; subsidio a energías renovables aumenta oferta',
    icono: '🏛️'
  },
  {
    nombre: 'Condiciones naturales',
    descripcion: 'Eventos climáticos, desastres naturales o condiciones ambientales',
    direccion: DireccionDesplazamientoOferta.IZQUIERDA,
    mecanismo: 'Afecta capacidad productiva de sectores agrícolas o naturales',
    ejemplo: 'Sequía reduce cosecha de trigo; huracán afecta producción petrolera',
    icono: '🌪️'
  },
  {
    nombre: 'Regulaciones gubernamentales',
    descripcion: 'Normativas ambientales, laborales o de producción',
    direccion: DireccionDesplazamientoOferta.IZQUIERDA,
    mecanismo: 'Mayores requisitos aumentan costos de cumplimiento',
    ejemplo: 'Nuevas normas ambientales requieren filtros costosos en fábricas',
    icono: '📋'
  }
];

// ============================================
// COSTOS DE PRODUCCIÓN
// ============================================

export const costosProduccion = {
  titulo: 'Costos de Producción y Oferta',
  
  introduccion: 'Los costos son fundamentales para entender las decisiones de oferta. Los productores maximizan ganancias donde Ingreso Marginal = Costo Marginal.',
  
  categorias: [
    {
      categoria: 'Costos Fijos (CF)',
      definicion: 'Costos que no varían con la cantidad producida',
      ejemplos: ['Alquiler de local', 'Seguros', 'Salarios administrativos', 'Licencias'],
      ejemplosCantidad: 'Ej: $10,000 mensuales sin importar producción'
    },
    {
      categoria: 'Costos Variables (CV)',
      definicion: 'Costos que varían directamente con la producción',
      ejemplos: ['Materias primas', 'Mano de obra directa', 'Energía productiva', 'Envases'],
      ejemplosCantidad: 'Ej: $5 por unidad producida'
    },
    {
      categoria: 'Costos Totales (CT)',
      definicion: 'Suma de costos fijos y variables',
      formula: 'CT = CF + CV',
      ejemplosCantidad: 'Ej: CT = $10,000 + $5 × Q'
    }
  ],
  
  costosMarginales: {
    nombre: 'Costo Marginal (CM)',
    definicion: 'Costo adicional de producir una unidad más',
    importancia: 'Determina la curva de oferta del productor',
    relacionOferta: 'El productor ofrecerá cantidades donde P ≥ CM',
    formula: 'CM = ΔCT / ΔQ'
  },
  
  tablaEjemplo: [
    { q: 0, cf: 100, cv: 0, ct: 100, cme: '-', cmg: '-' },
    { q: 1, cf: 100, cv: 50, ct: 150, cme: 150, cmg: 50 },
    { q: 2, cf: 100, cv: 90, ct: 190, cme: 95, cmg: 40 },
    { q: 3, cf: 100, cv: 140, ct: 240, cme: 80, cmg: 50 },
    { q: 4, cf: 100, cv: 220, ct: 320, cme: 80, cmg: 80 },
    { q: 5, cf: 100, cv: 340, ct: 440, cme: 88, cmg: 120 }
  ]
};

// ============================================
// CURVAS DE OFERTA
// ============================================

export const curvaOfertaIndividual: CurvaOferta = {
  id: 'oferta-individual',
  nombre: 'Curva de Oferta Individual',
  descripcion: 'Muestra la relación entre precio y cantidad ofrecida por un solo productor',
  horizonteTemporal: HorizonteTemporal.CORTO_PLAZO,
  puntos: [
    { precio: 2, cantidad: 10 },
    { precio: 4, cantidad: 30 },
    { precio: 6, cantidad: 55 },
    { precio: 8, cantidad: 85 },
    { precio: 10, cantidad: 120 }
  ]
};

export const curvaOfertaMercado: CurvaOferta = {
  id: 'oferta-mercado',
  nombre: 'Curva de Oferta de Mercado',
  descripcion: 'Suma horizontal de todas las ofertas individuales en el mercado',
  horizonteTemporal: HorizonteTemporal.CORTO_PLAZO,
  puntos: [
    { precio: 2, cantidad: 1000 },
    { precio: 4, cantidad: 3000 },
    { precio: 6, cantidad: 5500 },
    { precio: 8, cantidad: 8500 },
    { precio: 10, cantidad: 12000 }
  ]
};

export const curvaOfertaLargoPlazo: CurvaOferta = {
  id: 'oferta-largo-plazo',
  nombre: 'Curva de Oferta a Largo Plazo',
  descripcion: 'A largo plazo, más elástica debido a la entrada/salida de empresas',
  horizonteTemporal: HorizonteTemporal.LARGO_PLAZO,
  puntos: [
    { precio: 2, cantidad: 500 },
    { precio: 3, cantidad: 2000 },
    { precio: 4, cantidad: 5000 },
    { precio: 5, cantidad: 10000 },
    { precio: 6, cantidad: 18000 }
  ]
};

// ============================================
// EJEMPLOS PRÁCTICOS
// ============================================

export const ejemplosOferta: EjemploOferta[] = [
  {
    titulo: 'Tecnología en Manufactura',
    bien: 'Smartphones',
    escenario: 'Implementación de robots en línea de ensamblaje reduce tiempo de producción en 40%',
    explicacion: 'El avance tecnológico desplaza la curva de oferta a la derecha. A cada precio, los productores pueden ofrecer más unidades porque sus costos unitarios han disminuido.',
    graficoData: [
      { precio: 400, cantidad: 5000 },
      { precio: 350, cantidad: 7000 },
      { precio: 300, cantidad: 9500 },
      { precio: 250, cantidad: 12000 },
      { precio: 200, cantidad: 15000 }
    ],
    impactoEconomico: 'Precios más bajos para consumidores y mayor acceso tecnológico'
  },
  {
    titulo: 'Shock de Insumos: Petróleo',
    bien: 'Gasolina',
    escenario: 'Conflicto geopolítico reduce exportaciones de petróleo crudo en 30%',
    explicacion: 'El aumento del precio de la materia prima (petróleo) desplaza la curva de oferta de gasolina a la izquierda. Es más costoso producir gasolina.',
    graficoData: [
      { precio: 5, cantidad: 8000 },
      { precio: 6, cantidad: 6500 },
      { precio: 7, cantidad: 5000 },
      { precio: 8, cantidad: 3500 },
      { precio: 9, cantidad: 2000 }
    ],
    impactoEconomico: 'Aumento de precios en transporte y productos derivados'
  },
  {
    titulo: 'Entrada de Nuevos Productores',
    bien: 'Café de especialidad',
    escenario: 'Eliminación de barreras comerciales permite importación de café de nuevos países',
    explicacion: 'La entrada de más productores al mercado aumenta la oferta total. La curva se desplaza a la derecha, beneficiando a los consumidores con más opciones.',
    graficoData: [
      { precio: 20, cantidad: 1000 },
      { precio: 18, cantidad: 1800 },
      { precio: 16, cantidad: 2800 },
      { precio: 14, cantidad: 4000 },
      { precio: 12, cantidad: 5500 }
    ],
    impactoEconomico: 'Mayor diversidad de productos y presión a la baja en precios'
  }
];

// ============================================
// OFERTA EN DIFERENTES HORIZONTES TEMPORALES
// ============================================

export const ofertaTemporal = {
  titulo: 'Oferta: Corto vs Largo Plazo',
  
  cortoPlazo: {
    definicion: 'Período en el que al menos un factor de producción es fijo',
    caracteristicas: [
      'Capacidad productiva limitada',
      'No puede entrar/salir de empresas',
      'Curva de oferta más inclinada (inelástica)',
      'Ajustes principalmente en intensidad de uso'
    ],
    ejemplo: 'Una fábrica puede aumentar producción con turnos extra, pero no construir nuevas plantas'
  },
  
  largoPlazo: {
    definicion: 'Período en el que todos los factores de producción son variables',
    caracteristicas: [
      'Capacidad productiva ajustable',
      'Entrada y salida de empresas',
      'Curva de oferta más plana (elástica)',
      'Ajustes en escala y número de productores'
    ],
    ejemplo: 'Nuevas fábricas se construyen, tecnologías cambian, empresas entran o salen del mercado'
  },
  
  comparacionElasticidad: {
    cortoPlazo: 'Inelástica: dificultad para ajustar producción rápidamente',
    largoPlazo: 'Elástica: tiempo suficiente para todos los ajustes',
    ejemploAgricultura: 'Corto plazo: usar fertilizantes. Largo plazo: cultivar más tierra.'
  }
};

// ============================================
// MOVIMIENTO VS DESPLAZAMIENTO
// ============================================

export const diferenciaMovimientoDesplazamientoOferta = {
  titulo: 'Movimiento a lo largo vs Desplazamiento de la curva de oferta',
  
  movimiento: {
    nombre: 'Movimiento a lo largo de la curva',
    causa: 'Cambio en el precio del propio bien',
    efecto: 'Cambio en la cantidad ofrecida',
    direccion: 'Subida o bajada por la misma curva',
    ejemplo: 'El precio del trigo sube de $5 a $7 → agricultores ofrecen más trigo',
    representacion: 'Movimiento de un punto a otro en la misma curva'
  },
  
  desplazamiento: {
    nombre: 'Desplazamiento de la curva',
    causa: 'Cambio en factores distintos al precio (tecnología, costos, regulaciones)',
    efecto: 'Cambio en la oferta (toda la curva se mueve)',
    direccionDerecha: 'Aumento de oferta (más cantidad a cada precio)',
    direccionIzquierda: 'Disminución de oferta (menos cantidad a cada precio)',
    ejemplo: 'Nueva tecnología reduce costos → más oferta a todos los precios',
    representacion: 'Curva completa se desplaza'
  },
  
  tablaComparativa: [
    { concepto: 'Causa', movimiento: 'Precio del bien cambia', desplazamiento: 'Otros factores cambian' },
    { concepto: 'Gráfico', movimiento: 'Nos movemos sobre la curva', desplazamiento: 'Curva se desplaza' },
    { concepto: 'Terminología', movimiento: 'Cambio en cantidad ofrecida', desplazamiento: 'Cambio en oferta' },
    { concepto: 'Ejemplo', movimiento: 'Precio de manzanas ↑', desplazamiento: 'Tecnología mejora ↑' }
  ]
};

// ============================================
// RESUMEN Y PUNTOS CLAVE
// ============================================

export const resumenOferta = {
  titulo: 'Resumen: Oferta',
  
  puntosClave: [
    'La oferta requiere disposición Y capacidad de producir',
    'La ley de la oferta establece relación directa precio-cantidad',
    'La curva de oferta tiene pendiente positiva',
    'La oferta se desplaza por cambios en costos, tecnología, número de vendedores',
    'Tecnología mejora → oferta aumenta (desplazamiento derecha)',
    'Costos de insumos suben → oferta disminuye (desplazamiento izquierda)',
    'A largo plazo, la oferta es más elástica que a corto plazo',
    'Costo marginal determina la curva de oferta del productor'
  ],
  
  formulaRecordatorio: {
    leyOferta: 'P ↑ → Qs ↑ (ceteris paribus)',
    ofertaMercado: 'Qs_mercado = Σ Qs_individuales',
    decisionProductor: 'Producir donde P ≥ CMg'
  },
  
  mapaConceptual: {
    centro: 'Oferta',
    ramas: [
      { nombre: 'Ley', elementos: ['Relación directa P-Q', 'Pendiente positiva'] },
      { nombre: 'Determinantes', elementos: ['Tecnología', 'Costos', 'Vendedores', 'Expectativas'] },
      { nombre: 'Tipos', elementos: ['Individual', 'Mercado', 'Corto plazo', 'Largo plazo'] },
      { nombre: 'Costos', elementos: ['Fijos', 'Variables', 'Marginal', 'Total'] }
    ]
  }
};

// Exportación por defecto
export default {
  definicion: definicionOferta,
  ley: leyOferta,
  factores: factoresDesplazamientoOferta,
  costos: costosProduccion,
  curvas: {
    individual: curvaOfertaIndividual,
    mercado: curvaOfertaMercado,
    largoPlazo: curvaOfertaLargoPlazo
  },
  ejemplos: ejemplosOferta,
  temporal: ofertaTemporal,
  diferencia: diferenciaMovimientoDesplazamientoOferta,
  resumen: resumenOferta
};
