--[[
	spot.lua
		Scripts for Bagnon_Spot, which provides filtering functionality for Bagnon
--]]

local nameFilter;

--[[ Search Functions ]]--

function BagnonSpot_Search(text)
	if text and text ~= "" then
		nameFilter = string.lower(text)
	else
		nameFilter = nil
	end
	
	if Bagnon and Bagnon:IsShown() then	
		BagnonFrame_Generate(Bagnon)
	end
	if Banknon and Banknon:IsShown() then	
		BagnonFrame_Generate(Banknon)
	end
end

function BagnonSpot_ClearSearch()
	nameFilter = nil
	
	if Bagnon and Bagnon:IsShown() then	
		BagnonFrame_Generate(Bagnon)
	end
	if Banknon and Banknon:IsShown() then	
		BagnonFrame_Generate(Banknon)
	end
end

--[[ Function Overrides ]]--

BagnonFrame_OnDoubleClick = function(frame)
	if arg1 == "LeftButton" then
		BagnonSpot:Hide()
		BagnonSpot.frame = frame

		BagnonSpot:ClearAllPoints()
		BagnonSpot:SetPoint("TOPLEFT", frame:GetName() .. "Title", "TOPLEFT", -2, 1)
		BagnonSpot:SetPoint("BOTTOMRIGHT", frame:GetName() .. "Title", "BOTTOMRIGHT", 4, -1)
		BagnonSpot:Show()
	end
end

local function ToItemID(hyperLink)
	if hyperLink then
		local _, _, w = string.find(hyperLink, "item:(%d+)")
		return w
	end
end

-- Darkens items we're not searching for
local oBagnonItem_Update = BagnonItem_Update;
BagnonItem_Update = function(item)
	oBagnonItem_Update(item)
	
	if nameFilter then		
		local link;	
		if item.isLink then
			if BagnonDB then
				link = BagnonDB.GetItemData(item:GetParent():GetParent().player, item:GetParent():GetID() , item:GetID())
			end
		else
			link = ToItemID(GetContainerItemLink(item:GetParent():GetID() , item:GetID()))
		end
		
		if link then
			local name = (GetItemInfo(link))		
			if name and not string.find(string.lower(name), nameFilter) then
				item:SetAlpha(item:GetParent():GetParent():GetAlpha()/3)
			else
				item:SetAlpha(item:GetParent():GetParent():GetAlpha())
			end
		end
	else
		item:SetAlpha(item:GetParent():GetParent():GetAlpha())
	end
end

local oBagnonFrame_OnHide = BagnonFrame_OnHide
BagnonFrame_OnHide = function()
	oBagnonFrame_OnHide()
	
	if BagnonSpot:IsVisible() and BagnonSpot.frame == this then
		BagnonSpot:Hide()
	end
end

local oBagnonFrame_OnEnter = BagnonFrame_OnEnter;
BagnonFrame_OnEnter = function()
	oBagnonFrame_OnEnter()
	
	if BagnonSets.showTooltips then
		GameTooltip:AddLine(BAGNON_SPOT_TOOLTIP)
		GameTooltip:Show()
	end
end