local mod	= DBM:NewMod("RubyLifePoolsTrash", "DBM-Party-Dragonflight", 7)
local L		= mod:GetLocalizedStrings()

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

mod:RegisterEvents(
	"SPELL_CAST_START 372087 391726 391723 373614 392395 372696 384194 392486 392394 392640 392451 372047 372735 373692",
	"SPELL_CAST_SUCCESS 385536 372743",
	"SPELL_AURA_APPLIED 373693 392641 373972 391050",
--	"SPELL_AURA_APPLIED_DOSE",
	"SPELL_AURA_REMOVED 373693 391050",
	"UNIT_DIED"
)

--TODO, can Blazing Rush be target scanned? upgrade to special announce?
--[[
(ability.id = 372087 or ability.id = 391726 or ability.id = 391723 or ability.id = 373614 or ability.id = 372696 or ability.id = 372735 or ability.id = 392395 or ability.id = 392486 or ability.id = 392394 or ability.id = 392640 or ability.id = 392451 or ability.id = 372047) and type = "begincast"
 or ability.id = 391050 and (type = "applybuff" or type = "removebuff")
--]]
local warnLivingBomb						= mod:NewTargetAnnounce(373693, 3)
local warnBurnout							= mod:NewCastAnnounce(373614, 4)
local warnRollingThunder					= mod:NewTargetNoFilterAnnounce(392641, 3)
local warnFireMaw							= mod:NewCastAnnounce(392394, 3, nil, nil, "Tank|Healer")
local warnSteelBarrage						= mod:NewCastAnnounce(372047, 3, nil, nil, "Tank|Healer")
local warnFlashfire							= mod:NewCastAnnounce(392451, 4)
local warnFlameDance						= mod:NewCastAnnounce(385536, 4, 6, nil, nil, nil, nil, 3)
local warnTectonicSlam						= mod:NewCastAnnounce(372735, 4, nil, nil, nil, nil, nil, 3)

local specWarnInferno						= mod:NewSpecialWarningSpell(373692, nil, nil, nil, 2, 2)
local specWarnLightningStorm				= mod:NewSpecialWarningSpell(392486, nil, nil, nil, 2, 2)
local specWarnBlazeofGlory					= mod:NewSpecialWarningSpell(373972, nil, nil, nil, 2, 2)
local specWarnTempestStormshield			= mod:NewSpecialWarningSwitch(391050, nil, nil, nil, 1, 2)
local specWarnLivingBomb					= mod:NewSpecialWarningMoveTo(373693, nil, nil, nil, 1, 2)
local yellLivingBomb						= mod:NewShortYell(373693)
local yellLivingBombFades					= mod:NewShortFadesYell(373693)
local specWarnBlazingRush					= mod:NewSpecialWarningDodge(372087, nil, nil, nil, 2, 2)
local specWarnStormBreath					= mod:NewSpecialWarningDodge(391726, nil, nil, nil, 2, 2)
local yellStormBreath						= mod:NewShortYell(391726)
local specWarnFlameBreath					= mod:NewSpecialWarningDodge(391723, nil, nil, nil, 2, 2)
local yellFlameBreath						= mod:NewShortYell(391723)
local specWarnExcavatingBlast				= mod:NewSpecialWarningDodge(372696, nil, nil, nil, 2, 2)
local specWarnBurnout						= mod:NewSpecialWarningRun(373614, "Melee", nil, nil, 4, 2)
local specWarnThunderJaw					= mod:NewSpecialWarningDefensive(392395, nil, nil, nil, 1, 2)
--local specWarnSharedSuffering				= mod:NewSpecialWarningYou(339607, nil, nil, nil, 1, 2)
local specWarnCinderbolt					= mod:NewSpecialWarningInterrupt(384194, "HasInterrupt", nil, nil, 1, 2)
local specWarnFlashfire						= mod:NewSpecialWarningInterrupt(392451, "HasInterrupt", nil, nil, 1, 2)

