local mod	= DBM:NewMod("UldamanLegacyofTyrTrash", "DBM-Party-Dragonflight", 2)
local L		= mod:GetLocalizedStrings()

mod:SetRevision("20240808043723")
--mod:SetModelID(47785)
mod.isTrashMod = true
mod.isTrashModBossFightAllowed = true

mod:RegisterEvents(
	"SPELL_CAST_START 369811 382578 369674 369823 369675 369806 377732 369399 369335 369400 369365 369423 369411 381593 382696 377500 369409",
	"SPELL_CAST_SUCCESS 377738 369465 369328 377732 382696 369811",
	"SPELL_AURA_APPLIED 369365 369828 369823 369818 369400 369366 377500",
	"SPELL_AURA_APPLIED_DOSE 369828 377738 369419",
--	"SPELL_AURA_REMOVED 339525",
	"UNIT_DIED"
)

--TODO, check target scanning of chain lightning
--TODO, add throw rock even though it's spammy? maybe off by default?
--TODO, dispel warning for https://www.wowhead.com/spell=377510/stolen-time ?
--[[
(ability.id = 369811 or ability.id = 382578 or ability.id = 369674 or ability.id = 369823 or ability.id = 369675 or ability.id = 369806 or ability.id = 377732 or ability.id = 369399 or ability.id = 369335 or ability.id = 369400 or ability.id = 369365 or ability.id = 369423 or ability.id = 369411 or ability.id = 381593 or ability.id = 382696 or ability.id = 377500) and type = "begincast"
 or (ability.id = 377738 or ability.id = 369465 or ability.id = 369328) and type = "cast"
--]]
local warnBlessingofTyr						= mod:NewCastAnnounce(382578, 4, nil, nil, "Tank|Healer")
local warnChainLightning					= mod:NewCastAnnounce(369675, 3)
local warnChomp								= mod:NewStackAnnounce(369828, 2, nil, "Tank|Healer")
local warnAncientPower						= mod:NewStackAnnounce(377738, 2, nil, "Tank|Healer")
local warnVenomousFangs						= mod:NewStackAnnounce(369419, 2, nil, "Tank|Healer|RemovePoison")
local warnRecklessRage						= mod:NewCastAnnounce(369806, 3, nil, nil, "Tank|Healer|RemoveEnrage")
local warnCleave							= mod:NewCastAnnounce(369409, 3, nil, nil, "Tank|Healer")
local warnJaggedBite						= mod:NewCastAnnounce(377732, 3, nil, nil, "Tank|Healer")
local warnHailofStone						= mod:NewCastAnnounce(369465, 4, nil, nil, nil, nil, nil, 3)
local warnEarthenWard						= mod:NewCastAnnounce(369400, 3)
local warnPounce							= mod:NewCastAnnounce(369423, 3)
local warnSonicBurst						= mod:NewCastAnnounce(369411, 4)
local warnThunderousClap					= mod:NewCastAnnounce(381593, 3)
local warnBulwarkSlam						= mod:NewCastAnnounce(382696, 4, nil, nil, "Tank|Healer")
local warnHasten							= mod:NewCastAnnounce(377500, 3)

