CreateFrame("Frame","SGI_EVENT_HANDLER");
SGI_EVENTS = {};

function SGI_EVENTS:PLAYER_LOGIN()
	
	
	
	-- Index used to separate settings for different characters.
	SGI_DATA_INDEX = UnitName("player").." - "..GetRealmName();
	
	-- Make sure the saved variables are correct.
	--General settings:
	if (type(SGI_DATA) ~= "table") then
		SGI_DATA = {};
	end
	
	-- Fix transition from 6.x to 7.x
	SGI:ResetFix()
	
	if (type(SGI_DATA.lock) ~= "table") then
		SGI_DATA.lock = {};
	end
	if (type(SGI_DATA.guildList) ~= "table") then
		SGI_DATA.guildList = {}
	end
	if (type(SGI_DATA.guildList[GetRealmName()]) ~= "table") then
		SGI_DATA.guildList[GetRealmName()] = {};
	end
	
	--Character based settings.
	if type(SGI_DATA[SGI_DATA_INDEX]) ~= "table" then
		SGI_DATA[SGI_DATA_INDEX] = {}
	end
	if type(SGI_DATA[SGI_DATA_INDEX].settings) ~= "table" then
		SGI_DATA[SGI_DATA_INDEX].settings = {
			inviteMode = 1,
			lowLimit = SGI_MIN_LEVEL_SUPER_SCAN,
			highLimit = SGI_MAX_LEVEL_SUPER_SCAN,
			raceStart = SGI_MAX_LEVEL_SUPER_SCAN,
			classStart = SGI_MAX_LEVEL_SUPER_SCAN,
			interval = 5,
			checkBox = {},
			dropDown = {},
			frames = {},
			filters = {},
		}
	end
	if type(SGI_DATA[SGI_DATA_INDEX].settings.whispers) ~= "table" then
		SGI_DATA[SGI_DATA_INDEX].settings.whispers = {}
	end
	if type(SGI_BACKUP) ~= "table" then
		SGI_BACKUP = SGI_DATA.lock
	end
	
	-- If there is a saved keybind, activate it.
	if (SGI_DATA[SGI_DATA_INDEX].keyBind) then
		SetBindingClick(SGI_DATA[SGI_DATA_INDEX].keyBind,"SGI_INVITE_BUTTON");
	end
	
	-- Anti spam. Users of the AddOn GuildShield are ignored.
	GuildShield:Initiate(SGI.RemoveShielded);
	-- Load locale
	SGI:LoadLocale();
	-- Load the minimap button
	if (not SGI_DATA[SGI_DATA_INDEX].settings.checkBox["CHECKBOX_HIDE_MINIMAP"]) then
		SGI:ShowMinimapButton();
	end
	-- Activate the keybind, if any.
	if (SGI_DATA[SGI_DATA_INDEX].keyBind) then	
		SetBindingClick(SGI_DATA[SGI_DATA_INDEX].keyBind, "SGI_INVITE_BUTTON2");
	end
	--Debugging, used for development
	SGI:DebugState(SGI_DATA[SGI_DATA_INDEX].debug);
	--Tell guildies what version you're running
	SGI:BroadcastVersion("GUILD");
	--Request lock sync from guildies
	SGI:RequestSync();
	--Remove locks that are > 2 months old
	SGI:RemoveOutdatedLocks();
	--Chat Intercept
	ChatIntercept:StateSystem(SGI_DATA[SGI_DATA_INDEX].settings.checkBox["CHECKBOX_HIDE_SYSTEM"]);
	ChatIntercept:StateWhisper(SGI_DATA[SGI_DATA_INDEX].settings.checkBox["CHECKBOX_HIDE_WHISPER"]);
	ChatIntercept:StateRealm(true);
	--Show changes, if needed
	--SGI:debug((SGI_DATA[SGI_DATA_INDEX].settings.checkBox["SGI_CHANGES"] and "true" or "nil").." "..(SGI_DATA.showChanges and "true" or "nil"));
	if ((not SGI_DATA[SGI_DATA_INDEX].settings.checkBox["SGI_CHANGES"] or SGI.FORCE_CHANGELOG) and SGI_DATA.showChanges ~= SGI.VERSION_MAJOR) then
		SGI:ShowChanges();
		SGI_DATA.showChanges = SGI.VERSION_MAJOR;
		SGI:debug("Show changes");
	end
	--Need to load the SuperScan frame for certain functions
	SGI:CreateSmallSuperScanFrame();
	SuperScanFrame:Hide();
end

function SGI_EVENTS:UPDATE_MOUSEOVER_UNIT()
	-- Create a list of players and their guild (if any).
	-- Used to prevent false positives.
	if (UnitIsPlayer("mouseover")) then
		local name = UnitName("mouseover");
		local guild = GetGuildInfo("mouseover");
		local realm = GetRealmName();
		
		if (not guild or guild == "") then return end
		
		if (type(SGI_DATA.guildList[realm][guild]) ~= "table") then
			SGI_DATA.guildList[realm][guild] = {};
		end
		for k,v in pairs(SGI_DATA.guildList[realm][guild]) do
			if (v == name) then
				return;
			end
		end
		tinsert(SGI_DATA.guildList[realm][guild], name);
		--SGI_DATA.guildList[realm][name] = guild;
	end
end

function SGI_EVENTS:PLAYER_LOGOUT()
	C_ChatInfo.SendAddonMessage("SGI_STOP", "", "GUILD");
end

function SGI_EVENTS:CHAT_MSG_ADDON(event, ...)
	SGI:AddonMessage(event, ...);
end

function SGI_EVENTS:CHAT_MSG_SYSTEM(event, ...)
	SGI:SystemMessage(event,message,...)
end


for event,_ in pairs(SGI_EVENTS) do 
	SGI_EVENT_HANDLER:RegisterEvent(event);
end


SGI_EVENT_HANDLER:SetScript("OnEvent", function(self,event,...)
	SGI_EVENTS[event](self, event, ...);
end)

SGI:debug(">> Events.lua");