package heroic_ops

// Heroic Opportunity Constants
const (
	// Maximum number of abilities in a starter chain or wheel
	MaxAbilities = 6

	// Special ability icon values
	AbilityIconAny  = 0xFFFF // Wildcard - any ability can be used
	AbilityIconNone = 0      // No ability required

	// Default wheel timer (in seconds)
	DefaultWheelTimerSeconds = 10

	// HO Types in database
	HOTypeStarter = "Starter"
	HOTypeWheel   = "Wheel"

	// Wheel order types
	WheelOrderUnordered = 0 // Abilities can be completed in any order
	WheelOrderOrdered   = 1 // Abilities must be completed in sequence

	// HO States
	HOStateInactive = iota
	HOStateStarterChain
	HOStateWheelPhase
	HOStateComplete
	HOStateFailed

	// Maximum number of concurrent heroic opportunities per encounter
	MaxConcurrentHOs = 3

	// Chance calculation constants
	MinChance = 0.0
	MaxChance = 100.0

	// Timer constants (in milliseconds)
	WheelTimerCheckInterval = 100
	StarterChainTimeout     = 30000 // 30 seconds
	WheelPhaseTimeout       = 10000 // 10 seconds (configurable)

	// Special shift states
	ShiftNotUsed = 0
	ShiftUsed    = 1

	// HO completion status
	HONotComplete = 0
	HOComplete    = 1

	// Class restrictions (matches EQ2 class IDs)
	ClassAny = 0 // Any class can initiate

	// Packet constants
	PacketHeroicOpportunity = "WS_HeroicOpportunity"

	// Error messages
	ErrHONotFound          = "heroic opportunity not found"
	ErrHOInvalidState      = "heroic opportunity in invalid state"
	ErrHOAbilityNotAllowed = "ability not allowed for current heroic opportunity"
	ErrHOTimerExpired      = "heroic opportunity timer expired"
	ErrHOAlreadyComplete   = "heroic opportunity already complete"
	ErrHOShiftAlreadyUsed  = "wheel shift already used"
	ErrHOWheelNotFound     = "no wheel found for starter"

	// Database constants
	MaxHONameLength        = 255
	MaxHODescriptionLength = 1000
	MaxDatabaseRetries     = 3

	// Memory management
	DefaultHOPoolSize   = 100
	DefaultStarterCache = 500
	DefaultWheelCache   = 1000
	MaxHOHistoryEntries = 50
)

// Heroic Opportunity Event Types for logging and statistics
const (
	EventHOStarted = iota + 1
	EventHOCompleted
	EventHOFailed
	EventHOTimerExpired
	EventHOAbilityUsed
	EventHOWheelShifted
	EventHOStarterMatched
	EventHOStarterEliminated
	EventHOWheelSelected
	EventHOProgressMade
)

// Ability icon mappings for common abilities
var CommonAbilityIcons = map[string]int16{
	"melee":     1,
	"spell":     2,
	"divine":    3,
	"combat":    4,
	"heroic":    5,
	"elemental": 6,
}

// Default class names for debugging
var ClassNames = map[int8]string{
	0:  "Any",
	1:  "Fighter",
	2:  "Warrior",
	3:  "Guardian",
	4:  "Berserker",
	5:  "Brawler",
	6:  "Monk",
	7:  "Bruiser",
	8:  "Crusader",
	9:  "Paladin",
	10: "Shadow Knight",
	11: "Priest",
	12: "Cleric",
	13: "Templar",
	14: "Inquisitor",
	15: "Druid",
	16: "Warden",
	17: "Fury",
	18: "Shaman",
	19: "Mystic",
	20: "Defiler",
	21: "Mage",
	22: "Sorcerer",
	23: "Wizard",
	24: "Warlock",
	25: "Enchanter",
	26: "Illusionist",
	27: "Coercer",
	28: "Summoner",
	29: "Necromancer",
	30: "Conjuror",
	31: "Scout",
	32: "Rogue",
	33: "Swashbuckler",
	34: "Brigand",
	35: "Bard",
	36: "Troubador",
	37: "Dirge",
	38: "Predator",
	39: "Ranger",
	40: "Assassin",
}