local specWarnBrutalSlam					= mod:NewSpecialWarningRun(369811, nil, nil, nil, 4, 2)
local specWarnFissuringSlam					= mod:NewSpecialWarningDodge(369335, nil, nil, nil, 2, 2)
local specWarnEarthquake					= mod:NewSpecialWarningSpell(369328, nil, nil, nil, 2, 2)
--local specWarnChainLitYou					= mod:NewSpecialWarningMoveAway(369675, nil, nil, nil, 1, 2)
local yellTrappedInStone					= mod:NewYell(369366)
local specWarnCurseofStone					= mod:NewSpecialWarningDispel(369365, "RemoveCurse", nil, nil, 1, 2)
local specWarnTrappedinStone				= mod:NewSpecialWarningDispel(369366, "RemoveCurse", nil, nil, 1, 2)
local specWarnDiseasedbite					= mod:NewSpecialWarningDispel(369818, "RemoveDisease", nil, nil, 1, 2)
local specWarnSpikedCarapaceDispel			= mod:NewSpecialWarningDispel(369823, "MagicDispeller", nil, nil, 1, 2)
local specWarnEarthenWard					= mod:NewSpecialWarningDispel(369400, "MagicDispeller", nil, nil, 1, 2)
local specWarnHastenDispel					= mod:NewSpecialWarningDispel(377500, "MagicDispeller", nil, nil, 1, 2)
local specWarnChainLightning				= mod:NewSpecialWarningInterrupt(369675, "HasInterrupt", nil, nil, 1, 2)
local specWarnStoneSpike					= mod:NewSpecialWarningInterrupt(369674, "HasInterrupt", nil, nil, 1, 2)
local specWarnSpikedCarapace				= mod:NewSpecialWarningInterrupt(369823, "HasInterrupt", nil, nil, 1, 2)
local specWarnStoneBolt						= mod:NewSpecialWarningInterrupt(369399, "HasInterrupt", nil, nil, 1, 2)
local specWarnCurseofStoneKick				= mod:NewSpecialWarningInterrupt(369365, "HasInterrupt", nil, nil, 1, 2)
local specWarnSonicBurst					= mod:NewSpecialWarningInterrupt(369411, "HasInterrupt", nil, nil, 1, 2)
local specWarnHasten						= mod:NewSpecialWarningInterrupt(377500, "HasInterrupt", nil, nil, 1, 2)

