if (DBM:GetTOC() < 100200) then return end--DO NOT DELETE DO NOT DELETE DO NOT DELETE. We don't want this module loading in wod classic (if that happens heh)
local mod	= DBM:NewMod("EverBloomTrash", "DBM-Party-WoD", 5)
local L		= mod:GetLocalizedStrings()

mod:SetRevision("20240108011514")
--mod:SetModelID(47785)
mod:SetZone(1279)

mod.isTrashMod = true

mod:RegisterEvents(
	"SPELL_CAST_START 164965 165213 169657 169445 164887 169494 169839 426845 169840 426974",
	"SPELL_CAST_SUCCESS 165213 172578 165123 426500 427223",
	"SPELL_INTERRUPT",
	"SPELL_AURA_APPLIED 164965 169658 165123 169495 426500",
--	"SPELL_AURA_APPLIED_DOSE 164886",
--	"SPELL_AURA_REMOVED",
	"UNIT_DIED"
)

--[[
(ability.id = 164965 or ability.id = 165213 or ability.id = 169657 or ability.id = 169445 or ability.id = 164887 or ability.id = 169494 or ability.id = 169839 or ability.id = 426845 or ability.id = 169840 or ability.id = 426974) and type = "begincast"
 or (ability.id = 165213 or ability.id = 172578 or ability.id = 165123 or ability.id = 426500 or ability.id = 427223) and type = "cast"
--]]
local warnPoisonousClaws						= mod:NewSpellAnnounce(169657, 3, nil, "Tank")
local warnSpatialDisruption						= mod:NewSpellAnnounce(426974, 2)
local warnEnragedGrowth							= mod:NewCastAnnounce(165213, 4)
local warnChokingVines							= mod:NewCastAnnounce(164965, 3)
local warnNoxiousEruption						= mod:NewCastAnnounce(169445, 3)
local warnHealingWaters							= mod:NewCastAnnounce(164887, 3)
local warnVenomBurst							= mod:NewTargetNoFilterAnnounce(165123, 4)
local warnGnarledroots							= mod:NewTargetNoFilterAnnounce(426500, 3)

local specWarnBoundingWhirl						= mod:NewSpecialWarningSpell(172578, "Melee", nil, nil, 4, 2)
local specWarnCinderboltSalvo					= mod:NewSpecialWarningSpell(427223, nil, nil, nil, 2, 2)
--local specWarnSpatialDisruption					= mod:NewSpecialWarningSpell(426974, nil, nil, nil, 2, 13)
local specWarnColdFusion						= mod:NewSpecialWarningDodge(426845, nil, nil, nil, 2, 2)
local specWarnVenomBurst						= mod:NewSpecialWarningMoveAway(165123, nil, nil, nil, 1, 2)
local yellnVenomBurst							= mod:NewYell(165123)
local specWarnEnragedGrowth						= mod:NewSpecialWarningInterrupt(165213, "HasInterrupt", nil, nil, 1, 2)
local specWarnChokingVines						= mod:NewSpecialWarningInterrupt(164965, "HasInterrupt", nil, nil, 1, 2)
local specWarnHealingWaters						= mod:NewSpecialWarningInterrupt(164887, "HasInterrupt", nil, nil, 1, 2)
local specWarnPyroblast							= mod:NewSpecialWarningInterrupt(169839, "HasInterrupt", nil, nil, 1, 2)
local specWarnFrostbolt							= mod:NewSpecialWarningInterrupt(169840, false, nil, nil, 1, 2)
local specWarnChokingVinesDispel				= mod:NewSpecialWarningDispel(164965, "RemoveMagic", nil, nil, 1, 2)
local specWarnVenomBurstDispel					= mod:NewSpecialWarningDispel(165123, "RemovePoison", nil, nil, 1, 2)
--local specWarnDreadpetalToxinDispel				= mod:NewSpecialWarningDispel(164886, "RemovePoison", nil, nil, 1, 2)
local specWarnPoisonClawsDispel					= mod:NewSpecialWarningDispel(169658, "RemovePoison", nil, nil, 1, 2)
local specWarnGTFO								= mod:NewSpecialWarningGTFO(169495, nil, nil, nil, 1, 8)

