local _, Ns = ...

----------------------------
-- Local Helper Functions --
----------------------------

-- Number shorterner
function Ns.ShortNumbers(num, places)
    local ret
    local placeValue = ("%%.%df"):format(places or 0)
    if not num then return 0
	elseif num < 1000 then return num
    elseif num < 1000000 then ret = placeValue:format(num / 1000) .. "k"
	elseif num >= 1000000 then ret = placeValue:format(num / 1000000) .. "M"
	else ret = num -- hundreds
    end
    return ret
end

-- Decimal format string helper
-- val: the decimal option value (0, 1, 2, 3)
-- suffix: optional string appended to the format (e.g. "%%" for percent)
-- Returns a format string like "%.0f", "%.2f%%", etc.
function Ns.DecimalFormat(val, suffix)
	local s = suffix or ""
	if val == 0 then return "%.0f" .. s
	elseif val == 1 then return "%.1f" .. s
	elseif val == 2 then return "%.2f" .. s
	else return "%.3f" .. s end
end

-- Decimal number helper for large-number stats (Strength, AP, etc.)
-- val: the decimal option value (0, 1, 2, 3)
-- num: the number to format
-- Returns the formatted string
function Ns.DecimalNumber(val, num)
	if val == 0 then return BreakUpLargeNumbers(num)
	elseif val == 1 then return Ns.ShortNumbers(num, 0)
	elseif val == 2 then return Ns.ShortNumbers(num, 1)
	else return Ns.ShortNumbers(num, 2) end
end

function Ns.StatsCompute()

	-- Init
	-- Ns.combustion, Ns.serenity, Ns.overflowEnergy, Ns.luckOfDraw = 0, 0, 0, 0
	-- Ns.hitCombo, Ns.shadowForm, Ns.loneWolf, Ns.runePower = 0, 0, 0, 0
	-- Ns.incanterFlow, Ns.demonSoul, Ns.tigersFury, Ns.momentum = 0, 0, 0, 0
	-- Ns.touchOfIce, Ns.demonicSynergy, Ns.seethChaos, Ns.equilibrium = 0, 0, 0, 0
	-- Ns.iridescence, Ns.arcaneSurge, Ns.enlightened, Ns.symbolsDeath = 0, 0, 0, 0
	-- Ns.ebonMight, Ns.avatar, Ns.battleShout, Ns.defStance, Ns.feralSpirit = 0, 0, 0, 0, 0
	-- Ns.bestialWrath, Ns.friendFae, Ns.retAura, Ns.inertia = 0, 0, 0, 0
	-- Ns.avWrath, Ns.delver, Ns.impetus, Ns.enrage = 0, 0, 0, false

	-- for i = 1, 40 do
	-- 	local aura = C_UnitAuras.GetAuraDataByIndex("player",i, "HELPFUL")

	-- 	if not aura then break end

		-- if Ns.Combustion[aura.spellId] then Ns.combustion = Ns.Combustion[aura.spellId][1] end
		-- if Ns.Serenity[aura.spellId] then Ns.serenity = Ns.Serenity[aura.spellId][1] end
		-- if Ns.Overflowing[aura.spellId] then Ns.overflowEnergy = aura.applications * 2 end
		-- if Ns.LuckOfTheDraw[aura.spellId] then Ns.luckOfDraw = ((aura.applications * 5) / 100 ) end
		-- if Ns.HitCombo[aura.spellId] then Ns.hitCombo = aura.applications end
		-- if Ns.Shadowform[aura.spellId] then Ns.shadowForm = Ns.Shadowform[aura.spellId][1] end
		-- if Ns.LoneWolf[aura.spellId] then Ns.loneWolf = Ns.LoneWolf[aura.spellId][1] end
		-- if Ns.RuneOfPower[aura.spellId] then Ns.runePower = Ns.RuneOfPower[aura.spellId][1] end
		-- if Ns.DemonSoul[aura.spellId] then Ns.demonSoul = Ns.DemonSoul[aura.spellId][1] end
		-- if Ns.TigersFury[aura.spellId] then Ns.tigersFury = Ns.TigersFury[aura.spellId][1] end
		-- if Ns.Momentum[aura.spellId] then Ns.momentum = Ns.Momentum[aura.spellId][1] end
		-- if Ns.TouchOfIce[aura.spellId] then Ns.touchOfIce = Ns.TouchOfIce[aura.spellId][1] end
		-- if Ns.SeethChaos[aura.spellId] then Ns.seethChaos = Ns.SeethChaos[aura.spellId][1] end
		-- if Ns.DemonicSynergy[aura.spellId] then Ns.demonicSynergy = Ns.DemonicSynergy[aura.spellId][1] end
		-- if Ns.IncanterFlow[aura.spellId] then Ns.incanterFlow = aura.applications * 4 end
		-- if Ns.ElementalEquilibrium[aura.spellId] then Ns.equilibrium = Ns.Equilibrium end
		-- if Ns.Iridescence[aura.spellId] then Ns.iridescence = Ns.Iridescence[aura.spellId][1] end
		-- if Ns.ArcaneSurge[aura.spellId] then Ns.arcaneSurge = Ns.ArcaneSurge[aura.spellId][1] end
		-- if Ns.Enlightened[aura.spellId] then Ns.enlightened = Ns.Enlightened[aura.spellId][1] end
		-- if Ns.Enrage[aura.spellId] then Ns.enrage = true end
		-- if Ns.SymbolsDeath[aura.spellId] then Ns.symbolsDeath = Ns.SymbolsDeath[aura.spellId][1] end
		-- if Ns.EbonMight[aura.spellId] then Ns.ebonMight = Ns.EbonMight[aura.spellId][1] end
		-- if Ns.Avatar[aura.spellId] then Ns.avatar = Ns.Avatar[aura.spellId][1] end
		-- if Ns.BattleShout[aura.spellId] then Ns.battleShout = Ns.BattleShout[aura.spellId][1] end
		-- if Ns.DefStance[aura.spellId] then Ns.defStance = Ns.DefStance[aura.spellId][1] end
		-- if Ns.FeralSpirit[aura.spellId] then Ns.feralSpirit = Ns.FeralSpirit[aura.spellId][1] end
		-- if Ns.BestialWrath[aura.spellId] then Ns.bestialWrath = Ns.BestialWrath[aura.spellId][1] end
		-- if Ns.FriendFae[aura.spellId] then Ns.friendFae = Ns.FriendFae[aura.spellId][1] end
		-- if Ns.AvengeWrath[aura.spellId] then Ns.avWrath = Ns.AvengeWrath[aura.spellId][1] end
		-- if Ns.RetAura[aura.spellId] then Ns.retAura = Ns.RetAura[aura.spellId][1] end
		-- if Ns.Inertia[aura.spellId] then Ns.inertia = Ns.Inertia[aura.spellId][1] end
		-- if Ns.Delver[aura.spellId] then Ns.delver = Ns.Delver[aura.spellId][1] end
		-- if Ns.Impetus[aura.spellId] then Ns.impetus = Ns.Impetus[aura.spellId][1] end

-- 	end
end

--------------------------------------
--		Global OnEvent function		--
--------------------------------------
function Ns.OnEventFunc(event, ...)
	-- SinLive
	local unit = ...
	if unit == "target" then Ns.SinLive() return end

	-- StatsCompute is currently a no-op (aura scanning disabled),
	-- so skip it to avoid wasted work on every event fire.
	-- Ns.StatsCompute()
end