local mod	= DBM:NewMod(2096, "DBM-Party-BfA", 9, 1002)
local L		= mod:GetLocalizedStrings()

mod:SetRevision("20240428124541")
mod:SetCreatureID(127503)
mod:SetEncounterID(2104)
mod:SetUsedIcons(1)

mod:RegisterCombat("combat")

mod:RegisterEventsInCombat(
	"SPELL_AURA_APPLIED 256038 256105",
	"SPELL_AURA_REMOVED 256038 256105",
	"SPELL_CAST_START 256083 256198 256199 263345",
	"SPELL_CAST_SUCCESS 256038 256101"
)

local warnAZBlast					= mod:NewSpellAnnounce(256199, 2)
local warnAZIncendiary				= mod:NewSpellAnnounce(256198, 2)
local warnDeadeye					= mod:NewTargetNoFilterAnnounce(256038, 4)
local warnExplosiveBurst			= mod:NewTargetAnnounce(256105, 2)

local specWarnCrossIgnition			= mod:NewSpecialWarningSpell(256083, nil, nil, nil, 2, 2)--If the lines have better visuals later maybe i'll say farfromline/dodge, but for now, treating as unavoidable aoe
local specWarnDeadeye				= mod:NewSpecialWarningDefensive(256038, nil, nil, nil, 1, 2)
local yellDeadeye					= mod:NewYell(256038)
local specWarnExplosiveBurst		= mod:NewSpecialWarningMoveAway(256105, nil, nil, nil, 1, 2)
local yellExplosiveBurst			= mod:NewYell(256105)
local specWarnMassiveBlast			= mod:NewSpecialWarningDodge(263345, nil, nil, nil, 2, 2)

local timerARBlastCD				= mod:NewCDTimer(44.8, 256199, nil, nil, nil, 3)
local timerARICD					= mod:NewCDTimer(44.8, 256198, nil, nil, nil, 3)
local timerCrossIgnitionCD			= mod:NewCDTimer(44.8, 256083, nil, nil, nil, 2)
local timerDeadeyeCD				= mod:NewCDTimer(23, 256038, nil, nil, nil, 3)
local timerExplosiveBurstCD			= mod:NewCDTimer(44.8, 256105, nil, nil, nil, 3)
local timerMassiveBlastCD			= mod:NewCDTimer(21.8, 263345, nil, nil, nil, 3)

mod:AddSetIconOption("SetIconOnDeadeye", 256038, true, 0, {1})
mod:AddInfoFrameOption(256038)
mod:AddRangeFrameOption(5, 256105)

mod.vb.crossCount = 0
mod.vb.burstCount = 0

function mod:OnCombatStart(delay)
	self.vb.crossCount = 0
	self.vb.burstCount = 0
	timerARICD:Start(5.1-delay)
	timerExplosiveBurstCD:Start(11.5-delay)
	timerCrossIgnitionCD:Start(16-delay)
	timerMassiveBlastCD:Start(17-delay)
	timerDeadeyeCD:Start(23.1-delay)
	if self.Options.InfoFrame then
		DBM.InfoFrame:SetHeader(DBM:GetSpellName(256044))
		DBM.InfoFrame:Show(5, "reverseplayerbaddebuffbyspellid", 256044)--Must match spellID to filter other debuffs out
	end
end

function mod:OnCombatEnd()
	if self.Options.RangeFrame then
		DBM.RangeCheck:Hide()
	end
	if self.Options.InfoFrame then
		DBM.InfoFrame:Hide()
	end
end

function mod:SPELL_AURA_APPLIED(args)
	local spellId = args.spellId
	if spellId == 256038 then--Targetting deadeye
		if args:IsPlayer() then
			specWarnDeadeye:Show()
			specWarnDeadeye:Play("targetyou")
			yellDeadeye:Yell()
		else
			warnDeadeye:Show(args.destName)
		end
		if self.Options.SetIconOnDeadeye then
			self:SetIcon(args.destName, 1)
		end
	elseif spellId == 256105 then
		warnExplosiveBurst:CombinedShow(0.3, args.destName)
		if args:IsPlayer() then
			specWarnExplosiveBurst:Show()
			specWarnExplosiveBurst:Play("runout")
			yellExplosiveBurst:Yell()
			if self.Options.RangeFrame then
				DBM.RangeCheck:Show(5)
			end
		end
	end
end

function mod:SPELL_AURA_REMOVED(args)
	local spellId = args.spellId
	if spellId == 256038 and self.Options.SetIconOnDeadeye then
		self:SetIcon(args.destName, 0)
	elseif spellId == 256105 and args:IsPlayer() and self.Options.RangeFrame then
		DBM.RangeCheck:Hide()
	end
end

function mod:SPELL_CAST_START(args)
	local spellId = args.spellId
	if spellId == 256083 then
		self.vb.crossCount = self.vb.crossCount + 1
		specWarnCrossIgnition:Show()
		specWarnCrossIgnition:Play("aesoon")
		--16.0, 27.5, 17.0, 27.9
		if self.vb.crossCount % 2 == 0 then
			timerCrossIgnitionCD:Start(17)--20?
		else
			timerCrossIgnitionCD:Start(27.5)
		end
	elseif spellId == 256198 then
		warnAZIncendiary:Show()
		--Blast next
		timerARBlastCD:Start(22.2)
	elseif spellId == 256199 then
		warnAZBlast:Show()
		--Incendiary next
		timerARICD:Start(22.2)
	elseif spellId == 263345 then
		specWarnMassiveBlast:Show()
		specWarnMassiveBlast:Play("shockwave")--Shockwave, but from cannon not boss
		timerMassiveBlastCD:Start()
	end
end

function mod:SPELL_CAST_SUCCESS(args)
	local spellId = args.spellId
	if spellId == 256038 then
		timerDeadeyeCD:Start()
	elseif spellId == 256101 then
		self.vb.burstCount = self.vb.burstCount + 1
		--12.9, 15.8, 7.3, 25.5 /// 12.6, 15.8, 7.3, 15.0, 7.3, 15.8, 7.3
		--12.1, 15.8, 7.3, 25.5
		if self.vb.burstCount % 2 == 0 then
			timerExplosiveBurstCD:Start(7.3)
		else
			timerExplosiveBurstCD:Start(15)
		end
	end
end