local timerRP									= mod:NewRPTimer(68)
local timerEnragedGrowthCD						= mod:NewCDNPTimer(12.8, 165213, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--CD from success or interrupt
local timerChokingVinesCD						= mod:NewCDNPTimer(20.6, 164965, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerBoundingWhirlCD						= mod:NewCDNPTimer(16.5, 172578, nil, nil, nil, 3)
local timerPoisonousClawsCD						= mod:NewCDNPTimer(16.5, 169657, nil, "Tank|Healer", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerVenomBurstCD							= mod:NewCDNPTimer(10.6, 165123, nil, nil, nil, 3)
local timerHealingWatersCD						= mod:NewCDNPTimer(19.4, 164887, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerLivingLeavesCD						= mod:NewCDNPTimer(18.1, 169494, nil, nil, nil, 3)
local timerGnarledRootsCD						= mod:NewCDNPTimer(18.1, 426500, nil, nil, nil, 3)
local timerPyroblastCD							= mod:NewCDNPTimer(8, 169839, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)--8-13 window, quite large
local timerCinderboltSalvoCD					= mod:NewCDNPTimer(18.2, 427223, nil, nil, nil, 2)
local timerFrostboltCD							= mod:NewCDNPTimer(6, 169840, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerColdfusionCD							= mod:NewCDNPTimer(21.8, 426845, nil, nil, nil, 3)--21.8-25, maybe shorter
local timerSpatialDisruptionCD					= mod:NewCDNPTimer(19.5, 426974, nil, nil, nil, 3)

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

--"<6.63 00:47:46> [BOSS_KILL] 1751#Archmage Sol", -- [39]
--"<8.41 00:47:48> [CHAT_MSG_MONSTER_SAY] You! Maybe there is still time. The portal atop this outpost is a direct link to our world-- to Stormwind! The genesaur...#Undermage Kesalon###Omegal##0#0##0#381#nil#0#false#false#false#false", -- [49]
--"<21.76 00:48:01> [UNIT_SPELLCAST_SUCCEEDED] Yalnu(100.0%-0.0%){Target:??} -Teleport Out- [[target:Cast-3-4210-1279-28404-142193-000103D191:142193]]", -- [51]
--"<33.92 00:48:13> [CLEU] SPELL_CAST_START#Creature-0-4210-1279-28404-85496-000003D0DD#Undermage Kesalon##nil#170738#Pyroblast#nil#nil", -- [52]
--"<37.41 00:48:17> [CLEU] SPELL_CAST_SUCCESS#Creature-0-4210-1279-28404-85496-000003D0DD#Undermage Kesalon##nil#170738#Pyroblast#nil#nil", -- [53]
--"<38.77 00:48:18> [CLEU] SPELL_CAST_SUCCESS#Creature-0-4210-1279-28404-85496-000003D0DD#Undermage Kesalon##nil#170741#Pyroblast#nil#nil", -- [56]
--"<40.01 00:48:19> [CHAT_MSG_MONSTER_SAY] If that beast crosses through, the unchecked growth will choke the whole of Azeroth! Hurry!#Undermage Kesalon###Omegal##0#0##0#382#nil#0#false#false#false#false", -- [58]
function mod:PortalRP()
	timerRP:Start(34.3)--Approx, just using yell + 1
end

function mod:SPELL_CAST_START(args)
	local spellId = args.spellId
	if not self:IsValidWarning(args.sourceGUID) then return end
	if spellId == 164965 then
		timerChokingVinesCD:Start(nil, args.sourceGUID)
		if self.Options.SpecWarn164965interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnChokingVines:Show(args.sourceName)
			specWarnChokingVines:Play("kickcast")
		elseif self:AntiSpam(3, 7) then
			warnChokingVines:Show()
		end
	elseif spellId == 165213 then
		--Timer not started here, we only start CD if successfully kicked or successfully cast because otherwise it doesn't go on cooldown
		if self.Options.SpecWarn165213interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnEnragedGrowth:Show(args.sourceName)
			specWarnEnragedGrowth:Play("kickcast")
		elseif self:AntiSpam(3, 7) then
			warnEnragedGrowth:Show()
		end
	elseif spellId == 164887 then
		timerHealingWatersCD:Start(nil, args.sourceGUID)
		if self.Options.SpecWarn164887interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnHealingWaters:Show(args.sourceName)
			specWarnHealingWaters:Play("kickcast")
		elseif self:AntiSpam(3, 7) then
			warnHealingWaters:Show()
		end
	elseif spellId == 169657 then
		timerPoisonousClawsCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 5) then
			warnPoisonousClaws:Show()
		end
	elseif spellId == 169445 then
		if self:AntiSpam(3, 6) then
			warnNoxiousEruption:Show()
		end
	elseif spellId == 169494 then
		timerLivingLeavesCD:Start(nil, args.sourceGUID)
	elseif spellId == 169839 then
		timerPyroblastCD:Start(nil, args.sourceGUID)
		if self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnPyroblast:Show(args.sourceName)
			specWarnPyroblast:Play("kickcast")
		end
	elseif spellId == 426845 then
		timerColdfusionCD:Start(nil, args.sourceGUID)
		specWarnColdFusion:Show()
		specWarnColdFusion:Play("watchorb")
	elseif spellId == 169840 then
		timerFrostboltCD:Start(nil, args.sourceGUID)
		if self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnFrostbolt:Show(args.sourceName)
			specWarnFrostbolt:Play("kickcast")
		end
	elseif spellId == 426974 then
		timerSpatialDisruptionCD:Start(nil, args.sourceGUID)
		--Not antispammed on purpose, it's too unique of a mechanic to bundle with any other mechanic
		warnSpatialDisruption:Show()
		--specWarnSpatialDisruption:Play("pullin")
	end
end

function mod:SPELL_CAST_SUCCESS(args)
	local spellId = args.spellId
	if spellId == 165213 then
		timerEnragedGrowthCD:Start(nil, args.sourceGUID)
	elseif spellId == 172578 then
		timerBoundingWhirlCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 2) then
			specWarnBoundingWhirl:Show()
			specWarnBoundingWhirl:Play("justrun")
		end
	elseif spellId == 165123 then
		timerVenomBurstCD:Start(nil, args.sourceGUID)
	elseif spellId == 426500 then
		timerGnarledRootsCD:Start(nil, args.sourceGUID)
	elseif spellId == 427223 then
		timerCinderboltSalvoCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 4) then
			specWarnCinderboltSalvo:Show()
			specWarnCinderboltSalvo:Play("aesoon")
		end
	end
end

function mod:SPELL_INTERRUPT(args)
	if type(args.extraSpellId) == "number" and args.extraSpellId == 165213 then
		timerEnragedGrowthCD:Start(nil, args.destGUID)
	end
end

function mod:SPELL_AURA_APPLIED(args)
	if not self.Options.Enabled then return end
	local spellId = args.spellId
	if spellId == 164965 and args:IsDestTypePlayer() and self:CheckDispelFilter("magic") and self:AntiSpam(3, 3) then
		specWarnChokingVinesDispel:Show(args.destName)
		specWarnChokingVinesDispel:Play("helpdispel")
--	elseif spellId == 164886 and args:IsDestTypePlayer() then
--		local amount = args.amount or 1
--		if amount >= 6 and self:CheckDispelFilter("poison") and self:AntiSpam(3, 3) then
--			specWarnDreadpetalToxinDispel:Show(args.destName)
--			specWarnDreadpetalToxinDispel:Play("helpdispel")
--		end
	elseif spellId == 169658 and args:IsDestTypePlayer() and self:CheckDispelFilter("poison") and self:AntiSpam(3, 3) then
		specWarnPoisonClawsDispel:Show(args.destName)
		specWarnPoisonClawsDispel:Play("helpdispel")
	elseif spellId == 165123 and args:IsDestTypePlayer() and self:CheckDispelFilter("poison") and self:AntiSpam(3, 3) then
		specWarnVenomBurstDispel:Show(args.destName)
		specWarnVenomBurstDispel:Play("helpdispel")
	elseif spellId == 165123 then
		if args:IsPlayer() then
			if self:AntiSpam(4, 5) then
				specWarnVenomBurst:Show()
				specWarnVenomBurst:Play("range5")
				yellnVenomBurst:Yell()
			end
		else
			warnVenomBurst:Show(args.destName)
		end
	elseif spellId == 169495 and args:IsPlayer() and self:AntiSpam(3, 8) then--Living Leaves
		specWarnGTFO:Show(args.spellName)
		specWarnGTFO:Play("watchfeet")
	elseif spellId == 426500 then
		warnGnarledroots:CombinedShow(0.5, args.destName)
	end
end
mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED

--[[
function mod:SPELL_AURA_REMOVED(args)
	local spellId = args.spellId
	if spellId == 87726 then

	end
end
--]]

function mod:UNIT_DIED(args)
	local cid = self:GetCIDFromGUID(args.destGUID)
	if cid == 81819 then--Everbloom Naturalist
		timerChokingVinesCD:Stop(args.destGUID)
	elseif cid == 81985 then--Everbloom Tender/Everbloom Cultivator
		timerEnragedGrowthCD:Stop(args.destGUID)
	elseif cid == 86372 then--Melded Berserker
		timerBoundingWhirlCD:Stop(args.destGUID)
	elseif cid == 84767 then--Twisted Abomination
		timerPoisonousClawsCD:Stop(args.destGUID)
	elseif cid == 82039 then--Rockspine Stinger
		timerVenomBurstCD:Stop(args.destGUID)
	elseif cid == 81820 then--Everbloom Mender
		timerHealingWatersCD:Stop(args.destGUID)
	elseif cid == 81984 then--Gnarlroot
		timerLivingLeavesCD:Stop(args.destGUID)
		timerGnarledRootsCD:Stop(args.destGUID)
	elseif cid == 84957 then--Putrid Pyromancer
		timerPyroblastCD:Stop(args.destGUID)
		timerCinderboltSalvoCD:Stop(args.destGUID)
	elseif cid == 84989 then--Infested Icecaller
		timerFrostboltCD:Stop(args.destGUID)
		timerColdfusionCD:Stop(args.destGUID)
	elseif cid == 84990 then--Addled Acanomancer
		timerSpatialDisruptionCD:Stop(args.destGUID)
	end
end

--[[
function mod:SPELL_PERIODIC_DAMAGE(_, _, _, _, destGUID, _, _, _, spellId, spellName)
	if spellId == 340324 and destGUID == UnitGUID("player") and self:AntiSpam(2, 8) then
		specWarnGTFO:Show(spellName)
		specWarnGTFO:Play("watchfeet")
	end
end
mod.SPELL_PERIODIC_MISSED = mod.SPELL_PERIODIC_DAMAGE
--]]
