/**
 * Módulo 2: Ley de la Demanda
 * 
 * Este módulo cubre los fundamentos de la demanda en economía,
 * incluyendo la ley de la demanda, factores determinantes y
 * tipos de curvas de demanda.
 */

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

export type TipoBien = 'normal' | 'inferior' | 'lujo' | 'necesidad';

export type TipoRelacionPrecio = 'sustituto' | 'complementario' | 'independiente';

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

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

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

export interface CurvaDemanda {
  id: string;
  nombre: string;
  puntos: PuntoDemanda[];
  descripcion: string;
}

export interface FactorDesplazamiento {
  nombre: string;
  descripcion: string;
  direccion: DireccionDesplazamiento;
  ejemplo: string;
  icono: string;
}

export interface EjemploDemanda {
  titulo: string;
  bien: string;
  escenario: string;
  explicacion: string;
  graficoData: PuntoDemanda[];
}

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

export const definicionDemanda = {
  titulo: 'Definición de Demanda',
  definicion: 'La demanda es la cantidad de un bien o servicio que los consumidores están dispuestos y pueden comprar a diferentes precios durante un período específico, manteniendo constantes otros factores (ceteris paribus).',
  
  elementosClave: [
    {
      elemento: 'Disposición a comprar',
      descripcion: 'El consumidor debe querer adquirir el bien (preferencia)'
    },
    {
      elemento: 'Capacidad de compra',
      descripcion: 'El consumidor debe tener los recursos necesarios (ingreso)'
    },
    {
      elemento: 'Precios variables',
      descripcion: 'Se analiza la relación a diferentes niveles de precio'
    },
    {
      elemento: 'Período de tiempo',
      descripcion: 'La demanda siempre se refiere a un período específico'
    }
  ],
  
  diferenciaDeseo: {
    deseo: 'Quiero un auto de lujo (sin capacidad de compra)',
    demanda: 'Puedo y quiero comprar 2 litros de leche semanales a $2 cada uno'
  }
};

export const leyDemanda = {
  titulo: 'Ley de la Demanda',
  
  enunciado: 'Existe una relación inversa entre el precio de un bien y la cantidad demandada: cuando el precio aumenta, la cantidad demandada disminuye, y viceversa.',
  
  explicacion: 'Esta relación inversa ocurre por dos efectos principales:',
  
  efectos: [
    {
      nombre: 'Efecto Sustitución',
      descripcion: 'Cuando el precio de un bien aumenta, los consumidores sustituyen hacia bienes alternativos más baratos que satisfacen necesidades similares.',
      ejemplo: 'Si el precio de la carne de res sube, los consumidores compran más pollo o pescado.'
    },
    {
      nombre: 'Efecto Ingreso',
      descripcion: 'Cuando el precio aumenta, el poder adquisitivo real del consumidor disminuye, permitiéndole comprar menos cantidad del bien.',
      ejemplo: 'Si el precio de la gasolina sube, con el mismo presupuesto puedo comprar menos litros.'
    }
  ],
  
  representacionMatematica: {
    funcion: 'Qd = f(P)',
    donde: {
      Qd: 'Cantidad demandada',
      P: 'Precio del bien',
      f: 'Función decreciente (pendiente negativa)'
    },
    ejemploLineal: 'Qd = 100 - 2P',
    interpretacion: 'Por cada aumento de $1 en el precio, la cantidad demandada disminuye en 2 unidades.'
  }
};

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

export const factoresDesplazamiento: FactorDesplazamiento[] = [
  {
    nombre: 'Ingreso del consumidor',
    descripcion: 'Cambios en el ingreso disponible de los consumidores',
    direccion: DireccionDesplazamiento.DERECHA,
    ejemplo: 'Un aumento de sueldo permite comprar más restaurantes (bien normal) o menos fideos instantáneos (bien inferior)',
    icono: '💰'
  },
  {
    nombre: 'Gustos y preferencias',
    descripcion: 'Cambios en los gustos de los consumidores por modas, publicidad o información',
    direccion: DireccionDesplazamiento.DERECHA,
    ejemplo: 'Una campaña de salud que promueve el consumo de agua aumenta la demanda de botellas',
    icono: '❤️'
  },
  {
    nombre: 'Precio de bienes relacionados',
    descripcion: 'Cambios en el precio de sustitutos o complementarios',
    direccion: DireccionDesplazamiento.DERECHA,
    ejemplo: 'Si sube el precio del café, aumenta la demanda de té (sustituto)',
    icono: '🔗'
  },
  {
    nombre: 'Expectativas futuras',
    descripcion: 'Expectativas sobre precios, ingresos o disponibilidad futura',
    direccion: DireccionDesplazamiento.DERECHA,
    ejemplo: 'Si se espera que suba el precio de la vivienda, la demanda actual aumenta',
    icono: '🔮'
  },
  {
    nombre: 'Número de compradores',
    descripcion: 'Cambios en la población o demografía del mercado',
    direccion: DireccionDesplazamiento.DERECHA,
    ejemplo: 'Llegada de turistas aumenta la demanda de hospedaje en temporada alta',
    icono: '👥'
  }
];

