local mod	= DBM:NewMod(114, "DBM-Party-Cataclysm", 8, 68)
local L		= mod:GetLocalizedStrings()

if not mod:IsCata() then
	mod.statTypes = "normal,heroic,challenge,timewalker"
	mod.upgradedMPlus = true
else
	mod.statTypes = "normal,heroic"
end

mod:SetRevision("20240615053330")
mod:SetCreatureID(43878)
mod:SetEncounterID(1043)
mod:SetHotfixNoticeRev(20230427000000)
--mod:SetMinSyncRevision(20230226000000)
mod.sendMainBossGUID = true

mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
	"SPELL_CAST_START 86340 413151",
	"SPELL_AURA_APPLIED 86292"
)

--[[
(ability.id = 86340 or ability.id = 413151) and type = "begincast"
 or (ability.id = 86295 or ability.id = 86310) and (type = "applybuff" or type = "removebuff")
 or type = "dungeonencounterstart" or type = "dungeonencounterend"
 or ability.id = 413562 and type = "begincast"
--]]
--TODO, Cyclone Shield Fragments do something with it? maybe upgrade shield to watch your step alert?
local warnShield			= mod:NewCountAnnounce(86267, 2)
local warnShieldEnd			= mod:NewEndAnnounce(86267, 1)
local warnSummonTempest		= mod:NewCountAnnounce(86340, 2)
local warnLethalCurrent		= mod:NewCastAnnounce(413151, 4)

local specWarnGTFO			= mod:NewSpecialWarningGTFO(86292, nil, nil, nil, 1, 8)

local timerSummonTempest	= mod:NewCDCountTimer(16.8, 86340, nil, nil, nil, 1)--16.8 old
local timerShield			= mod:NewNextCountTimer(30.5, 86292, nil, nil, nil, 6)

mod.vb.shieldCount = 0
mod.vb.tempestCount = 0

function mod:OnCombatStart(delay)
	self.vb.shieldCount = 0
	self.vb.tempestCount = 0
	if not self:IsMythicPlus() then--Summoned instantly on M+
		timerSummonTempest:Start(16.8-delay)
		timerShield:Start(23.3-delay, 1)
		DBM:AddMsg("the non M+ version of these may be incorrect until confirmed/redone to match M+")
		self:RegisterShortTermEvents(
			"RAID_BOSS_EMOTE"
		)
	else
		timerShield:Start(30-delay, 1)
		self:RegisterShortTermEvents(
			"SPELL_AURA_REMOVED 86295 86310"
		)
	end
end

function mod:OnCombatEnd()
	self:UnregisterShortTermEvents()
end

function mod:SPELL_CAST_START(args)
	if args.spellId == 86340 or args.spellId == 413151 then
		self.vb.tempestCount = self.vb.tempestCount + 1
		warnSummonTempest:Show(self.vb.tempestCount)
		timerSummonTempest:Start(self:IsMythicPlus() and 39.6 or 16.8, self.vb.tempestCount+1)--39.6-41
	elseif args.spellId == 413151 and self:AntiSpam(3, 1) then
		warnLethalCurrent:Show()
	end
end

function mod:SPELL_AURA_APPLIED(args)
	if args.spellId == 86292 and args:IsPlayer() and self:AntiSpam(3, 2) then
		specWarnGTFO:Show(args.spellName)
		specWarnGTFO:Play("watchfeet")
	end
end

function mod:SPELL_AURA_REMOVED(args)
	if args.spellId == 86295 then
		self.vb.shieldCount = self.vb.shieldCount + 1
		warnShield:Show(self.vb.shieldCount)
		timerShield:Stop()
		timerShield:Start(40, self.vb.shieldCount+1)--Restart used purely to avoid a bug where when boss is killed it fires debug
	elseif args.spellId == 86310 then
		warnShieldEnd:Show()
	end
end

--Probably still needed for classic cataclysm, and maybe even non M+
function mod:RAID_BOSS_EMOTE(msg)
	if msg == L.Retract or msg:find(L.Retract) then
		self.vb.shieldCount = self.vb.shieldCount + 1
		warnShield:Show(self.vb.shieldCount)
		timerShield:Start(30.5, self.vb.shieldCount+1)
	end
end
