--[[
	Addon: Taos Group Tools
	Author: TProg Taonnor
	Created by @Taonnor
]]--

--[[
	Local variables
]]--
local MAJOR = "0"
local MINOR = "1"
local PATCH = "0"

local ISMOCKED = false

local LOG_NAME = "TGT-DebugLogger"
local LOG_COMMAND = "/tgtlogs"
local TRACE_ACTIVE = false
local DEBUG_ACTIVE = false
local ERROR_ACTIVE = true
local DIRECT_PRINT = true
local CATCH_LUA_ERRORS = false

--[[
	Table TaosGroupTools
]]--
TaosGroupTools = {}
TaosGroupTools.__index = TaosGroupTools

--[[
	Table Members
]]--
TaosGroupTools.Name = "TaosGroupTools"

--[[
	TaosGroupTools:initialize initializes addon
]]--
function TaosGroupTools:initialize()
    -- Initialize logging
    local logger = TaosDebugLogger(LOG_NAME, LOG_COMMAND, TRACE_ACTIVE, DEBUG_ACTIVE, ERROR_ACTIVE, DIRECT_PRINT, CATCH_LUA_ERRORS)
    logger:logTrace("TaosGroupTools:initialize")

    -- If mocking active, mock ZOS methods with mock methods
    if (ISMOCKED) then
        MockZOSMethods()
    end

    -- Initialize settings
    TGT_SettingsHandler.Initialize(logger)

    -- Initialize communication
    TGT_Communicator.Initialize(logger, ISMOCKED)

    -- Initialize logic
    TGT_MapPingHandler.Initialize(logger)
    TGT_UltimateGroupHandler.Initialize(logger)
    TGT_CommandsHandler.Initialize(logger)

    -- Initialize ui
    TGT_SettingsWindow.Initialize(logger, MAJOR, MINOR, PATCH)

    TGT_UltimateGroupMenu.Initialize(logger)
    TGT_GroupUltimateSelector.Initialize(logger)

    TGT_SimpleList.Initialize(logger)
    TGT_SwimlaneList.Initialize(logger)
    TGT_CompactSwimlaneList.Initialize(logger)

    logger:logTrace("TaosGroupTools:initialized")
end

--[[
	OnAddOnLoaded if TaosGroupTools is loaded, initialize
]]--
local function OnAddOnLoaded(eventCode, addOnName)
	if addOnName == TaosGroupTools.Name then

        -- Unregister Loaded Callback
        EVENT_MANAGER:UnregisterForEvent(TaosGroupTools.Name, EVENT_ADD_ON_LOADED)

        -- Initialize
		TaosGroupTools:initialize()
	end
end

-- Register Loaded Callback
EVENT_MANAGER:RegisterForEvent(TaosGroupTools.Name, EVENT_ADD_ON_LOADED, OnAddOnLoaded);