package spells

// Spell target types
const (
	SpellTargetSelf         = 0
	SpellTargetEnemy        = 1
	SpellTargetGroupAE      = 2
	SpellTargetCasterPet    = 3
	SpellTargetEnemyPet     = 4
	SpellTargetEnemyCorpse  = 5
	SpellTargetGroupCorpse  = 6
	SpellTargetNone         = 7
	SpellTargetRaidAE       = 8
	SpellTargetOtherGroupAE = 9
)

// Spell book types
const (
	SpellBookTypeSpell      = 0
	SpellBookTypeCombatArt  = 1
	SpellBookTypeAbility    = 2
	SpellBookTypeTradeskill = 3
	SpellBookTypeNotShown   = 4
)

// Spell cast types
const (
	SpellCastTypeNormal = 0
	SpellCastTypeToggle = 1
)

// Spell error codes
const (
	SpellErrorNotEnoughKnowledge        = 1
	SpellErrorInterrupted               = 2
	SpellErrorTakeEffectMorePowerful    = 3
	SpellErrorTakeEffectSameSpell       = 4
	SpellErrorCannotCastDead            = 5
	SpellErrorNotAlive                  = 6
	SpellErrorNotDead                   = 7
	SpellErrorCannotCastSitting         = 8
	SpellErrorCannotCastUncon           = 9
	SpellErrorAlreadyCasting            = 10
	SpellErrorRecovering                = 11
	SpellErrorNonCombatOnly             = 12
	SpellErrorCannotCastStunned         = 13
	SpellErrorCannotCastStiffled        = 14
	SpellErrorCannotCastCharmed         = 15
	SpellErrorNotWhileMounted           = 16
	SpellErrorNotWhileFlying            = 17
	SpellErrorNotWhileClimbing          = 18
	SpellErrorNotReady                  = 19
	SpellErrorCantSeeTarget             = 20
	SpellErrorIncorrectStance           = 21
	SpellErrorCannotCastFeignDeath      = 22
	SpellErrorInventoryFull             = 23
	SpellErrorNotEnoughCoin             = 24
	SpellErrorNotAllowedHere            = 25
	SpellErrorNotWhileCrafting          = 26
	SpellErrorOnlyWhenCrafting          = 27
	SpellErrorItemNotAttuned            = 28
	SpellErrorItemWornOut               = 29
	SpellErrorMustEquipWeapon           = 30
	SpellErrorWeaponBroken              = 31
	SpellErrorCannotCastFeared          = 32
	SpellErrorTargetImmuneHostile       = 33
	SpellErrorTargetImmuneBeneficial    = 34
	SpellErrorNoTauntSpells             = 35
	SpellErrorCannotUseInBattlegrounds  = 36
	SpellErrorCannotPrepare             = 37
	SpellErrorNoEligibleTarget          = 38
	SpellErrorNoTargetsInRange          = 39
	SpellErrorTooClose                  = 40
	SpellErrorTooFarAway                = 41
	SpellErrorTargetTooWeak             = 42
	SpellErrorTargetTooPowerful         = 43
	SpellErrorTargetNotPlayer           = 44
	SpellErrorTargetNotNPC              = 45
	SpellErrorTargetNotOwner            = 46
	SpellErrorTargetNotGrouped          = 47
	SpellErrorCannotCastInCombat        = 48
	SpellErrorCannotCastOutOfCombat     = 49
	SpellErrorTargetNotCorrectType      = 50
	SpellErrorTargetNotCorrectClass     = 51
	SpellErrorTargetNotCorrectRace      = 52
	SpellErrorNoCaster                  = 53
	SpellErrorCannotCastOnCorpse        = 54
	SpellErrorCannotCastOnGuild         = 55
	SpellErrorCannotCastOnRaid          = 56
	SpellErrorCannotCastOnGroup         = 57
	SpellErrorCannotCastOnSelf          = 58
	SpellErrorTargetNotInGroup          = 59
	SpellErrorTargetNotInRaid           = 60
	SpellErrorCannotCastThatOnYourself  = 61
	SpellErrorAbilityUnavailable        = 62
	SpellErrorCannotPrepareWhileCasting = 63
	SpellErrorNoPowerRegaining          = 64
)

// Control effect types (moved from entity package)
const (
	ControlEffectStun = iota
	ControlEffectRoot
	ControlEffectMez
	ControlEffectDaze
	ControlEffectFear
	ControlEffectSlow
	ControlEffectSnare
	ControlEffectCharm
)

const (
	ControlMaxEffects = 8 // Maximum number of control effect types
)

// GivenByType represents how a spell was acquired
type GivenByType int8

const (
	GivenByUnset           GivenByType = 0
	GivenByTradeskillClass GivenByType = 1
	GivenBySpellScroll     GivenByType = 2
	GivenByAltAdvancement  GivenByType = 3
	GivenByRace            GivenByType = 4
	GivenByRacialInnate    GivenByType = 5
	GivenByRacialTradition GivenByType = 6
	GivenByClass           GivenByType = 7
	GivenByCharacterTrait  GivenByType = 8
	GivenByFocusAbility    GivenByType = 9
	GivenByClassTraining   GivenByType = 10
	GivenByWarderSpell     GivenByType = 11
)

// Spell component types for LUA data
const (
	SpellLUADataTypeInt    = 0
	SpellLUADataTypeFloat  = 1
	SpellLUADataTypeBool   = 2
	SpellLUADataTypeString = 3
)
