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

--[[
	Local variables
]]--
local LOG_ACTIVE = false

--[[
	Table SettingsWindow
]]--
TGT_SettingsWindow = {}
TGT_SettingsWindow.__index = TGT_SettingsWindow

--[[
	Table Members
]]--
TGT_SettingsWindow.MainMenuName = "TaosGroupToolsSettingsMainMenu"
TGT_SettingsWindow.Panel = nil
TGT_SettingsWindow.Options = nil

function TGT_SettingsWindow.AddGroupUltimateOptions()
    if (LOG_ACTIVE) then
        logger:logTrace("TGT_SettingsWindow.AddGroupUltimateOptions")
    end

    local styleChoices = {
        [1] = GetString(TGT_OPTIONS_STYLE_SIMPLE),
        [2] = GetString(TGT_OPTIONS_STYLE_SWIM),
        [3] = GetString(TGT_OPTIONS_STYLE_SHORT_SWIM),
    }

	local optionsData = {
        -- Submenu Group Ultimate Options
        {   type = "submenu",
			name = GetString(TGT_OPTIONS_GROUP_ULTIMATE_HEADER),
            controls = {
                -- Only AvA visible
                {   type = "checkbox",
			        name = GetString(TGT_OPTIONS_ONLY_AVA_LABEL),
			        tooltip = GetString(TGT_OPTIONS_ONLY_AVA_TOOLTIP),
			        getFunc =
                       function()
                           return TGT_SettingsHandler.SavedVariables.OnlyAva
                       end,
			        setFunc =
                       function(value)
                           TGT_SettingsHandler.SetOnlyAvaSettings(value)
			           end,
			        default = TGT_DEFAULTS.OnlyAva
		        },
                -- Sorting active
                {   type = "checkbox",
			        name = GetString(TGT_OPTIONS_USE_SORTING_LABEL),
			        tooltip = GetString(TGT_OPTIONS_USE_SORTING_TOOLTIP),
			        getFunc =
                       function()
                           return TGT_SettingsHandler.SavedVariables.IsSortingActive
                       end,
			        setFunc =
                       function(value)
                           TGT_SettingsHandler.SetIsSortingActiveSettings(value)
			           end,
			        default = TGT_DEFAULTS.IsSortingActive
		        },
                -- Style
                {   type = "dropdown",
			        name = GetString(TGT_OPTIONS_STYLE_LABEL),
			        tooltip = GetString(TGT_OPTIONS_STYLE_TOOLTIP),
                    choices = styleChoices,
			        getFunc =
                       function()
                           return styleChoices[TGT_SettingsHandler.SavedVariables.Style]
                       end,
			        setFunc =
                       function(value)
                           for index, name in ipairs(styleChoices) do
                              if (name == value) then
                                 TGT_SettingsHandler.SetStyleSettings(index)
                                 break
                              end
                           end
			           end,
			        default = styleChoices[TGT_DEFAULTS.Style]
		        },
            },
        },
	}

    -- Add options
    for i = 1 , #optionsData do
        table.insert(TGT_SettingsWindow.Options , optionsData[i])
    end
end

function TGT_SettingsWindow.CreateOptions()
    if (LOG_ACTIVE) then
        logger:logTrace("TGT_SettingsWindow.CreateOptions")
    end

    TGT_SettingsWindow.Options = {
        -- Options Header
        {   type = "header",
			name = GetString(TGT_OPTIONS_HEADER),
            width = "full"
		},
        -- Controls Movable
        {   type = "checkbox",
			name = GetString(TGT_OPTIONS_DRAG_LABEL),
			tooltip = GetString(TGT_OPTIONS_DRAG_TOOLTIP),
			getFunc =
                function()
                    return TGT_SettingsHandler.SavedVariables.Movable
                end,
			setFunc =
                function(value)
                    TGT_SettingsHandler.SetMovableSettings(value)
			    end,
			default = TGT_DEFAULTS.Movable
		},
        -- Enable/Disable Group Ultimate
        {   type = "checkbox",
			name = GetString(TGT_OPTIONS_GROUP_ULTIMATE_LABEL),
			tooltip = GetString(TGT_OPTIONS_GROUP_ULTIMATE_TOOLTIP),
			getFunc =
               function()
                   return TGT_SettingsHandler.SavedVariables.IsGroupUltimateEnabled
               end,
			setFunc =
               function(value)
                   TGT_SettingsHandler.SetIsGroupUltimateEnabledSettings(value)
			   end,
			default = TGT_DEFAULTS.IsGroupUltimateEnabled
		},
    }

    TGT_SettingsWindow.AddGroupUltimateOptions()
end

--[[
	Creates settings panel
]]--
function TGT_SettingsWindow.CreatePanel(major, minor, patch)
    if (LOG_ACTIVE) then
        logger:logTrace("TGT_SettingsWindow.CreatePanel")
        logger:logDebug("major, minor, patch", major, minor, patch)
    end

    TGT_SettingsWindow.Panel = {
		type = "panel",
		name = "Taos Group Tools",
		author = "TProg Taonnor",
		version = major .. "." .. minor .. "." .. patch,
		slashCommand = "/taosGroupTools",
		registerForDefaults = true
	}
end

--[[
	Initialize creates settings window
]]--
function TGT_SettingsWindow.Initialize(logger, major, minor, patch)
    if (LOG_ACTIVE) then
        logger:logTrace("TGT_SettingsWindow.Initialize")
        logger:logDebug("major, minor, patch", major, minor, patch)
    end

    TGT_SettingsWindow.CreatePanel(major, minor, patch)
    TGT_SettingsWindow.CreateOptions()

	local LAM = LibStub("LibAddonMenu-2.0")
	LAM:RegisterAddonPanel(TGT_SettingsWindow.MainMenuName, TGT_SettingsWindow.Panel)
	LAM:RegisterOptionControls(TGT_SettingsWindow.MainMenuName, TGT_SettingsWindow.Options)
end