Quantcast
local SLE, T, E, L, V, P, G = unpack(select(2, ...))
local DT = E:GetModule('DataTexts')
local DTP = SLE:GetModule('Datatexts')
local HEADSLOT, SHOULDERSLOT, CHESTSLOT, WRISTSLOT, HANDSSLOT, WAISTSLOT, LEGSSLOT, FEETSLOT, MAINHANDSLOT, SECONDARYHANDSLOT = HEADSLOT, SHOULDERSLOT, CHESTSLOT, WRISTSLOT, HANDSSLOT, WAISTSLOT, LEGSSLOT, FEETSLOT, MAINHANDSLOT, SECONDARYHANDSLOT
local DURABILITY = DURABILITY
local ToggleCharacter = ToggleCharacter
function DTP:HookDurabilityDT()
	local displayString = ""
	local tooltipString = "%d%%"
	local totalDurability = 0
	local current, max, lastPanel
	local invDurability = {}
	local slots = {
		["SecondaryHandSlot"] = SECONDARYHANDSLOT,
		["MainHandSlot"] = MAINHANDSLOT,
		["FeetSlot"] = FEETSLOT,
		["LegsSlot"] = LEGSSLOT,
		["HandsSlot"] = HANDSSLOT,
		["WristSlot"] = WRISTSLOT,
		["WaistSlot"] = WAISTSLOT,
		["ChestSlot"] = CHESTSLOT,
		["ShoulderSlot"] = SHOULDERSLOT,
		["HeadSlot"] = HEADSLOT,
	}

	local function OnEvent(self, event, ...)
		lastPanel = self
		totalDurability = 100
		for index, value in T.pairs(slots) do
			local slot = T.GetInventorySlotInfo(index)
			current, max = T.GetInventoryItemDurability(slot)
			if current then
				invDurability[value] = (current/max)*100
				if ((current/max) * 100) < totalDurability then
					totalDurability = (current/max) * 100
				end
			end
		end
		if totalDurability <= E.db.sle.dt.durability.threshold then
			E:Flash(self, 0.53, true)
		else
			E:StopFlash(self)
		end
		if E.db.sle.dt.durability.gradient then
			local r,g,b = E:ColorGradient(totalDurability/100, .9,.2,.2, .9,.9,.2, .2,.9,.2)
			local hex = E:RGBToHex(r,g,b)
			self.text:SetFormattedText("%s: %s%d%%|r", DURABILITY, hex, totalDurability)
		else
			self.text:SetFormattedText(displayString, totalDurability)
		end
	end

	local function Click()
		ToggleCharacter("PaperDollFrame")
	end

	local function OnEnter(self)
		DT:SetupTooltip(self)

		for slot, durability in T.pairs(invDurability) do
			DT.tooltip:AddDoubleLine(slot, T.format(tooltipString, durability), 1, 1, 1, E:ColorGradient(durability * 0.01, 1, 0, 0, 1, 1, 0, 0, 1, 0))
		end

		DT.tooltip:Show()
	end

	local function ValueColorUpdate(hex, r, g, b)
		displayString = T.join("", DURABILITY, ": ", hex, "%d%%|r")

		if lastPanel ~= nil then
			OnEvent(lastPanel, 'ELVUI_COLOR_UPDATE')
		end
	end
	E["valueColorUpdateFuncs"][ValueColorUpdate] = true

	DT:RegisterDatatext('Durability', {'PLAYER_ENTERING_WORLD', "UPDATE_INVENTORY_DURABILITY", "MERCHANT_SHOW"}, OnEvent, nil, Click, OnEnter)
end