local mod	= DBM:NewMod(2404, "DBM-Party-Shadowlands", 2, 1183)
local L		= mod:GetLocalizedStrings()

mod:SetRevision("20240629024545")
mod:SetCreatureID(164267)
mod:SetEncounterID(2386)

mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
--	"SPELL_AURA_APPLIED",
	"SPELL_CAST_START 322236 322232 322475",
	"SPELL_CAST_SUCCESS 322304",
--	"SPELL_PERIODIC_DAMAGE",
--	"SPELL_PERIODIC_MISSED",
	"UNIT_DIED",
	"UNIT_SPELLCAST_SUCCEEDED boss1 boss2 boss3 boss4 boss5"--Register all in case boss leaving coming back changes order with the spawns
)

--TODO, https://shadowlands.wowhead.com/spell=322490/plague-rot is passive, does it need an infoframe?
--TODO, figure out plague crash timer when there is a lot more time. there just isn't right now. More transcriptor logs from shittier groups would help too. WCL is USELESS for this fight
--[[
(ability.id = 322236 or ability.id = 322475 or ability.id = 322232) and type = "begincast"
 or ability.id = 322304 and type = "cast"
--]]
--local warnPlagueCrash				= mod:NewCountAnnounce(322473, 4)--Announces each cast of the sequence in regular warning

local specWarnMalignantGrowth		= mod:NewSpecialWarningSwitch(322304, "-Healer", nil, nil, 1, 7)
local specWarnTouchofSlime			= mod:NewSpecialWarningSoak(322236, "Tank", nil, nil, 1, 7)
local specWarnPlagueCrash			= mod:NewSpecialWarningDodge(322473, nil, nil, nil, 2, 2)--Announces beginning of sequence in special warning
--local specWarnGTFO				= mod:NewSpecialWarningGTFO(257274, nil, nil, nil, 1, 8)

local timerMalignantGrowthCD		= mod:NewCDTimer(20.6, 322304, nil, nil, nil, 1, nil, DBM_COMMON_L.TANK_ICON .. DBM_COMMON_L.DAMAGE_ICON)
local timerInfectiousRainCD			= mod:NewCDTimer(26.7, 322232, nil, nil, nil, 3)
--local timerPlagueCrashCD			= mod:NewCDTimer(17, 322475, nil, nil, nil, 3)
local timerSinkPhase				= mod:NewStageTimer(27)
--Tentacle Add
local timerTouchofSlimeCD			= mod:NewCDTimer(6, 322236, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)

--mod.vb.crashCount = 0
mod.vb.sinkPhase = false
mod.vb.sinkPhaseCount = 0

function mod:OnCombatStart(delay)
--	self.vb.crashCount = 0
	self.vb.sinkPhase = false
	self.vb.sinkPhaseCount = 0
	timerMalignantGrowthCD:Start(5.6-delay)
	timerInfectiousRainCD:Start(15.3-delay)
--	if self:IsMythic() then
--		timerPlagueCrashCD:Start(14.4)
--	end
end

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

function mod:OnTimerRecovery()
	if self.vb.sinkPhase then
		self:RegisterShortTermEvents(
			"UNIT_TARGETABLE_CHANGED boss1 boss2 boss3 boss4 boss5"
		)
	end
end

function mod:SPELL_CAST_START(args)
	local spellId = args.spellId
	if spellId == 322236 then
		specWarnTouchofSlime:Show()
		specWarnTouchofSlime:Play("helpsoak")
		timerTouchofSlimeCD:Start(6, args.sourceGUID)
	elseif spellId == 322232 then
		timerInfectiousRainCD:Start()
--	elseif spellId == 322475 and self:AntiSpam(5, 1) then
--		self.vb.crashCount = self.vb.crashCount + 1
--		warnPlagueCrash:Show(self.vb.crashCount)
	end
end

function mod:SPELL_CAST_SUCCESS(args)
	local spellId = args.spellId
	if spellId == 322304 then
		specWarnMalignantGrowth:Show()
		specWarnMalignantGrowth:Play("killmob")
		timerMalignantGrowthCD:Start()
		timerTouchofSlimeCD:Start(6)
		--if self:IsMythic() then
			--TODO, plague crash castbar?
		--end
	end
end

function mod:UNIT_DIED(args)
	local cid = self:GetCIDFromGUID(args.destGUID)
	if cid == 165430 then--Malignant MalignantGrowth
		timerTouchofSlimeCD:Stop(args.destGUID)
	end
end

function mod:UNIT_SPELLCAST_SUCCEEDED(uId, _, spellId)
	if spellId == 322477 then--Start Plague Crash Phase
		self.vb.sinkPhase = true
		self.vb.sinkPhaseCount = self.vb.sinkPhaseCount + 1
		timerMalignantGrowthCD:Stop()
		timerInfectiousRainCD:Stop()
		timerSinkPhase:Start(27)
		self:RegisterShortTermEvents(
			"UNIT_TARGETABLE_CHANGED boss1 boss2 boss3 boss4 boss5"
		)
	elseif (spellId == 333941 or spellId == 322473) and not self.vb.sinkPhase then--Plague Crash
		specWarnPlagueCrash:Show()
		specWarnPlagueCrash:Play("watchstep")
	end
end

function mod:UNIT_TARGETABLE_CHANGED(uId)
	local cid = self:GetUnitCreatureId(uId)
	if cid == 164267 and UnitCanAttack("player", uId) then
		self:UnregisterShortTermEvents()
		self.vb.sinkPhase = false
		if self.vb.sinkPhaseCount == 1 then
			timerMalignantGrowthCD:Start(5.6)
		end
		timerInfectiousRainCD:Start(15.3)
	end
end
