--[[
##########################################################
S V U I   By: Munglunch
########################################################## 
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;
local unpack        = _G.unpack;
local select        = _G.select;
local pairs         = _G.pairs;
--[[ 
########################################################## 
GET ADDON DATA
##########################################################
]]--
local SV = select(2, ...)
local SVUILib = Librarian("Registry");
local L = SV.L;
--[[ 
########################################################## 
LOCAL VARS
##########################################################
]]--
local UIErrorsFrame = _G.UIErrorsFrame;
local SVUI_ErrorsFrame = CreateFrame("Frame", nil);
local ERR_FILTERS = {};
--[[ 
########################################################## 
EVENTS
##########################################################
]]--
local ErrorFrameHandler = function(self, event, msg)
	if(event == 'PLAYER_REGEN_DISABLED') then
		self:UnregisterEvent('UI_ERROR_MESSAGE')
	elseif(event == 'PLAYER_REGEN_ENABLED') then
		self:RegisterEvent('UI_ERROR_MESSAGE')
	elseif(msg and (not ERR_FILTERS[msg])) then
		UIErrorsFrame:AddMessage(msg, 1.0, 0.1, 0.1, 1.0);
	end
end

local function CacheFilters()
	for k, v in pairs(SV.db.general.errorFilters) do
		ERR_FILTERS[k] = v
	end
	if(ERR_FILTERS[INTERRUPTED]) then
		ERR_FILTERS[SPELL_FAILED_INTERRUPTED] = true
		ERR_FILTERS[SPELL_FAILED_INTERRUPTED_COMBAT] = true
	end
end

function SV:UpdateErrorFilters()
	if(SV.db.general.filterErrors) then
		CacheFilters()
		UIErrorsFrame:UnregisterEvent('UI_ERROR_MESSAGE')
		SVUI_ErrorsFrame:RegisterEvent('UI_ERROR_MESSAGE')
		if(SV.db.general.hideErrorFrame) then
			SVUI_ErrorsFrame:RegisterEvent('PLAYER_REGEN_DISABLED')
			SVUI_ErrorsFrame:RegisterEvent('PLAYER_REGEN_ENABLED')
		end
	else
		UIErrorsFrame:RegisterEvent('UI_ERROR_MESSAGE')
		SVUI_ErrorsFrame:UnregisterEvent('UI_ERROR_MESSAGE')
		SVUI_ErrorsFrame:UnregisterEvent('PLAYER_REGEN_DISABLED')
		SVUI_ErrorsFrame:UnregisterEvent('PLAYER_REGEN_ENABLED')
	end
end
--[[ 
########################################################## 
LOAD
##########################################################
]]--
local function SetErrorFilters()
	if(SV.db.general.filterErrors) then
		CacheFilters()
		UIErrorsFrame:UnregisterEvent('UI_ERROR_MESSAGE')
		SVUI_ErrorsFrame:RegisterEvent('UI_ERROR_MESSAGE')
		if(SV.db.general.hideErrorFrame) then
			SVUI_ErrorsFrame:RegisterEvent('PLAYER_REGEN_DISABLED')
			SVUI_ErrorsFrame:RegisterEvent('PLAYER_REGEN_ENABLED')
		end
		SVUI_ErrorsFrame:SetScript("OnEvent", ErrorFrameHandler)
	end
end

SV:NewScript(SetErrorFilters)