local mod	= DBM:NewMod("DeOtherSideTrash", "DBM-Party-Shadowlands", 7)
local L		= mod:GetLocalizedStrings()

mod:SetRevision("20240808043723")
--mod:SetModelID(47785)

mod.isTrashMod = true
mod.isTrashModBossFightAllowed = true

mod:RegisterEvents(
	"SPELL_CAST_START 334051 342869 333787 332671 332666 332706 332612 331927 332156 332084 340026",
	"SPELL_CAST_SUCCESS 328740",
	"SPELL_AURA_APPLIED 333227 332666 334493 333250"
--	"SPELL_AURA_REMOVED 333227"
)

--All warnings/recommendations drycoded from https://www.wowhead.com/guides/de-other-side-shadowlands-dungeon-strategy-guide
--Notable Ring Trash
local warnUndyingRage					= mod:NewTargetNoFilterAnnounce(333227, 4, nil, "Tank|Healer")
local warnEnragedMask					= mod:NewSpellAnnounce(342869, 2)

--General
--local specWarnGTFO						= mod:NewSpecialWarningGTFO(257274, nil, nil, nil, 1, 8)
--Notable Ring Trash
local specWarnEruptingDarkness			= mod:NewSpecialWarningDodge(334051, nil, nil, nil, 2, 2)
local specWarnRage						= mod:NewSpecialWarningSpell(333787, "Healer", nil, nil, 2, 2)
local specWarnUndyingRage				= mod:NewSpecialWarningDispel(333227, "RemoveEnrage", nil, nil, 1, 2)
--Notable Hakkar Trash
local specWarnBladestorm				= mod:NewSpecialWarningRun(332671, "Melee", nil, nil, 2, 2)
local specWarnRenew						= mod:NewSpecialWarningInterrupt(332666, "HasInterrupt", nil, nil, 1, 2)
local specWarnRenewDispel				= mod:NewSpecialWarningDispel(332666, "MagicDispeller", nil, nil, 1, 2)
local specWarnHeal						= mod:NewSpecialWarningInterrupt(332706, "HasInterrupt", nil, nil, 1, 2)
local specWarnHealingwave				= mod:NewSpecialWarningInterrupt(332612, "HasInterrupt", nil, nil, 1, 2)
--Notable The Manastorms Trash
local specWarnHaywire					= mod:NewSpecialWarningMoveTo(331927, nil, nil, nil, 2, 2)
local specWarnSpinningUp				= mod:NewSpecialWarningRun(332156, "Melee", nil, nil, 2, 2)
local specWarnSelfCleaningCycle			= mod:NewSpecialWarningInterrupt(332084, "HasInterrupt", nil, nil, 1, 2)
--Notable Dealer Xy'exa Trash
local specWarnSporificShimmerdust		= mod:NewSpecialWarningJump(334493, nil, nil, nil, 1, 6)
local specWarnWailingGrief				= mod:NewSpecialWarningSpell(340026, nil, nil, nil, 2, 2)
--Unknown
local specWarnDarkLotus					= mod:NewSpecialWarningDodge(328740, nil, nil, nil, 2, 2)
local specWarnGTFO						= mod:NewSpecialWarningGTFO(333250, nil, nil, nil, 1, 8)

--Antispam IDs for this mod: 1 run away, 2 dodge, 3 dispel, 4 incoming damage, 5 you/role, 6 generalized, 7 GTFO

function mod:SPELL_CAST_START(args)
	if not self.Options.Enabled then return end
	local spellId = args.spellId
	if spellId == 334051 and self:AntiSpam(3, 2) then
		specWarnEruptingDarkness:Show()
		specWarnEruptingDarkness:Play("shockwave")
	elseif spellId == 342869 and self:AntiSpam(3, 6) then
		warnEnragedMask:Show()
	elseif spellId == 333787 and self:AntiSpam(5, 5) then
		specWarnRage:Show()
		specWarnRage:Play("aesoon")
	elseif spellId == 332671 and self:AntiSpam(5, 1) then
		specWarnBladestorm:Show()
		specWarnBladestorm:Play("justrun")
	elseif spellId == 332666 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
		specWarnRenew:Show(args.sourceName)
		specWarnRenew:Play("kickcast")
	elseif spellId == 332706 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
		specWarnHeal:Show(args.sourceName)
		specWarnHeal:Play("kickcast")
	elseif spellId == 332612 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
		specWarnHealingwave:Show(args.sourceName)
		specWarnHealingwave:Play("kickcast")
	elseif spellId == 332084 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
		specWarnSelfCleaningCycle:Show(args.sourceName)
		specWarnSelfCleaningCycle:Play("kickcast")
	elseif spellId == 331927 and self:AntiSpam(4, 2) then
		specWarnHaywire:Show(DBM_COMMON_L.BREAK_LOS)
		specWarnHaywire:Play("findshelter")
	elseif spellId == 332156 and self:AntiSpam(5, 1) then
		specWarnSpinningUp:Show()
		specWarnSpinningUp:Play("justrun")
	elseif spellId == 340026 then
		specWarnWailingGrief:Show()
		specWarnWailingGrief:Play("fearsoon")
	end
end

function mod:SPELL_CAST_SUCCESS(args)
	if not self.Options.Enabled then return end
	local spellId = args.spellId
	if spellId == 328740 and self:AntiSpam(3, 2) then
		--Using success because it can be interrupted, so we don't want to warn to dodge it unless it's NOT interupted
		specWarnDarkLotus:Show()
		specWarnDarkLotus:Play("watchstep")
	end
end

function mod:SPELL_AURA_APPLIED(args)
	if not self.Options.Enabled then return end
	local spellId = args.spellId
	if spellId == 333227 and self:AntiSpam(3, 5) then
		if self.Options.SpecWarn333227dispel then
			specWarnUndyingRage:Show(args.destName)
			specWarnUndyingRage:Play("enrage")
		else
			warnUndyingRage:Show(args.destName)
		end
	elseif spellId == 332666 and args:IsDestTypeHostile() and self:AntiSpam(3, 5) then
		specWarnRenewDispel:Show(args.destName)
		specWarnRenewDispel:Play("helpdispel")
	elseif spellId == 334493 and args:IsPlayer() then
		specWarnSporificShimmerdust:Show()
		specWarnSporificShimmerdust:Play("keepjump")
	elseif spellId == 333250 and args:IsPlayer() and self:AntiSpam(3, 7) then
		specWarnGTFO:Show(args.spellName)
		specWarnGTFO:Play("watchfeet")
	end
end
