local mod	= DBM:NewMod("Akmahat", "DBM-Party-Cataclysm", 15)
local L		= mod:GetLocalizedStrings()

mod.statTypes = "normal,timewalker"

mod:SetRevision("20220116042005")
mod:SetCreatureID(50063)
mod:SetModelID(34573)
mod:EnableWBEngageSync()--Enable syncing engage in outdoors

mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
	"SPELL_CAST_START 93561 94946 94968",
	"SPELL_AURA_APPLIED 93561 93578",
	"SPELL_AURA_REMOVED 93561 93578"
)

local warnShockwave			= mod:NewSpellAnnounce(94968, 2, nil, "Tank|Healer")
local warnSandsofTime		= mod:NewTargetNoFilterAnnounce(93578, 2)

local specWarnFuryofSands	= mod:NewSpecialWarningDodge(94946, nil, nil, nil, 2, 2)
local specWarnMantle		= mod:NewSpecialWarningSpell(93561, nil, nil, nil, 1, 2)

local timerShockwaveCD		= mod:NewCDTimer(16, 94968, nil, nil, nil, 3)--Every 16 seconds shockwave and fury alternate unless mantle, is cast, then it's 18 seconds cause of the cast delay of mantle affecting both CDs
local timerFuryofSandsCD	= mod:NewCDTimer(16, 94946, nil, nil, nil, 3)
local timerSandsofTime		= mod:NewBuffFadesTimer(15, 93578, nil, "Healer", nil, 5, nil, DBM_COMMON_L.HEALER_ICON..DBM_COMMON_L.MAGIC_ICON)
local timerSandsofTimeCD	= mod:NewCDTimer(25, 93578, nil, nil, nil, 3, nil, DBM_COMMON_L.MAGIC_ICON)
local timerMantleCD			= mod:NewCDTimer(43, 93561, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)--42.8-46.5 variations. a CD timer will suffice of 43

local sandsTargets = {}
mod.vb.sandsDebuffs = 0

local function showSandsgWarning()
	warnSandsofTime:Show(table.concat(sandsTargets, "<, >"))
	table.wipe(sandsTargets)
end

function mod:OnCombatStart(delay)
	timerMantleCD:Start(23-delay)--Highly variable, i don't like it
	timerShockwaveCD:Start(-delay)
	timerFuryofSandsCD:Start(11-delay)
	self.vb.sandsDebuffs = 0
	table.wipe(sandsTargets)
end

function mod:SPELL_CAST_START(args)
	if args.spellId == 93561 then
		specWarnMantle:Show()
		specWarnMantle:Play("attackshield")
		timerMantleCD:Start()
	elseif args.spellId == 94946 then
		specWarnFuryofSands:Show()
		specWarnFuryofSands:Play("watchstep")
		timerFuryofSandsCD:Start()
	elseif args.spellId == 94968 then
		warnShockwave:Show()
		timerShockwaveCD:Start()
	end
end

function mod:SPELL_AURA_APPLIED(args)
	if args.spellId == 93561 then
		--Do infoframe things
	elseif args.spellId == 93578 then
		sandsTargets[#sandsTargets + 1] = args.destName
		self.vb.sandsDebuffs = self.vb.sandsDebuffs + 1
		timerSandsofTime:Start()
		timerSandsofTimeCD:Start()
		self:Unschedule(showSandsgWarning)
		self:Schedule(0.3, showSandsgWarning)
	end
end

function mod:SPELL_AURA_REMOVED(args)
	if args.spellId == 93561 then
		--End infoframe things
	elseif args.spellId == 93578 then
		self.vb.sandsDebuffs = self.vb.sandsDebuffs - 1
		if self.vb.sandsDebuffs == 0 then
			timerSandsofTime:Cancel()
		end
	end
end
