local SLE, T, E, L, V, P, G = unpack(select(2, ...))
local M = SLE:GetModule("Misc")
local SETTINGS = SETTINGS
local LFG_LIST_LEGACY = LFG_LIST_LEGACY
local function configTable()
	if not SLE.initialized then return end
	local ACD = LibStub("AceConfigDialog-3.0-ElvUI")
	SLE.ACD = ACD
	E.Options.args.ElvUI_Header.name = E.Options.args.ElvUI_Header.name.." + |cff9482c9Shadow & Light|r"..T.format(": |cff99ff33%s|r",SLE.version)

	local function CreateButton(number, text, ...)
		local path = {}
		local num = T.select("#", ...)
		for i = 1, num do
			local name = T.select(i, ...)
			T.tinsert(path, #(path)+1, name)
		end
		local config = {
			order = number,
			type = 'execute',
			name = text,
			func = function() ACD:SelectGroup("ElvUI", "sle", T.unpack(path)) end,
		}
		return config
	end
	--Main options group
	E.Options.args.sle = {
		type = "group",
		name = SLE.Title,
		desc = L["Plugin for |cff1784d1ElvUI|r by\nDarth Predator and Repooc."],
		order = 50,
		args = {
			header = {
				order = 1,
				type = "header",
				name = "|cff9482c9Shadow & Light|r"..T.format(": |cff99ff33%s|r", SLE.version),
			},
			logo = {
				type = 'description',
				name = L["SLE_DESC"],
				order = 2,
				image = function() return 'Interface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Banner', 200, 100 end,
			},
			Install = {
				order = 4,
				type = 'execute',
				name = L["Install"],
				desc = L["Run the installation process."],
				func = function() E:GetModule("PluginInstaller"):Queue(SLE.installTable); E:ToggleConfig();  end,
			},
			infoButton = CreateButton(5, L["About/Help"], "help"),
			Reset = {
				order = 6,
				type = 'execute',
				name = L["Reset All"],
				desc = L["Resets all movers & options for S&L."],
				func = function() SLE:Reset("all") end,
			},
			modulesButton = CreateButton(7, L["Modules"], "modules"),
			mediaButton = CreateButton(8, L["Media"], "media"),
			skinsButton = CreateButton(9, L["Skins"], "skins"),
			threat = {
				type = "group",
				name = L["Threat"],
				order = 12,
				guiInline = true,
				args = {
					enabled = {
						order = 1,
						type = "toggle",
						name = L["Enable"],
						get = function(info) return E.db.sle.misc.threat.enable end,
						set = function(info, value) E.db.sle.misc.threat.enable = value; M:Threat_UpdateConfig(); M:Threat_UpdatePosition() end,
					},
					position = {
						order = 2,
						type = 'select',
						name = L["Position"],
						desc = L["Adjust the position of the threat bar to any of the datatext panels in ElvUI & S&L."],
						disabled = function() return not E.db.sle.misc.threat.enable end,
						values = {
							["SLE_DataPanel_1"] = L["SLE_DataPanel_1"],
							["SLE_DataPanel_2"] = L["SLE_DataPanel_2"],
							["SLE_DataPanel_3"] = L["SLE_DataPanel_3"],
							["SLE_DataPanel_4"] = L["SLE_DataPanel_4"],
							["SLE_DataPanel_5"] = L["SLE_DataPanel_5"],
							["SLE_DataPanel_6"] = L["SLE_DataPanel_6"],
							["SLE_DataPanel_7"] = L["SLE_DataPanel_7"],
							["SLE_DataPanel_8"] = L["SLE_DataPanel_8"],
							["LeftChatDataPanel"] = L["Left Chat"],
							["RightChatDataPanel"] = L["Right Chat"],
						},
						get = function(info) return E.db.sle.misc.threat.position end,
						set = function(info, value) E.db.sle.misc.threat.position = value; M:UpdateThreatPosition() end,
					},
				},
			},
			advanced = {
				type = "group",
				name = L["Advanced Options"],
				order = 16,
				guiInline = true,
				get = function(info) return E.global.sle.advanced[ info[#info] ] end,
				set = function(info, value) E.global.sle.advanced[ info[#info] ] = value; end,
				args = {
					info = {
						order = 1,
						type = "description",
						name = L["SLE_Advanced_Desc"],
					},
					general = {
						order = 2,
						type = "toggle",
						name = L["Allow Advanced Options"],
						set = function(info, value) 
							if value == true and not E.global.sle.advanced.confirmed then E:StaticPopup_Show("SLE_ADVANCED_POPUP"); return end
							E.global.sle.advanced[ info[#info] ] = value;
						end,
					},
					optionsLimits = {
						order = 3,
						type = "toggle",
						name = L["Change Elv's options limits"],
						desc = L["Allow |cff9482c9Shadow & Light|r to change some of ElvUI's options limits."],
						disabled = function() return not E.global.sle.advanced.general end,
						set = function(info, value) E.global.sle.advanced[ info[#info] ] = value; E:StaticPopup_Show("GLOBAL_RL") end,
					},
					gameMenu = {
						order = 4,
						type = "group",
						name = L["Game Menu Buttons"],
						hidden = function() return not E.global.sle.advanced.general end,
						disabled = function() return not E.global.sle.advanced.gameMenu.enable end,
						get = function(info) return E.global.sle.advanced.gameMenu[ info[#info] ] end,
						set = function(info, value) E.global.sle.advanced.gameMenu[ info[#info] ] = value; E:StaticPopup_Show("GLOBAL_RL") end,
						args = {
							enable = {
								order = 1,
								type = "toggle",
								name = L["Enable"],
								desc = L["Adds |cff9482c9Shadow & Light|r buttons to main game menu."],
								disabled = false,
							},
							reload = {
								order = 2,
								type = "toggle",
								name = L["Reload UI"],
							},
						},
					},
					cyrillics = {
						order = 5,
						type = "group",
						name = L["Cyrillics Support"],
						hidden = function() return not E.global.sle.advanced.general end,
						get = function(info) return E.global.sle.advanced.cyrillics[ info[#info] ] end,
						set = function(info, value) E.global.sle.advanced.cyrillics[ info[#info] ] = value; E:StaticPopup_Show("GLOBAL_RL") end,
						args = {
							info = {
								order = 1,
								type = "description",
								name = L["SLE_CYR_DESC"],
							},
							commands = {
								order = 2,
								type = "toggle",
								name = L["Commands"],
								desc = L["SLE_CYR_COM_DESC"],
							},
							devCommands = {
								order = 3,
								type = "toggle",
								name = L["Dev Commands"],
								desc = L["SLE_CYR_DEVCOM_DESC"],
							},
						},
					},
				},
			},
			modules = {
				order = 20,
				type = "group",
				childGroups = "select",
				name = L["Modules"],
				args = {
					info = {
						type = "description",
						order = 1,
						name = L["Options for different S&L modules."],
					},
				},
			},
		},
	}
end

T.tinsert(SLE.Configs, configTable)
