Skip to content
import { CARDS } from "./game.ts";
import type { ClassId } from "./heroes.ts";

export const PACK_COST = 35;
export const PACK_SIZE = 5;
export const MIN_DECK_SIZE = 10;
export const MAX_DECK_SIZE = 80;

export function baseCardId(id: string): string {
  return id.startsWith("+") ? id.slice(1) : id;
}

export function isCardForClass(id: string, klass: ClassId): boolean {
  const card = CARDS[baseCardId(id)];
  return Boolean(card && (card.klass === "any" || card.klass === klass));
}

export function cardCounts(cards: string[]): Record<string, number> {
  const counts: Record<string, number> = {};
  for (const id of cards) counts[id] = (counts[id] ?? 0) + 1;
  return counts;
}

function pick<T>(items: T[]): T {
  return items[Math.floor(Math.random() * items.length)];
}

export function openPack(klass: ClassId): string[] {
  const pool = Object.values(CARDS).filter((card) =>
    card.klass === "any" || card.klass === klass
  );
  const common = pool.filter((card) => !card.rare);
  const rare = pool.filter((card) => card.rare);
  return [
    ...Array.from({ length: PACK_SIZE - 1 }, () => pick(common).id),
    pick(rare).id,
  ];
}