import { type CombatantActor, type Stats } from "../core/types";

export class ProgressionManager {
  allocateStat(player: CombatantActor, statName: string) {
    if (!player.stats || player.stats.statPoints <= 0) return;

    player.stats.statPoints--;
    if (statName === "strength") {
      player.stats.strength++;
      player.stats.maxHp += 2;
      player.stats.hp += 2;
      player.stats.attack += 0.2;
    } else if (statName === "dexterity") {
      player.stats.dexterity++;
      player.speed += 1;
    } else if (statName === "intelligence") {
      player.stats.intelligence++;
      if (player.stats.intelligence % 5 === 0) {
        player.stats.defense++;
      }
    }
  }

  allocatePassive(player: CombatantActor, nodeId: string) {
    if (!player.stats || player.stats.skillPoints <= 0) return;
    if (player.stats.passiveNodes.includes(nodeId)) return;

    player.stats.skillPoints--;
    player.stats.passiveNodes.push(nodeId);

    // Apply bonuses
    switch (nodeId) {
      case "off_1":
        player.stats.attack += 2;
        break;
      case "off_2":
        player.stats.attack += 4;
        break;
      case "def_1":
        player.stats.maxHp += 10;
        player.stats.hp += 10;
        break;
      case "def_2":
        player.stats.defense += 2;
        break;
      case "util_1":
        player.speed += 5;
        break;
      case "util_2":
        player.stats.expToNextLevel = Math.floor(player.stats.expToNextLevel * 0.9);
        break;
    }
  }

  calculateStats(baseStats: Stats): Stats {
    return baseStats;
  }
}