local timerExcavatingBlastCD				= mod:NewCDNPTimer(16.5, 372696, nil, nil, nil, 3)
local timerSteelBarrageCD					= mod:NewCDNPTimer(17, 372047, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerBlazingRushCD					= mod:NewCDNPTimer(17, 372087, nil, nil, nil, 3)
local timerStormBreathCD					= mod:NewCDNPTimer(15.7, 391726, nil, nil, nil, 3)
local timerRollingThunderCD					= mod:NewCDNPTimer(21.8, 392641, nil, nil, nil, 3)
local timerThunderjawCD						= mod:NewCDNPTimer(19, 392395, nil, "Tank", nil, 5, nil, DBM_COMMON_L.TANK_ICON)
local timerLightningStormCD					= mod:NewCDNPTimer(20.6, 392486, nil, nil, nil, 2, nil, DBM_COMMON_L.HEALER_ICON)
local timerFlashfireCD						= mod:NewCDNPTimer(12.1, 392451, nil, nil, nil, 4, nil, DBM_COMMON_L.INTERRUPT_ICON)
local timerFlameDanceCD						= mod:NewCDNPTimer(26.6, 385536, nil, nil, nil, 5)
local timerTectonicSlamCD					= mod:NewCDNPTimer(17, 372735, nil, nil, nil, 5)--17-21
local timerTempestStormshieldCD				= mod:NewCDNPTimer(18.2, 391050, nil, nil, nil, 5, nil, DBM_COMMON_L.DAMAGE_ICON)
local timerIcyShieldCD						= mod:NewCDNPTimer(21.9, 372743, nil, nil, nil, 5)--17-21
local timerInfernoCD						= mod:NewCDNPTimer(19.4, 372743, nil, nil, nil, 2)

--local playerName = UnitName("player")

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

function mod:StormBreathTarget(targetname)
	if not targetname then return end
	if targetname == UnitName("player") then
		yellStormBreath:Yell()
	end
end

function mod:FlameBreathTarget(targetname)
	if not targetname then return end
	if targetname == UnitName("player") then
		yellFlameBreath:Yell()
	end
end

function mod:SPELL_CAST_START(args)
	local spellId = args.spellId
	if not self:IsValidWarning(args.sourceGUID) then return end
	if spellId == 372087 then
		if self:AntiSpam(3, 2) then
			specWarnBlazingRush:Show()
			specWarnBlazingRush:Play("chargemove")
		end
		timerBlazingRushCD:Start(17, args.sourceGUID)
	elseif spellId == 391726 then
		timerStormBreathCD:Start(15.7, args.sourceGUID)
		if self:AntiSpam(3, 2) then
			specWarnStormBreath:Show()
			specWarnStormBreath:Play("breathsoon")
		end
		self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "StormBreathTarget", 0.1, 8)
	elseif spellId == 391723 then
		if self:AntiSpam(3, 2) then
			specWarnFlameBreath:Show()
			specWarnFlameBreath:Play("breathsoon")
		end
		self:ScheduleMethod(0.1, "BossTargetScanner", args.sourceGUID, "FlameBreathTarget", 0.1, 8)
	elseif spellId == 373614 and self:AntiSpam(3, 1) then
		if self.Options.SpecWarn373614run then
			specWarnBurnout:Show()
			specWarnBurnout:Play("justrun")
		else
			warnBurnout:Show()
		end
	elseif spellId == 372696 then
		timerExcavatingBlastCD:Start(17, args.sourceGUID)
		if self:AntiSpam(3, 2) then
			specWarnExcavatingBlast:Show()
			specWarnExcavatingBlast:Play("watchstep")
		end
	elseif spellId == 372735 then
		timerTectonicSlamCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 6) then
			warnTectonicSlam:Show()
			warnTectonicSlam:Play("crowdcontrol")
		end
	elseif spellId == 392395 then
		timerThunderjawCD:Start(nil, args.sourceGUID)
		if self:IsTanking("player", nil, nil, true, args.sourceGUID) then
			specWarnThunderJaw:Show()
			specWarnThunderJaw:Play("carefly")
		end
	elseif spellId == 384194 and self:CheckInterruptFilter(args.sourceGUID, false, true) then
		specWarnCinderbolt:Show(args.sourceName)
		specWarnCinderbolt:Play("kickcast")
	elseif spellId == 392486 then
		local cid = self:GetCIDFromGUID(args.sourceGUID)
		if cid == 197535 then
			timerLightningStormCD:Start(21.8, args.sourceGUID)
		else
			timerLightningStormCD:Start(20.6, args.sourceGUID)
		end
		if self:AntiSpam(3, 4) then
			specWarnLightningStorm:Show()
			specWarnLightningStorm:Play("aesoon")
		end
	elseif spellId == 392394 then
		if self:AntiSpam(3, 5) then
			warnFireMaw:Show()
		end
	elseif spellId == 392640 then--Rolling Thunder
		timerRollingThunderCD:Start(nil, args.sourceGUID)
	elseif spellId == 392451 then
		timerFlashfireCD:Start(12.1, args.sourceGUID)
		if self.Options.SpecWarn392451interrupt and self:CheckInterruptFilter(args.sourceGUID, false, true) then
			specWarnFlashfire:Show(args.sourceName)
			specWarnFlashfire:Play("kickcast")
		elseif self:AntiSpam(3, 5) then
			warnFlashfire:Show()
		end
	elseif spellId == 372047 then
		timerSteelBarrageCD:Start(17, args.sourceGUID)
		if self:AntiSpam(3, 5) then
			warnSteelBarrage:Show()
		end
	elseif spellId == 373692 then
		timerInfernoCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 4) then
			specWarnInferno:Show()
			specWarnInferno:Play("aesoon")
		end
	end
