/// 무기 카테고리 (공격 스타일 결정용)
enum WeaponCategory {
  /// 둔기류 - 휘두르기/타격
  /// Keyboard, Mouse, Monitor Stand, Server Rack 등
  blunt,

  /// 케이블류 - 채찍질
  /// USB Cable, Ethernet Cord, Fiber Optic 등
  cable,

  /// 칩류 - 투척/발사
  /// SSD, RAM Stick, GPU 등
  projectile,

  /// 프로세서류 - 에너지 빔
  /// Tensor Core, TPU, Neural Processor 등
  energy,

  /// 우주급 - 초월적 공격
  /// Dyson Sphere, Black Hole Computer, Universe Simulator
  cosmic,

  /// 기본 (무기 없음)
  unarmed,
}

/// 무기 이름에서 카테고리를 결정
///
/// 무기 이름의 키워드를 분석하여 공격 스타일 결정.
/// 예: "Flaming USB Cable" → cable
WeaponCategory getWeaponCategory(String? weaponName) {
  if (weaponName == null || weaponName.isEmpty) {
    return WeaponCategory.unarmed;
  }

  final lower = weaponName.toLowerCase();

  // 우주급 (가장 먼저 체크 - 가장 특별함)
  if (_matchesAny(lower, _cosmicKeywords)) {
    return WeaponCategory.cosmic;
  }

  // 케이블류
  if (_matchesAny(lower, _cableKeywords)) {
    return WeaponCategory.cable;
  }

  // 에너지/프로세서류
  if (_matchesAny(lower, _energyKeywords)) {
    return WeaponCategory.energy;
  }

  // 칩/메모리류
  if (_matchesAny(lower, _projectileKeywords)) {
    return WeaponCategory.projectile;
  }

  // 나머지는 모두 둔기류
  return WeaponCategory.blunt;
}

bool _matchesAny(String text, List<String> keywords) {
  return keywords.any((kw) => text.contains(kw));
}

// 카테고리별 키워드 목록

const _cosmicKeywords = ['dyson', 'black hole', 'universe', 'singularity'];

const _cableKeywords = [
  'cable',
  'cord',
  'fiber',
  'optic',
  'submarine',
  'satellite',
  'link',
  'ethernet',
  'usb',
];

const _energyKeywords = [
  'tensor',
  'tpu',
  'fpga',
  'asic',
  'quantum',
  'photonic',
  'neural',
  'entangler',
  'processor',
  'core',
];

const _projectileKeywords = [
  'ssd',
  'nvme',
  'raid',
  'ram',
  'gpu',
  'drive',
  'stick',
  'array',
];
