--Lua functions
local _G = _G
local select = select
--WoW API / Variables
local hooksecurefunc = hooksecurefunc
local IsAddOnLoaded = IsAddOnLoaded
local CreateFrame = CreateFrame
-- GLOBALS: ElvUI

local function OnMouseDown(self, button)
	local text = self.Text:GetText()
	if button == "RightButton" then
		ElvUI[1]:GetModule("Chat"):SetChatEditBoxMessage(text)
	elseif button == "MiddleButton" then
		local rawData = self:GetParent():GetAttributeData().rawValue
		if rawData.IsObjectType and rawData:IsObjectType("Texture") then
			_G.TEX = rawData
			ElvUI[1]:Print("_G.TEX set to: ", text)
		else
			_G.FRAME = rawData
			ElvUI[1]:Print("_G.FRAME set to: ", text)
		end
	else
		_G.TableAttributeDisplayValueButton_OnMouseDown(self)
	end
end

local function UpdateLines(self)
	local scrollFrame = self.LinesScrollFrame or _G.TableAttributeDisplay.LinesScrollFrame -- tinspect, or fstack ctrl
	if not scrollFrame then return end
	for i=1, scrollFrame.LinesContainer:GetNumChildren() do
		local child = select(i, scrollFrame.LinesContainer:GetChildren())
		if child.ValueButton and child.ValueButton:GetScript("OnMouseDown") ~= OnMouseDown then
			child.ValueButton:SetScript("OnMouseDown", OnMouseDown)
		end
	end
end

local event = "ADDON_LOADED"
local function Setup(frame)
	if frame.Registered then return end
	local debugTools = IsAddOnLoaded("Blizzard_DebugTools")
	if debugTools then
		hooksecurefunc(_G.TableInspectorMixin, "RefreshAllData", UpdateLines) -- /tinspect
		hooksecurefunc(_G.TableAttributeDisplay.dataProviders[2], "RefreshData", UpdateLines) -- fstack ctrl
		frame.Registered = true

		if frame:IsEventRegistered(event) then
			frame:UnregisterEvent(event)
		end
	elseif not frame:IsEventRegistered(event) then
		frame:RegisterEvent(event)
	end
end

local frame = CreateFrame('Frame')
frame:SetScript("OnEvent", Setup)
Setup(frame)
