-- CHAT_MSG_ADDON TICKER_1000
---@param allstates allstates
---@param e string
---@param prefix string
---@param msg string
function(allstates, e, prefix, msg, ...)
	if e == "TICKER_1000" then
		local ttl = aura_env.config.ttl or 120
		for _, state in pairs(allstates) do
			if state.progress then
				local elapsedTime = GetTime() - state.index
				if elapsedTime > ttl then
					state.show = false
					state.changed = true
				else
					local prettyTime = ""

					local minutes = 0
					while elapsedTime > 60 do
						elapsedTime = elapsedTime - 60
						minutes = minutes + 1
					end
					if minutes > 0 then
						prettyTime = string.format("%s%dm", prettyTime, minutes)
					end
					if elapsedTime > 0 then
						prettyTime = string.format("%s %ds", prettyTime, elapsedTime)
					end

					state.progress = string.format("%20s", prettyTime)
					state.changed = true
				end
			end
		end

		for i = 1, 40 do
			if UnitIsPlayer("nameplate" .. i) then
				local name = UnitName("nameplate" .. i)
				local faction = UnitFactionGroup("nameplate" .. i)
				local _, race = UnitRace("nameplate" .. i)
				local raceFaction = aura_env.raceFactions[race]
				if not raceFaction and aura_env.config.debug then
					print("Unknown race faction", race)
				else
					faction = raceFaction
				end
				WeakAurasSaved.Cyka.PlayerFactionCache[name] = faction
			end
		end

		return true
	end

	if not prefix or prefix ~= aura_env.addonprefix then return end
	local parts = {}
	for part in string.gmatch(msg, "([^" .. aura_env.separator .. "]+)") do
		table.insert(parts, part)
	end
	local name = parts[1]
	local threat = tonumber(parts[2])
	local note = parts[3]

	if not name then
		if aura_env.config.debug then
			print(string.format("Could not get name for %s (%s) with deliminer '%s'", msg, name or "nil", aura_env.separator))
		end
		return
	end
	if not threat then
		if aura_env.config.debug then
			print(string.format("Could not get threat for %s (%s) with deliminer '%s'", msg, threat or "nil", aura_env.separator))
		end
		return
	end
	if not note then
		if aura_env.config.debug then
			print(string.format("Could not get note for %s (%s) with deliminer '%s'", msg, note or "nil", aura_env.separator))
		end
	end

	if threat < aura_env.config.threatThreshold then
		if aura_env.config.debug then
			print(string.format("Skipping notify due to low threat (%d < %d)", threat, aura_env.config.threatThreshold))
		end
		return
	end

	local stinky = WeakAurasSaved.Cyka.stinkies[name]
	if not stinky then
		if aura_env.config.debug then
			print(string.format("Could not find stinky for %s", name))
		end
		return false
	end

	if not aura_env.soundNotifyTimer[name] or aura_env.soundNotifyTimer[name] < GetTime() then
		PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master")
		aura_env.soundNotifyTimer[name] = GetTime() + aura_env.config.alertThrottle
	end

	allstates[name] = {
		show = true,
		changed = true,
		name = string.format("%-20s%2d%35s", name, stinky.threat, note),
		progressType = "timed",
		duration = 60,
		expirationTime = GetTime() + aura_env.config.alertThrottle,
		autohide = true,
		index = GetTime(),
		progress = string.format("%20s", "0s"),
	}

	return true
end
