local aceDBOptions = LibStub("AceDBOptions-3.0")

function Vect:GetVectOptions()
	local db = self.db.profile;
	local options = {
		type = "group", name = "Vect", childGroups = "tab",
		args = {
			enabled = {
				type = "toggle", name = "Enabled", desc = "Enable/Disable the addon", order = 0,
				get = function() return Vect:isEnabled() end,
				set = function(_, v)
						Vect:setEnabledOrDisabled(v);
					end
			},
			lock = {
				type = "toggle", name = "Lock", desc = "Uncheck to move the frames", order = 1,
				get = function() return Vect:isLocked() end,
				set = function(_, v)
						db.locked = v;
						if v then Vect:LockFrames() else Vect:UnlockFrames() end;
					end
			},
			targetandfocus = {
				type = "group", name = "CDs", desc = "Cooldown frame's settings.", childGroups = "tab", order = 2,
				args = Vect:getTargetandFocusOptions();
			},
			droptions = {
				type = "group", name = "DRs", desc = "DR frame's settings.", childGroups = "tab",order = 3,
				args = Vect:getDROptions();
			},
			selfdr = {
				type = "group", name = "Self DRs", desc = "Self DR frame's settings.", childGroups = "tab",order = 4,
				args = Vect:getSelfDROptions()
			},
			debugoptions = {
				type = "group", name = "Debug", desc = "Debug settings.", childGroups = "tab", order = 5,
				args = Vect:getDebugOptions();
			},
			profileoptions = aceDBOptions:GetOptionsTable(self.db)
		}
	}
	return options;
end
--order 10-20
function Vect:getTargetandFocusOptions()
	local args = {
		targetHeader = {
			type = "header", name = "Target's settings", order = 10
		},
		targettoggle = {
			type = "toggle", name = "Target", desc = "Enable/Disable showing the target's cooldowns", order = 11,
			get = function() return Vect:isPartEnabled("target") end,
			set = function(_, v)
				Vect:SetPartEnabledOrDisabled("target", v);
			end
		},
		targetrange = {
			type = "range", name = "Target's size", order = 12, min = 10, max = 150, step = 1,
			get = function() return Vect:getFrameSize("target") end,
			set = function(_, v)
				Vect:setFrameSize("target", v);
			end
			
		},
		targetGrowSelect = {
			type = "select", style = "dropdown", name = "targetGrow", 
			desc = "Change which way the target's cooldowns will grow", order = 13, 
			values = {
				["1"] = "Up",
				["2"] = "Right",
				["3"] = "Down",
				["4"] = "Left"
			},
			get = function() return Vect:getGrowOrder("target") end,
			set = function(_, v)
				Vect:setGrowOrder("target", v);
			end
		},
		targetSortSelect = {
			type = "select", style = "dropdown", name = "targetSortOrder", 
			desc = "Change the target's cooldowns's sort order", order = 14, 
			values = {
				["1"] = "Ascending (CD left)",
				["2"] = "Descending (CD left)",
				["3"] = "Ascending (CD total)",
				["4"] = "Descending (CD total)",
				["5"] = "Recent first",
				["6"] = "Recent Last",
				["7"] = "No order"
			},
			get = function() return Vect:getSortOrder("target") end,
			set = function(_, v)
				Vect:setSortOrder("target", v);
			end
		},
		focusHeader = {
			type = "header", name = "Focus's settings", order = 15
		},
		focustoggle = {
				type = "toggle", name = "Focus", desc = "Enable/Disable showing the focus's cooldowns", order = 16,
				get = function() return Vect:isPartEnabled("focus") end,
				set = function(_, v)
					Vect:SetPartEnabledOrDisabled("focus", v);
				end
		},
		focusRange = {
				type = "range", name = "Focus's size", order = 17, min = 10, max = 150, step = 1,
				get = function() return Vect:getFrameSize("focus") end,
				set = function(_, v)
					Vect:setFrameSize("focus", v);
				end
		},
		focusGrowSelect = {
			type = "select", style = "dropdown", name = "focusGrow", 
			desc = "Change which way the focus's cooldowns will grow", order = 18, 
			values = {
				["1"] = "Up",
				["2"] = "Right",
				["3"] = "Down",
				["4"] = "Left"
			},
			get = function() return Vect:getGrowOrder("focus") end,
			set = function(_, v)
				Vect:setGrowOrder("focus", v);
			end
		},
		focusSortSelect = {
			type = "select", style = "dropdown", name = "focusSortOrder", 
			desc = "Change the focus's cooldowns's sort order", order = 19, 
			values = {
				["1"] = "Ascending (CD left)",
				["2"] = "Descending (CD left)",
				["3"] = "Ascending (CD total)",
				["4"] = "Descending (CD total)",
				["5"] = "Recent first",
				["6"] = "Recent Last",
				["7"] = "No order"
			},
			get = function() return Vect:getSortOrder("focus") end,
			set = function(_, v)
				Vect:setSortOrder("focus", v);
			end
		}
	}
	return args;
end

--order 20-40
function Vect:getDROptions()
	local args = {

	}
	return args;
end

--order 40-50
function Vect:getSelfDROptions()
	local args = {

	}
	return args;
end

--order 50+
function Vect:getDebugOptions()
	local args = {
		spellcast = {
			type = "toggle", name = "SpellCast", desc = "Enable/Disable writing out SPELL_CAST_SUCCESS events.", order = 50,
			get = function() return Vect:getSpellCastDebug() end,
			set = function(_, v)
				Vect:setSpellCastDebug(v);
			end
		},
		spellAura = {
			type = "toggle", name = "SpellAura", desc = "Enable/Disablewriting out SPLL_AURA_* events", order = 51,
			get = function() return Vect:getSpellAuraDebug() end,
			set = function(_, v)
				Vect:setSpellAuraDebug(v);
			end
		},
		allLog = {
			type = "toggle", name = "Uber debug", desc = "Enable/Disable writing out all combatlog events", order = 52,
			get = function() return Vect:getAllCDebug() end,
			set = function(_, v)
				Vect:setAllCDebug(v);
			end
		},
		selfcd = {
			type = "toggle", name = "Self CDs", desc = "Enable/Disable registering self CDs", order = 53,
			get = function() return Vect:getSelfCDRegister() end,
			set = function(_, v)
				Vect:setSelfCDRegister(v);
			end
		},
		debugselect = {
			type = "select", style = "dropdown", name = "debuglevel", 
			desc = "Change the debuglevel", order = 54, 
			values = {
				["0"] = "No Messages",
			},
			get = function() return Vect:getDebugLevel() end,
			set = function(_, v)
				Vect:setDebugLevel(v);
			end
		},
	}
	return args;
end