export const tiposBienesDemanda = {
  bienNormal: {
    nombre: 'Bien Normal',
    definicion: 'Demanda aumenta cuando aumenta el ingreso',
    relacionIngreso: 'Directa',
    ejemplos: ['Ropa de marca', 'Restaurantes', 'Viajes', 'Electrónicos'],
    elasticidadIngreso: 'E_Y > 0'
  },
  
  bienInferior: {
    nombre: 'Bien Inferior',
    definicion: 'Demanda disminuye cuando aumenta el ingreso',
    relacionIngreso: 'Inversa',
    ejemplos: ['Fideos instantáneos', 'Transporte público', 'Marcas genéricas', 'Comida rápida económica'],
    elasticidadIngreso: 'E_Y < 0'
  },
  
  bienLujo: {
    nombre: 'Bien de Lujo',
    definicion: 'Demanda aumenta proporcionalmente más que el ingreso',
    relacionIngreso: 'Directa (elástica)',
    ejemplos: ['Yates', 'Joyería', 'Autos deportivos', 'Viajes en primera clase'],
    elasticidadIngreso: 'E_Y > 1'
  },
  
  bienNecesidad: {
    nombre: 'Bien de Necesidad',
    definicion: 'Demanda aumenta menos proporcionalmente que el ingreso',
    relacionIngreso: 'Directa (inelástica)',
    ejemplos: ['Sal', 'Agua', 'Pan básico', 'Medicinas esenciales'],
    elasticidadIngreso: '0 < E_Y < 1'
  }
};

export const bienesRelacionados = {
  sustitutos: {
    nombre: 'Bienes Sustitutos',
    definicion: 'Bienes que pueden reemplazarse mutuamente para satisfacer la misma necesidad',
    relacionPrecio: 'Directa: si sube el precio de A, aumenta la demanda de B',
    coeficiente: 'E_AB > 0',
    ejemplos: [
      { bienA: 'Coca-Cola', bienB: 'Pepsi' },
      { bienA: 'Mantequilla', bienB: 'Margarina' },
      { bienA: 'Carne de res', bienB: 'Pollo' }
    ]
  },
  
  complementarios: {
    nombre: 'Bienes Complementarios',
    definicion: 'Bienes que se consumen juntos para mayor satisfacción',
    relacionPrecio: 'Inversa: si sube el precio de A, disminuye la demanda de B',
    coeficiente: 'E_AB < 0',
    ejemplos: [
      { bienA: 'Autos', bienB: 'Gasolina' },
      { bienA: 'Café', bienB: 'Azúcar' },
      { bienA: 'Impresora', bienB: 'Tinta' }
    ]
  }
};

// ============================================
// CURVAS DE DEMANDA
// ============================================

export const curvaDemandaIndividual: CurvaDemanda = {
  id: 'demanda-individual',
  nombre: 'Curva de Demanda Individual',
  descripcion: 'Muestra la relación entre precio y cantidad demandada por un solo consumidor',
  puntos: [
    { precio: 10, cantidad: 1 },
    { precio: 8, cantidad: 3 },
    { precio: 6, cantidad: 5 },
    { precio: 4, cantidad: 7 },
    { precio: 2, cantidad: 9 }
  ]
};

export const curvaDemandaMercado: CurvaDemanda = {
  id: 'demanda-mercado',
  nombre: 'Curva de Demanda de Mercado',
  descripcion: 'Suma horizontal de todas las demandas individuales en el mercado',
  puntos: [
    { precio: 10, cantidad: 100 },
    { precio: 8, cantidad: 300 },
    { precio: 6, cantidad: 500 },
    { precio: 4, cantidad: 700 },
    { precio: 2, cantidad: 900 }
  ]
};

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

