local EsoPLSettings = ZO_Object:Subclass()
ESOPL_SETTINGS = EsoPLSettings

function EsoPLSettings:New(...)
    local settings = ZO_Object.New(self)
    settings:Initialize(...)
    return settings
end

function EsoPLSettings:Initialize(EsoPL)
	self.LAM = LibAddonMenu2
	self:InitSettings(EsoPL)
end

function EsoPLSettings:InitSettings(EsoPL)

    local panelData = {
		type = "panel",
		name = EsoPL.Name,
		displayName = "Nieoficjalna pol|cff0000ska|r lokalizacja ESO.",
		author = "Skrybowie Tamriel",
		version = EsoPL.Version,
		slashCommand = "/esopl",
		registerForRefresh = true,
		registerForDefaults = true,
		website = "https://eso-spolszczenie.eu/"
	}
	
	self.LAM:RegisterAddonPanel(panelData.name, panelData)
	
	local optionsTable = {}

	table.insert(optionsTable, {
		type = "header",
		name = "Baza nazw",
		width = "full",	--or "half" (optional)
	})
	
	table.insert(optionsTable, {
		type = "button",
		name = "Zaktualizuj bazę",
		tooltip = "Umożliwia aktualizację bazy danych nazw.",
		func = EsoPL_Dump,
	})

	table.insert(optionsTable, {
		type = "header",
		name = "Różne nazwy",
		width = "full",	--or "half" (optional)
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Nazwy postaci",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		tooltip = "Pozwala dostosować język wyświetlania nazw postaci typu NPC / moby.",
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		getFunc = function() return EsoPL.Settings.ShowNPC end,
		setFunc = (function(value)
			EsoPL.Settings.ShowNPC = value
			
			if value ~= "pl" and EsoPL_doubleNamesNPC then
				EsoPL_doubleNamesNPC(EsoPL)
			end
		end),
		width = "full",
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Nazwy miejsc",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		tooltip = "Pozwala skonfigurować język wyświetlania nazw miejsc.",
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},			
		getFunc = function() return EsoPL.Settings.ShowLocations end,
		setFunc = (function(value)
			EsoPL.Settings.ShowLocations = value
			
			if value ~= "pl" and EsoPL_doubleNamesLocations then
				EsoPL_doubleNamesLocations(EsoPL)
			end
			
			FRIENDS_LIST_MANAGER:BuildMasterList()
			FRIENDS_LIST_MANAGER:OnSocialDataLoaded()
			GUILD_ROSTER_MANAGER:BuildMasterList()
			GUILD_ROSTER_MANAGER:OnGuildDataLoaded()
			
			LFGDoubleNames(EsoPL)
			
			CADWELLS_ALMANAC:RefreshList()
			CALLBACK_MANAGER:FireCallbacks("OnWorldMapChanged")
			EsoPL:MapNameStyle()
		end),
		width = "full",
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Nazwy zestawów w stołach rzemieślniczych",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		tooltip = "Pozwala dostosować język wyświetlania nazw zestawów po najechaniu kursorem na stoły rzemieślnicze.",
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		getFunc = function() return EsoPL.Settings.ShowCraft end,
		setFunc = (function(value)
			EsoPL.Settings.ShowCraft = value
			
			if value ~= "pl" and EsoPL_doubleNamesBoth then
				EsoPL_doubleNamesBoth(EsoPL)
			end
		end),
		width = "full",
	})
	
	table.insert(optionsTable, {
		type = "header",
		name = "Nazwy umiejętności",
		width = "full",	--or "half" (optional)
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Umiejętności (menu)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "en"},
		tooltip = "Umożliwia skonfigurowanie języka do wyświetlania nazw umiejętności w odpowiedniej sekcji.",
		getFunc = function() return EsoPL.Settings.ShowAbilitiesMenu end,
		setFunc = (function(value)
			EsoPL.Settings.ShowAbilitiesMenu = value
			
			if value ~= "pl" and EsoPL_doubleNamesAbilities then
				EsoPL_doubleNamesAbilities(EsoPL)
			end
			
			SKILLS_WINDOW:RebuildSkillLineList()
			COMPANION_SKILLS_DATA_MANAGER:RebuildSkillsData()
		end),
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Umiejętności (wyskakujące okna)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Pozwala skonfigurować język wyświetlania nazw umiejętności w wyskakujących oknach.",
		getFunc = function() return EsoPL.Settings.ShowAbilitiesTooltip end,
		setFunc = (function(value)
			EsoPL.Settings.ShowAbilitiesTooltip = value
			
			if value ~= "pl" and EsoPL_doubleNamesAbilities then
				EsoPL_doubleNamesAbilities(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "System mistrzostw",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Umożliwia skonfigurowanie języka do wyświetlania nazw umiejętności w sekcji systemu mistrzostw.",
		getFunc = function() return EsoPL.Settings.ShowChampionTooltip end,
		setFunc = (function(value)
			EsoPL.Settings.ShowChampionTooltip = value
			
			if value ~= "pl" and EsoPL_doubleNamesChampion then
				EsoPL_doubleNamesChampion(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "header",
		name = "Nazwy przedmiotów",
		width = "full",	--or "half" (optional)
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Przedmioty (wyskakujące okienka)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Umożliwia dostosowanie języka wyświetlania nazw przedmiotów w wyskakujących oknach.",
		getFunc = function() return EsoPL.Settings.ShowItemsNamesTooltip end,
		setFunc = (function(value)
			EsoPL.Settings.ShowItemsNamesTooltip = value
			
			if value ~= "pl" and EsoPL_doubleNamesItems then
				EsoPL_doubleNamesItems(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Zaklęcia (wyskakujące okna)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Pozwala dostosować język wyświetlania nazw zaklęć w wyskakujących oknach.",
		getFunc = function() return EsoPL.Settings.ShowItemsEnchantsTooltip end,
		setFunc = (function(value)
			EsoPL.Settings.ShowItemsEnchantsTooltip = value
			
			if value ~= "pl" and EsoPL_doubleNamesItems then
				EsoPL_doubleNamesItems(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Cechy (wyskakujące okna)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Umożliwia dostosowanie języka wyświetlania nazw cech w wyskakujących oknach",
		getFunc = function() return EsoPL.Settings.ShowItemsTraitsTooltip end,
		setFunc = (function(value)
			EsoPL.Settings.ShowItemsTraitsTooltip = value
			
			if value ~= "pl" and EsoPL_doubleNamesItems then
				EsoPL_doubleNamesItems(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Zestawy (wyskakujące okna)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Umożliwia dostosowanie języka wyświetlania dla nazw zestawów w wyskakujących oknach.",
		getFunc = function() return EsoPL.Settings.ShowItemsSetsTooltip end,
		setFunc = (function(value)
			EsoPL.Settings.ShowItemsSetsTooltip = value
			
			if value ~= "pl" and EsoPL_doubleNamesItems then
				EsoPL_doubleNamesItems(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "header",
		name = "Nazwy kolekcji zestawów",
		width = "full",	--or "half" (optional)
	})
	
	table.insert(optionsTable, {
		type = "checkbox",
		name = "Wyszukiwanie w dwóch językach",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		tooltip = "Umożliwia używanie angielskich nazw zestawów podczas przeszukiwania menu kolekcji.",
		getFunc = function() return EsoPL.Settings.EnglishSearch end,
		setFunc = (function(value)
			EsoPL.Settings.EnglishSearch = value
			
			if value and EsoPL_doubleNamesCollections then
				EsoPL_doubleNamesCollections(EsoPL)
			end
		end),
	})
	
	table.insert(optionsTable, {
		type = "dropdown",
		name = "Zestawy (Menu)",
		warning = (function()
			if EsoPL:IsDBOld() then
				return "Wymagana aktualizacja bazy danych."
			else
				return false
			end
		end),
		disabled = function() return EsoPL:IsDBOld() end,
		choices = {EsoPL.DropdownParameters["pl"], EsoPL.DropdownParameters["plen"], EsoPL.DropdownParameters["enpl"], EsoPL.DropdownParameters["en"]},
		choicesValues = {"pl", "plen", "enpl", "en"},
		tooltip = "Umożliwia dostosowanie języka wyświetlania nazw zestawów w menu kolekcji.",
		getFunc = function() return EsoPL.Settings.ShowCollectionsSetsMenu end,
		setFunc = (function(value)
			EsoPL.Settings.ShowCollectionsSetsMenu = value
			
			if value ~= "pl" and EsoPL_doubleNamesCollections then
				EsoPL_doubleNamesCollections(EsoPL)
			end
			ITEM_SET_COLLECTIONS_DATA_MANAGER:SortTopLevelCategories()
			ITEM_SET_COLLECTIONS_DATA_MANAGER:FireCallbacks("CollectionsUpdated")
		end),
	})
	
	table.insert(optionsTable, {
		type = "header",
		name = "Inne",
		width = "full",	--or "half" (optional)
	})
	
	table.insert(optionsTable, {
		type = "checkbox",
			name = "Zapisz język gry z poprzedniej rozgrywki",
			tooltip = "Gdy ta opcja jest włączona, gra zostanie uruchomiona w języku wybranym podczas poprzedniej rozgrywki.",
			getFunc = function()
				if EsoPL.Settings.LastSession == true then
					SetCVar("IgnorePatcherLanguageSetting", "1")
					return true
				else
					return false
				end
			return EsoPL.Settings.LastSession end,
			setFunc = function(value)
				EsoPL.Settings.LastSession = value
				if value == true then
					SetCVar("IgnorePatcherLanguageSetting", "1")
				else
					SetCVar("IgnorePatcherLanguageSetting", "0")
				end
			end,
	})
		
	self.LAM:RegisterOptionControls(panelData.name, optionsTable)
end