--[[
	Ludwig_SellValue -
		Originally based on SellValueLite, this addon allows viewing of sellvalues
--]]

local currentPlayer = UnitName("player")

--[[ Local Functions ]]--

local function LinkToID(link)
	if link then
		local _, _, id = string.find(link, "(%d+):");
		return tonumber(id);
	end
end

local function AddOwners(frame, id)
	if not(frame and id and BagnonSets.showForeverTooltips) then return; end
	
	for player in BagnonDB.GetPlayers() do
		if player ~= currentPlayer then
			local invCount = BagnonDB.GetItemTotal(id, player, -2)
			for bagID = 0, 4 do
				invCount = invCount + BagnonDB.GetItemTotal(id, player, bagID)
			end

			local bankCount = BagnonDB.GetItemTotal(id, player, -1)
			for bagID = 5, 10 do
				bankCount = bankCount + BagnonDB.GetItemTotal(id, player, bagID)
			end

			if (invCount + bankCount) > 0 then
				local tooltipString = player .. " has"
				if invCount > 0 then
					tooltipString = tooltipString .. " " .. invCount .. " (Bags)";
				end
				if bankCount > 0 then
					tooltipString = tooltipString .. " " .. bankCount .. " (Bank)";
				end
				frame:AddLine(tooltipString, 0, 0.8, 1);
			end
		end
	end
end

--[[  Function Hooks ]]--

local Blizz_ContainerFrameItemButton_OnEnter = ContainerFrameItemButton_OnEnter;
ContainerFrameItemButton_OnEnter = function()
	Blizz_ContainerFrameItemButton_OnEnter();

	local bag = this:GetParent():GetID();
	local slot = this:GetID();
	
	AddOwners(GameTooltip, LinkToID(GetContainerItemLink(bag, slot)));
	GameTooltip:Show();
end

local Bliz_GameTooltip_SetLootItem = GameTooltip.SetLootItem;
GameTooltip.SetLootItem = function(self, slot)
	Bliz_GameTooltip_SetLootItem(self, slot);
	
	AddOwners(self, LinkToID(GetLootSlotLink(slot)));
	self:Show();
end

local Bliz_SetHyperlink = GameTooltip.SetHyperlink;
GameTooltip.SetHyperlink = function(self, link, count)
	if link then
		Bliz_SetHyperlink(self, link, count);
		
		if not count then
			count = 1; 
		end
		
		local id = LinkToID(link);
		if id then
			AddOwners(self, id);
		else
			AddOwners(self, link);
		end
		self:Show();
	end
end

local Bliz_GameTooltip_SetLootRollItem = GameTooltip.SetLootRollItem;
GameTooltip.SetLootRollItem = function(self, rollID) 
	Bliz_GameTooltip_SetLootRollItem(self, rollID);
	
	AddOwners(self, LinkToID(GetLootRollItemLink(rollID)));
	self:Show();
end

local Bliz_SetItemRef = SetItemRef;
SetItemRef = function(link, text, button)
	Bliz_SetItemRef(link, text, button);
	
	AddOwners(ItemRefTooltip, LinkToID(link));
	ItemRefTooltip:Show();
end

local Bliz_GameTooltip_SetAuctionItem = GameTooltip.SetAuctionItem;
GameTooltip.SetAuctionItem = function(self, type, index)
	Bliz_GameTooltip_SetAuctionItem(self, type, index);
	
	AddOwners(self, LinkToID(GetAuctionItemLink(type, index)));
	self:Show();
end

--[[ Money Frame Tooltip ]]--

--Alters the tooltip of bagnon moneyframes to show total gold across all characters on the current realm
function BagnonFrameMoney_OnEnter()
	if this:GetLeft() > (UIParent:GetRight() / 2) then
		GameTooltip:SetOwner(this, "ANCHOR_LEFT");
	else
		GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
	end	
	GameTooltip:SetText(string.format(BAGNON_FOREVER_MONEY_ON_REALM, GetRealmName()));
	
	local money = 0;
	for player in BagnonDB.GetPlayers() do
		money = money + BagnonDB.GetMoney(player);
	end
	
	SetTooltipMoney(GameTooltip, money);
	GameTooltip:Show();
end