local timerBrutalSlamCD						= mod:NewCDNPTimer(20.1, 369811, nil, nil, nil, 3)
local timerSpikedCarapaceCD					= mod:NewCDNPTimer(18.2, 369823, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerStoneSpikeCD						= mod:NewCDNPTimer(6, 369674, nil, false, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--Short CD, may interfere with Chain LIghting CD timer, opt in
local timerChainLightningCD					= mod:NewCDNPTimer(25.5, 369675, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerJaggedBiteCD						= mod:NewCDNPTimer(11.8, 377732, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerAncientPowerCD					= mod:NewCDNPTimer(6, 377738, nil, nil, nil, 5)
local timerHailofStoneCD					= mod:NewCDNPTimer(21.8, 369465, nil, nil, nil, 5)
local timerStoneBoltCD						= mod:NewCDNPTimer(7.2, 369399, nil, false, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--7-11, off by default to giev prio to Hail of stone
local timerEarthquakeCD						= mod:NewCDNPTimer(25.4, 369328, nil, nil, nil, 2)
local timerFissuringSlamCD					= mod:NewCDNPTimer(9.7, 369335, nil, nil, nil, 2)--9.7-15
local timerCleaveCD							= mod:NewCDNPTimer(15, 369409, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerPounceCD							= mod:NewCDNPTimer(15, 369423, nil, nil, nil, 3)
local timerThunderousClapCD					= mod:NewCDNPTimer(19, 381593, nil, nil, nil, 2)
local timerBulwarkSlamCD					= mod:NewCDNPTimer(10.6, 382696, nil, nil, nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerHastenCD							= mod:NewCDNPTimer(23, 377500, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)

--local playerName = UnitName("player")

--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 misc, 7 off interrupt, 8 off dodge (can't be interrupted/CCed and too spammy to be special warning)

--[[
function mod:LitTarget(targetname)
	if not targetname then return end
	if targetname == UnitName("player") then
		specWarnChainLitYou:Show()
		specWarnChainLitYou:Play("runout")
		yellChainLit:Yell()
	end
end
--]]

function mod:SPELL_CAST_START(args)
	local spellId = args.spellId
	if not self:IsValidWarning(args.sourceGUID) then return end
	if spellId == 369811 then
		if self:AntiSpam(3, 1) then
			specWarnBrutalSlam:Show()
			specWarnBrutalSlam:Play("justrun")
		end
	elseif spellId == 381593 then
		timerThunderousClapCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 8) then
			warnThunderousClap:Show()
		end
	elseif spellId == 382578 and self:AntiSpam(3, 5) then
		warnBlessingofTyr:Show()
	elseif spellId == 369674 then
		timerStoneSpikeCD:Start(nil, args.sourceGUID)
		if self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnStoneSpike:Show(args.sourceName)
			specWarnStoneSpike:Play("kickcast")
		end
	elseif spellId == 369399 then
		timerStoneBoltCD:Start(nil, args.sourceGUID)
		if self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnStoneBolt:Show(args.sourceName)
			specWarnStoneBolt:Play("kickcast")
		end
	elseif spellId == 369823 then
		timerSpikedCarapaceCD:Start(nil, args.sourceGUID)
		if self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnSpikedCarapace:Show(args.sourceName)
			specWarnSpikedCarapace:Play("kickcast")
		end
	elseif spellId == 369675 and args:GetSrcCreatureID() == 184022 then--184022 is trash version of mob (186658 is boss version)FUCK
--		self:ScheduleMethod(0.2, "BossTargetScanner", args.sourceGUID, "LitTarget", 0.1, 8, true)
		timerChainLightningCD:Start(nil, args.sourceGUID)
		if self.Options.SpecWarn369675interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnChainLightning:Show(args.sourceName)
			specWarnChainLightning:Play("kickcast")
		elseif self:AntiSpam(3, 7) then
			warnChainLightning:Show()
		end
	elseif spellId == 369806 and self:AntiSpam(3, 5) then
		warnRecklessRage:Show()
	elseif spellId == 377732 then
		if self:AntiSpam(3, 5) then
			warnJaggedBite:Show()
		end
	elseif spellId == 369409 then
		timerCleaveCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 5) then
			warnCleave:Show()
		end
	elseif spellId == 369335 then
		if timerEarthquakeCD:GetRemaining(args.sourceGUID) < 10 then
			timerFissuringSlamCD:Start(15.7, args.sourceGUID)
		else
			timerFissuringSlamCD:Start(9.7, args.sourceGUID)
		end
		if self:AntiSpam(3, 2) then
			specWarnFissuringSlam:Show()
			specWarnFissuringSlam:Play("watchstep")
		end
	elseif spellId == 369400 and self:AntiSpam(3, 6) then
		warnEarthenWard:Show()
	elseif spellId == 369365 then
		if self.Options.SpecWarn369365interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnCurseofStoneKick:Show(args.sourceName)
			specWarnCurseofStoneKick:Play("kickcast")
--		elseif self:AntiSpam(3, 7) then
--			warnChainLightning:Show()
		end
	elseif spellId == 369423 then
		timerPounceCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 6) then
			warnPounce:Show()
		end
	elseif spellId == 369411 then
		if self.Options.SpecWarn369411interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnSonicBurst:Show(args.sourceName)
			specWarnSonicBurst:Play("kickcast")
		elseif self:AntiSpam(3, 7) then
			warnSonicBurst:Show()
		end
	elseif spellId == 382696 then
		if self:AntiSpam(3, 5) then
			warnBulwarkSlam:Show()
		end
	elseif spellId == 377500 then
		timerHastenCD:Start(nil, args.sourceGUID)
		if self.Options.SpecWarn377500interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnHasten:Show(args.sourceName)
			specWarnHasten:Play("kickcast")
		elseif self:AntiSpam(3, 7) then
			warnHasten:Show()
		end
	end
end

function mod:SPELL_CAST_SUCCESS(args)
	local spellId = args.spellId
	if not self:IsValidWarning(args.sourceGUID) then return end
	if spellId == 377738 then
		timerAncientPowerCD:Start(nil, args.sourceGUID)
	elseif spellId == 369465 then
		timerHailofStoneCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 6) then
			warnHailofStone:Show()
			warnHailofStone:Play("crowdcontrol")
		end
	elseif spellId == 369328 then
		timerEarthquakeCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 4) then
			specWarnEarthquake:Show()
			specWarnEarthquake:Play("aesoon")
		end
	elseif spellId == 377732 then
		timerJaggedBiteCD:Start(nil, args.sourceGUID)
	elseif spellId == 382696 then
		timerBulwarkSlamCD:Start(nil, args.sourceGUID)
	elseif spellId == 369811 then
		timerBrutalSlamCD:Start(18.1, args.sourceGUID)--20.1 - 2
	end
end

function mod:SPELL_AURA_APPLIED(args)
	if not self.Options.Enabled then return end
	local spellId = args.spellId
	if spellId == 369365 and args:IsDestTypePlayer() and self:CheckDispelFilter("curse") and self:AntiSpam(3, 3) then
		specWarnCurseofStone:Show(args.destName)
		specWarnCurseofStone:Play("helpdispel")
	elseif spellId == 369828 then
		local amount = args.amount or 1
		if self:AntiSpam(3, 5) then
			warnChomp:Show(args.destName, amount)
		end
	elseif spellId == 377738 then
		local amount = args.amount or 1
		if amount >= 3 and self:AntiSpam(3, 5) then
			warnAncientPower:Show(args.destName, amount)
		end
	elseif spellId == 369823 and not args:IsDestTypePlayer() and self:AntiSpam(3, 3) then
		specWarnSpikedCarapaceDispel:Show(args.destName)
		specWarnSpikedCarapaceDispel:Play("helpdispel")
	elseif spellId == 369818 and self:CheckDispelFilter("disease") and args:IsDestTypePlayer() and self:AntiSpam(3, 3) then
		specWarnDiseasedbite:Show(args.destName)
		specWarnDiseasedbite:Play("helpdispel")
	elseif spellId == 369400 and not args:IsDestTypePlayer() and self:AntiSpam(3, 3) then
		specWarnEarthenWard:Show(args.destName)
		specWarnEarthenWard:Play("helpdispel")
	elseif spellId == 369366 then
		if self:CheckDispelFilter("curse") and self:AntiSpam(3, 3) then
			specWarnTrappedinStone:Show(args.destName)
			specWarnTrappedinStone:Play("helpdispel")
		end
		if args:IsPlayer() then
			yellTrappedInStone:Yell()
		end
	elseif spellId == 369419 then
		local amount = args.amount or 1
		if amount >= 3 and self:AntiSpam(3, 5) then
			warnVenomousFangs:Show(args.destName, amount)
		end
	elseif spellId == 377500 and not args:IsDestTypePlayer() and self:AntiSpam(3, 3) then
		specWarnHastenDispel:Show(args.destName)
		specWarnHastenDispel:Play("helpdispel")
	end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED

--[[
function mod:SPELL_AURA_REMOVED(args)
	local spellId = args.spellId
	if spellId == 339525 and args:IsPlayer() then

	end
end
--]]

function mod:UNIT_DIED(args)
	local cid = self:GetCIDFromGUID(args.destGUID)
	if cid == 184022 then--Stonevault Geomancer (Trash Version)
		timerChainLightningCD:Stop(args.destGUID)
		timerStoneSpikeCD:Stop(args.destGUID)
	elseif cid == 184130 then--Earthen Custodian
		timerCleaveCD:Stop(args.destGUID)
	elseif cid == 184319 then--Refti Custodian
		timerAncientPowerCD:Stop(args.destGUID)
		timerJaggedBiteCD:Stop(args.destGUID)
	elseif cid == 184303 then--Skittering Crawler
		timerPounceCD:Stop(args.destGUID)
	elseif cid == 184131 then--Earthen Guardian
		timerBulwarkSlamCD:Stop(args.destGUID)
	elseif cid == 184020 then--Hulking Berserker
		timerBrutalSlamCD:Stop(args.destGUID)
	elseif cid == 184023 then--Vicious Basilisk
		timerSpikedCarapaceCD:Stop(args.destGUID)
	elseif cid == 186420 then--Earthen Weaver
		timerHailofStoneCD:Stop(args.destGUID)
		timerStoneBoltCD:Stop(args.destGUID)
	elseif cid == 184107 then--Runic Protector
		timerEarthquakeCD:Stop(args.destGUID)
		timerFissuringSlamCD:Stop(args.destGUID)
	elseif cid == 184300 then--Ebonstone Golem
		timerThunderousClapCD:Stop(args.destGUID)
	elseif cid == 184335 then--Infinite Agent
		timerHastenCD:Stop(args.destGUID)
	end
end