end

function mod:SPELL_CAST_SUCCESS(args)
	local spellId = args.spellId
	if not self:IsValidWarning(args.sourceGUID) then return end
	if spellId == 385536 then
		timerFlameDanceCD:Start(nil, args.sourceGUID)
		if self:AntiSpam(3, 6) then
			warnFlameDance:Show()
			warnFlameDance:Play("crowdcontrol")
		end
	elseif spellId == 372743 then
		timerIcyShieldCD:Start(nil, args.sourceGUID)
	end
end

function mod:SPELL_AURA_APPLIED(args)
	if not self.Options.Enabled then return end
	local spellId = args.spellId
	if spellId == 373693 then
		warnLivingBomb:CombinedShow(0.3, args.destName)
		if args:IsPlayer() then
			specWarnLivingBomb:Show(DBM_COMMON_L.ADDS)
			specWarnLivingBomb:Play("targetyou")
			yellLivingBomb:Yell()
			yellLivingBombFades:Countdown(spellId)
		end
	elseif spellId == 392641 then
		warnRollingThunder:CombinedShow(0.3, args.destName)
	elseif spellId == 373972 and self:AntiSpam(3, 4) then
		specWarnBlazeofGlory:Show()
		specWarnBlazeofGlory:Play("aesoon")
	elseif spellId == 391050 then
		specWarnTempestStormshield:Show()
		specWarnTempestStormshield:Play("attackshield")
	end
end
--mod.SPELL_AURA_APPLIED_DOSE = mod.SPELL_AURA_APPLIED

function mod:SPELL_AURA_REMOVED(args)
	local spellId = args.spellId
	if spellId == 373693 and args:IsPlayer() then
		yellLivingBombFades:Cancel()
	elseif spellId == 391050 then
		timerTempestStormshieldCD:Start(nil, args.destGUID)
	end
end

function mod:UNIT_DIED(args)
	local cid = self:GetCIDFromGUID(args.destGUID)
	if cid == 188244 then--Primal Juggernaut
		timerExcavatingBlastCD:Stop(args.destGUID)
	elseif cid == 187897 then--Defier Draghar
		timerSteelBarrageCD:Stop(args.destGUID)
		timerBlazingRushCD:Stop(args.destGUID)
	elseif cid == 197698 then--Thunderhead
		timerStormBreathCD:Stop(args.destGUID)
		timerRollingThunderCD:Stop(args.destGUID)
		timerThunderjawCD:Stop(args.destGUID)
	elseif cid == 198047 then--Tempest Channeler
		timerLightningStormCD:Stop(args.destGUID)
	elseif cid == 197985 then--Flame Channeler
		timerFlashfireCD:Stop(args.destGUID)
	elseif cid == 197535 then--High Channeler Ryvati
		timerLightningStormCD:Stop(args.destGUID)
		timerTempestStormshieldCD:Stop(args.destGUID)
	elseif cid == 190206 then--Primalist Flamedancer
		timerFlameDanceCD:Stop(args.destGUID)
	elseif cid == 187969 then--Flashfrost Earthshaper
		timerTectonicSlamCD:Stop(args.destGUID)
	elseif cid == 188067 then--Flashfrost Chillweaver
		timerIcyShieldCD:Stop(args.destGUID)
	elseif cid == 190034 then--Blazebound Destroyer
		timerInfernoCD:Stop(args.destGUID)
	end
end
