export interface UpgradeDefinition {
  id: string;
  name: string;
  description: string;
  price: number;
  maxLevel: number;
  effects: UpgradeEffect[];
}

export interface UpgradeEffect {
  type: UpgradeEffectType;
  value: number; // Процент или абсолютное значение
  perLevel?: boolean; // Умножается на уровень апгрейда
}

export type UpgradeEffectType =
  | 'speed' // +% к скорости
  | 'jumpForce' // +% к силе прыжка
  | 'projectileCount' // +N снарядов
  | 'projectileCooldown' // -% к кулдауну
  | 'stunDuration' // +% к длительности оглушения
  | 'coinMagnet' // Радиус притяжения монет
  | 'doubleJump' // Разблокировка двойного прыжка
  | 'extraLife'; // +N жизней

export const UPGRADES: UpgradeDefinition[] = [
  {
    id: 'light_boots',
    name: 'Лёгкие ботинки',
    description: '+10% к скорости',
    price: 50,
    maxLevel: 3,
    effects: [{ type: 'speed', value: 10, perLevel: true }],
  },
  {
    id: 'spring_boots',
    name: 'Пружинные ботинки',
    description: '+15% к прыжку',
    price: 75,
    maxLevel: 3,
    effects: [{ type: 'jumpForce', value: 15, perLevel: true }],
  },
  {
    id: 'large_magazine',
    name: 'Большой магазин',
    description: '+1 снаряд',
    price: 100,
    maxLevel: 2,
    effects: [{ type: 'projectileCount', value: 1, perLevel: true }],
  },
  {
    id: 'fast_reload',
    name: 'Быстрая перезарядка',
    description: '-20% к кулдауну снарядов',
    price: 80,
    maxLevel: 3,
    effects: [{ type: 'projectileCooldown', value: 20, perLevel: true }],
  },
  {
    id: 'strong_stun',
    name: 'Сильное оглушение',
    description: '+1 сек к оглушению врагов',
    price: 60,
    maxLevel: 2,
    effects: [{ type: 'stunDuration', value: 1000, perLevel: true }],
  },
  {
    id: 'coin_magnet',
    name: 'Магнит',
    description: 'Притягивает монеты',
    price: 120,
    maxLevel: 1,
    effects: [{ type: 'coinMagnet', value: 100 }],
  },
  {
    id: 'double_jump',
    name: 'Двойной прыжок',
    description: 'Прыжок в воздухе',
    price: 200,
    maxLevel: 1,
    effects: [{ type: 'doubleJump', value: 1 }],
  },
];

// Получить апгрейд по ID
export function getUpgradeById(id: string): UpgradeDefinition | undefined {
  return UPGRADES.find((u) => u.id === id);
}

// Рассчитать цену следующего уровня
export function getUpgradePrice(id: string, currentLevel: number): number {
  const upgrade = getUpgradeById(id);
  if (!upgrade) return Infinity;
  if (currentLevel >= upgrade.maxLevel) return Infinity;
  // Цена растёт с каждым уровнем
  return Math.floor(upgrade.price * Math.pow(1.5, currentLevel));
}