export const ejemplosDemanda: EjemploDemanda[] = [
  {
    titulo: 'Demanda de Entradas de Cine',
    bien: 'Entradas de cine',
    escenario: 'El cine reduce sus precios de $12 a $8 durante los martes',
    explicacion: 'Según la ley de la demanda, al disminuir el precio, más personas asistirán al cine. La cantidad demandada aumenta moviéndonos a lo largo de la curva.',
    graficoData: [
      { precio: 12, cantidad: 100 },
      { precio: 10, cantidad: 150 },
      { precio: 8, cantidad: 220 },
      { precio: 6, cantidad: 300 },
      { precio: 4, cantidad: 400 }
    ]
  },
  {
    titulo: 'Efecto de Ingreso en Restaurant',
    bien: 'Comida en restaurantes',
    escenario: 'Los habitantes de una ciudad reciben un aumento salarial del 20%',
    explicacion: 'Los restaurantes son un bien normal. Al aumentar el ingreso, la demanda se desplaza a la derecha: a cada precio, se demanda más cantidad.',
    graficoData: [
      { precio: 50, cantidad: 200 },
      { precio: 40, cantidad: 300 },
      { precio: 30, cantidad: 450 },
      { precio: 20, cantidad: 600 },
      { precio: 10, cantidad: 800 }
    ]
  },
  {
    titulo: 'Sustitutos: Café vs Té',
    bien: 'Té',
    escenario: 'Una sequía en Brasil aumenta el precio del café en un 50%',
    explicacion: 'Como café y té son sustitutos, al subir el precio del café, la demanda de té se desplaza a la derecha. Más consumidores optarán por té.',
    graficoData: [
      { precio: 5, cantidad: 100 },
      { precio: 4, cantidad: 180 },
      { precio: 3, cantidad: 280 },
      { precio: 2, cantidad: 400 },
      { precio: 1, cantidad: 550 }
    ]
  }
];

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

export const diferenciaMovimientoDesplazamiento = {
  titulo: 'Movimiento a lo largo vs Desplazamiento de la curva',
  
  movimiento: {
    nombre: 'Movimiento a lo largo de la curva',
    causa: 'Cambio en el precio del propio bien',
    efecto: 'Cambio en la cantidad demandada (no en la demanda)',
    direccion: 'Subida o bajada por la misma curva',
    ejemplo: 'El precio del pan sube de $2 a $3 → compramos menos pan'
  },
  
  desplazamiento: {
    nombre: 'Desplazamiento de la curva',
    causa: 'Cambio en factores distintos al precio (ingreso, gustos, precios relacionados)',
    efecto: 'Cambio en la demanda (toda la curva se mueve)',
    direccionDerecha: 'Aumento de demanda (más cantidad a cada precio)',
    direccionIzquierda: 'Disminución de demanda (menos cantidad a cada precio)',
    ejemplo: 'Aumento de ingreso → compramos más restaurantes a todos los precios'
  },
  
  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 demandada', desplazamiento: 'Cambio en demanda' },
    { concepto: 'Ejemplo', movimiento: 'Precio de manzanas ↓', desplazamiento: 'Ingreso ↑ (bien normal)' }
  ]
};

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

export const resumenDemanda = {
  titulo: 'Resumen: Demanda',
  
  puntosClave: [
    'La demanda requiere disposición Y capacidad de comprar',
    'La ley de la demanda establece relación inversa precio-cantidad',
    'La curva de demanda tiene pendiente negativa',
    'El desplazamiento de la curva es causado por factores no-precio',
    'Los bienes normales tienen demanda directa con el ingreso',
    'Los bienes inferiores tienen demanda inversa con el ingreso',
    'Sustitutos: precio de A ↑ → demanda de B ↑',
    'Complementarios: precio de A ↑ → demanda de B ↓'
  ],
  
  formulaRecordatorio: {
    leyDemanda: 'P ↑ → Qd ↓ (ceteris paribus)',
    demandaMercado: 'Qd_mercado = Σ Qd_individuales',
    elasticidadPrecio: 'Ed = (%ΔQd) / (%ΔP) < 0'
  }
};

// Exportación por defecto para facilitar importaciones
export default {
  definicion: definicionDemanda,
  ley: leyDemanda,
  factores: factoresDesplazamiento,
  tiposBienes: tiposBienesDemanda,
  bienesRelacionados,
  curvas: {
    individual: curvaDemandaIndividual,
    mercado: curvaDemandaMercado
  },
  ejemplos: ejemplosDemanda,
  diferencia: diferenciaMovimientoDesplazamiento,
  resumen: resumenDemanda
};
