--------------------------------------------------------------------------------
-- Module Declaration
--

local mod = BigWigs:NewBoss("Conclave of Wind", "Throne of the Four Winds")
if not mod then return end
mod:RegisterEnableMob(45870, 45871, 45872) -- Anshal, Nezir, Rohash

--------------------------------------------------------------------------------
-- Locals
--

local firstWindBlast = true
local toxicSporesWarned = false
local stormShield, nurture, windBlast, toxicSpores = GetSpellInfo(95865), GetSpellInfo(85422), GetSpellInfo(86193), GetSpellInfo(86281)

--------------------------------------------------------------------------------
-- Localization
--

local L = mod:NewLocale("enUS", true)
if L then
	L.gather_strength = "%s is Gathering Strength"

	L.storm_shield = stormShield
	L.storm_shield_desc = "Absorption Shield"

	L.full_power = "Full Power"
	L.full_power_desc = "Warning for when the bosses reach full power and start to cast the special abilities."
	L.gather_strength_emote = "%s begins to gather strength from the remaining Wind Lords!"

	L.wind_chill = "%sx Wind Chill on YOU!"
end
L = mod:GetLocale()

--------------------------------------------------------------------------------
-- Initialization
--

function mod:GetOptions()
	return {
		86193, "storm_shield",
		{84645, "FLASHSHAKE"},
		85422, 86281,
		86307, "full_power", "berserk", "bosskill"
	}, {
		[86193] = "Rohash",
		[84645] = "Nezir",
		[85422] = "Anshal",
		[86307] = "general",
	}
end

function mod:OnBossEnable()

--[[ Lets leave these in for now in case on heroic they don't gain power at the same rate
	self:Log("SPELL_CAST_SUCCESS", "Zephyr", 84638)
	self:Log("SPELL_AURA_APPLIED", "SleetStorm", 84644)
]]--

--	self:Log("SPELL_CAST_SUCCESS", "FullPower", 86193)
	self:Log("SPELL_CAST_SUCCESS", "FullPower", 84638)
--	self:Log("SPELL_AURA_APPLIED", "FullPower", 84644)

	self:Emote("GatherStrength", L["gather_strength_emote"])

	self:Log("SPELL_AURA_APPLIED", "StormShield", 95865, 93059)
	self:Log("SPELL_CAST_SUCCESS", "WindBlast", 86193)

	self:Log("SPELL_AURA_APPLIED_DOSE", "WindChill", 84645)

	self:Log("SPELL_CAST_SUCCESS", "Nurture", 85422)
	self:Log("SPELL_AURA_APPLIED", "ToxicSpores", 86281)

	self:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT", "CheckBossStatus")

	self:Death("Win", 45872) -- They die at the same time, enough to check for one
end


function mod:OnEngage(diff)
	self:Berserk(480)
	firstWindBlast = true
	toxicSporesWarned = false
	self:Bar("full_power", L["full_power"], 90, 86193)
	self:Bar(85422, nurture, 30, 85422)
	self:Bar(86193, windBlast, 30, 86193)
	self:Bar("storm_shield", stormShield, 30, 95865)
end

--------------------------------------------------------------------------------
-- Event Handlers
--
function mod:FullPower(_, spellId)
	-- this is actually based on the power bar of the boss so might need to use that to adjust timer
	self:Bar("full_power", L["full_power"], 113, spellId)
	self:Message("full_power", L["full_power"], "Attention", spellId)
end

function mod:WindChill(player, spellId, _, _, _, stack)
	if UnitIsUnit(player, "player") then
	-- probably need to adjust stack numbers
		if stack == 4 then
			self:LocalMessage(84645, L["wind_chill"]:format(stack), "Personal", spellId)
		elseif stack == 8 then
			self:LocalMessage(84645, L["wind_chill"]:format(stack), "Personal", spellId, "Alarm")
			self:FlashShake(84645)
		end
	end
end

--[[ Lets leave these in for now in case on heroic they don't gain power at the same rate
function mod:SleetStorm(_, spellId, _, _, spellName)
	-- this is actually based on the power bar of the boss so might need to use that to adjust timer
	self:Bar(84644, spellName, 113, spellId)
	self:Message(84644, spellName, "Attention", spellId) -- Might need sound
end

function mod:Zephyr(_, spellId, _, _, spellName)
-- this is actually based on the power bar of the boss so might need to use that to adjust timer
	self:Bar(84638, spellName, 113, spellId)
	self:Message(84638, spellName, "Attention", spellId)
end
]]--

function mod:StormShield(_, spellId, _, _, spellName)
	self:Bar("storm_shield", spellName, 113, spellId)
	self:Message("storm_shield", spellName, "Urgent", spellId)
end

function mod:WindBlast(_, spellId, _, _, spellName)
	if firstWindBlast then
		self:Bar(86193, spellName, 82, spellId)
		self:Message(86193, spellName, "Important", spellId)
		firstWindBlast = false
	else
		self:Bar(86193, spellName, 60, spellId)
		self:Message(86193, spellName, "Important", spellId)
	end
end

function mod:ToxicSpores(_, spellId, _, _, spellName)
	if not toxicSporesWarned then
		self:Bar(86281, spellName, 20, spellId)
		self:Message(86281, spellName, "Urgent", spellId)
		toxicSporesWarned = true
	end
end

function mod:Nurture(_, spellId, _, _, spellName)
	self:Bar(85422, spellName, 113, spellId)
	self:Message(85422, spellName, "Urgent", spellId)
	self:Bar(86281, toxicSpores, 23, 86281)
	toxicSporesWarned = false
end

function mod:GatherStrength(msg, sender)
	self:Message(86307, L["gather_strength"]:format(sender), "Important", 86307, "Long")
	self:Bar(86307, L["gather_strength"]:format(sender), 60, 86307)
end

