import 'package:asciineverdie/src/core/model/game_state.dart';

/// ASCII 애니메이션 타입 (TaskType과 매핑)
enum AsciiAnimationType {
  /// 전투 장면 (캐릭터 vs 몬스터)
  battle,

  /// 마을/상점 장면
  town,

  /// 걷는 캐릭터
  walking,

  /// 레벨업 축하
  levelUp,

  /// 퀘스트 완료
  questComplete,

  /// Act 완료 (플롯 진행)
  actComplete,

  /// 부활 (사망 후)
  resurrection,
}

// ============================================================================
// 특수 애니메이션 타이밍 상수
// ============================================================================

/// 특수 애니메이션 프레임 수
const specialAnimationFrameCounts = {
  AsciiAnimationType.levelUp: 5,
  AsciiAnimationType.questComplete: 4,
  AsciiAnimationType.actComplete: 4,
  AsciiAnimationType.resurrection: 5,
};

/// 특수 애니메이션 프레임 간격 (밀리초)
const specialAnimationFrameIntervals = {
  AsciiAnimationType.levelUp: 300,
  AsciiAnimationType.questComplete: 350,
  AsciiAnimationType.actComplete: 400,
  AsciiAnimationType.resurrection: 600,
};

/// 특수 애니메이션 총 지속 시간 (밀리초)
int getSpecialAnimationDuration(AsciiAnimationType type) {
  final frames = specialAnimationFrameCounts[type] ?? 1;
  final interval = specialAnimationFrameIntervals[type] ?? 200;
  return frames * interval;
}

/// TaskType을 AsciiAnimationType으로 변환
AsciiAnimationType taskTypeToAnimation(TaskType taskType) {
  return switch (taskType) {
    TaskType.kill => AsciiAnimationType.battle,
    TaskType.market ||
    TaskType.sell ||
    TaskType.buying => AsciiAnimationType.town,
    TaskType.neutral ||
    TaskType.load ||
    TaskType.plot => AsciiAnimationType.walking,
  };
}
