--[[
	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 soundChoices = {
        [1] = GetString(TGT_OPTIONS_NO_SOUND_LABEL),
        [2] = "DUEL_ACCEPTED",
        [3] = "ABILITY_ULTIMATE_READY",
        [4] = "ACHIEVEMENT_AWARDED",
        [5] = "DUEL_BOUNDARY_WARNING",
        [6] = "BATTLEGROUND_CAPTURE_FLAG_TAKEN_OWN_TEAM",
        [7] = "CHAMPION_POINT_GAINED",
        [8] = "DUEL_WON",
        [9] = "GENERAL_ALERT_ERROR",
        [10] = "LEVEL_UP",
    }
--	for sound,description in pairs(SOUNDS) do
--		soundChoices[#soundChoices + 1] = sound
--	end

	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
		        },
                -- Sounds
                {   type        = "dropdown",
			        name        = GetString(TGT_OPTIONS_SOUND_LABEL),
			        tooltip     = GetString(TGT_OPTIONS_SOUND_TOOLTIP),
                    choices     = soundChoices,
			        getFunc =
                       function()
                          return soundChoices[TGT_SettingsHandler.SavedVariables.Sound[1]]
                       end,
			        setFunc =
						function(value)
                            for index, name in ipairs(soundChoices) do
                                if (name == value) then
                                    if (index > 1) then PlaySound(SOUNDS[value]) end
                                    TGT_SettingsHandler.SetSoundSettings(index, value)
                                    break
                                end
                            end
					    end,
			        default     = soundChoices[TGT_DEFAULTS.Sound[1]]
		        },
                -- 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]
		        },
                -- Visible Offset
                {   type        = "slider",
                    name        = GetString(TGT_OPTIONS_VISIBLE_OFF_LABEL),
                    tooltip     = GetString(TGT_OPTIONS_VISIBLE_OFF_TOOLTIP),
                    min         = 2,
                    max         = 24,
                    step        = 1,
                    getFunc =
                        function()
                            return TGT_SettingsHandler.SavedVariables.VisibleOffset
                        end,
                    setFunc =
                        function(value)
                            TGT_SettingsHandler.SetVisibleOffsetSettings(value)
                        end,
                    default     = TGT_DEFAULTS.VisibleOffset,
                },
                -- Visible Swimlanes
                {   type        = "slider",
                    name        = GetString(TGT_OPTIONS_SWIMLANES_LABEL),
                    tooltip     = GetString(TGT_OPTIONS_SWIMLANES_TOOLTIP),
                    min         = 1,
                    max         = 6,
                    step        = 1,
                    getFunc =
                        function()
                            return TGT_SettingsHandler.SavedVariables.Swimlanes
                        end,
                    setFunc =
                        function(value)
                            TGT_SettingsHandler.SetSwimlanesSettings(value)
                        end,
                    default     = TGT_DEFAULTS.Swimlanes,
                },
                -- Scaling Swimlanes
                {   type        = "slider",
                    name        = GetString(TGT_OPTIONS_SWIMLANE_SCALE_LABEL),
                    tooltip     = GetString(TGT_OPTIONS_SWIMLANE_SCALE_TOOLTIP),
                    min         = 0.1,
                    max         = 2.0,
                    step        = 0.1,
                    decimals    = 1,
                    getFunc =
                        function()
                            return TGT_SettingsHandler.SavedVariables.SwimlaneScaling
                        end,
                    setFunc =
                        function(value)
                            TGT_SettingsHandler.SetSwimlaneScalingSettings(value)
                        end,
                    default     = TGT_DEFAULTS.SwimlaneScaling,
                },
            },
        },
	}

    -- 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