local checkboxes = 0
local settings = {
    {
        settingText = "Aktiviere Developer Modus",
        settingKey = "enableDebugLogs",
        settingTooltip = "Zeigt dir Nachrichten im Chat, die vor allem für Problembehebungen nützlich sind."
    },
    {
        settingText = "Aktiviere Fast-Reload",
        settingKey = "enableRLCommand",
        settingTooltip = "Lade dein Interface mit /rl statt mit /reload neu."
    },
    {
        settingText = "Aktiviere Level-Up Sound",
        settingKey = "enableLevelUpSound",
        settingTooltip = "Spielt einen Sound ab, wenn du ein neues Level erreichst."
    },
    {
        settingText = "Zeige das Addon-Fenster bei Login",
        settingKey = "showFrameAtLogin",
        settingTooltip = "Zeigt das Addon-Fenster bei jedem Login direkt an."
    },
    {
        settingText = "Aktiviere Login-Nachricht",
        settingKey = "enableLoginMessage",
        settingTooltip = "Zeigt dir an, wie oft du dich bereits auf diesem Charakter angemeldet hast."
    },
    {
        settingText = "Aktiviere Versionsnachricht",
        settingKey = "announceBuildVersion",
        settingTooltip = "Zeigt dir im Chat die aktuelle Version deines Spiels an."
    },
    {
        settingText = "Aktiviere Mob-Kills",
        settingKey = "enalbeMobKills",
        settingTooltip = "Zeigt dir im Chat an, wie viele Mobs du schon getötet hast. Bei deaktivierung wird trotzdem weiterhin mitgezählt."
    },
    {
        settingText = "Aktiviere Tode",
        settingKey = "enableDied",
        settingTooltip = "Werde im Chat benachrichtigt, wie oft du schon insgesamt gestorben bist."
    },
    {
        settingText = "Aktiviere Quest Auto-Accept",
        settingKey = "enableAutoAccept",
        settingTooltip = "Akzeptiert automatisch Quests, wenn sie angeboten werden."
    },
    {
        settingText = "Aktiviere Quest Auto-Accept (Dailys)",
        settingKey = "enableAutoAcceptDaily",
        settingTooltip = "Akzeptiert automatisch Quests, wenn sie angeboten werden (Dailys)."
    },
    {
        settingText = "Aktiviere Quest Auto-Accept (Weeklys)",
        settingKey = "enableAutoAcceptWeekly",
        settingTooltip = "Akzeptiert automatisch Quests, wenn sie angeboten werden (Weeklys)."
    },
    {
        settingText = "Automatisch reparieren?",
        settingKey = "enableAutoRepair",
        settingTooltip = "Repariert deine Ausrüstung automatisch, sobald du den passenden Händler besuchst."
    },
    {
        settingText = "Reparieren aus der Gildenbank?",
        settingKey = "enableAutoRepairGuild",
        settingTooltip = "Aktivieren, um deine Reparaturkosten aus der Gildenbank zu bezahlen, sofern möglich."
    },
    {
        settingText = "Zeige Repair-Message",
        settingKey = "enableAutoRepairMessage",
        settingTooltip = "Zeigt die Kosten der Reparatur im Chat an."
    },
    {
        settingText = "Graue Gegenstände automatisch verkaufen",
        settingKey = "enableAutoSellGreys",
        settingTooltip = "Verkauft alle grauen Gegenstände aus deiner Tasche automatisch."
    }
}

local settingsFrame = CreateFrame("Frame", "KBSettings", UIParent, "BasicFrameTemplateWithInset")
settingsFrame:SetSize(500, 500)
settingsFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 0)

settingsFrame.TitleBg:SetHeight(30)
settingsFrame.title = settingsFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
settingsFrame.title:SetPoint("TOPLEFT", settingsFrame.TitleBg, "TOPLEFT", 5, -5)
settingsFrame.title:SetText("Kevs Basics Einstellungen")
settingsFrame:Hide()

settingsFrame:EnableMouse(true)
settingsFrame:SetMovable(true)
settingsFrame:RegisterForDrag("LeftButton")

settingsFrame:SetScript("OnDragStart", function(self)
	self:StartMoving()
end)

settingsFrame:SetScript("OnDragStop", function(self)
	self:StopMovingOrSizing()
end)

settingsFrame:SetScript("OnHide", function()
    PlaySound(808)
end)

settingsFrame:SetScript("OnShow", function()
    PlaySound(809)
end)

local function CreateCheckbox(text, key, tooltip)
    local checkbox = CreateFrame("CheckButton", "KBCB" .. checkboxes, settingsFrame, "UICheckButtonTemplate")
    checkbox.Text:SetText(text)
    checkbox:SetPoint("TOPLEFT", settingsFrame, "TOPLEFT", 10, -30 + (checkboxes*-30)) 

    if KevsBasicsDB[key] == nil then
        KevsBasicsDB[key] = true
    end

    checkbox:SetChecked(KevsBasicsDB[key])

    checkbox:SetScript("OnEnter", function(self)
        GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
        GameTooltip:SetText(tooltip, nil, nil, nil, nil, true)
    end)

    checkbox:SetScript("OnLeave", function(self)
        GameTooltip:Hide()
    end)

    checkbox:SetScript("OnClick", function(self)
        KevsBasicsDB[key] = self:GetChecked()
    end)

    checkboxes = checkboxes + 1

    return checkbox
end

local eventListenerFrame = CreateFrame("Frame", "KBEventListener", UIParent)

eventListenerFrame:RegisterEvent("PLAYER_LOGIN")
eventListenerFrame:SetScript("OnEvent", function(self, event)
    if event == "PLAYER_LOGIN" then
        if not KevsBasicsDB then
            KevsBasicsDB = {}
        end

        for _, setting in pairs(settings) do
            CreateCheckbox(setting.settingText, setting.settingKey, setting.settingTooltip)
        end
    end
end)

local addonButton = LibStub("AceAddon-3.0"):NewAddon("KevsBasics")
MyMinimapButton = LibStub("LibDBIcon-1.0", true)

local miniButton = LibStub("LibDataBroker-1.1"):NewDataObject("KevsBasics", {
        type = "data source",
        text = "Kevs Basics",
        icon = "Interface\\AddOns\\KevsBasics\\icons\\Hammer_Icon.tga",
        OnClick = function(self, btn)
            if btn == "LeftButton" then
                KB:ToggleMainFrame()
            elseif btn == "RightButton" then
                if settingsFrame:IsShown() then
                    settingsFrame:Hide()
                else
                    settingsFrame:Show()
                end
            end
        end,
        OnTooltipShow = function(tooltip)
            if not tooltip or not tooltip.AddLine then
                return
            end

            tooltip:AddLine("Kevs Basics\n\nLinke-Maus: Öffnet das Addon\nRechte-Maus: Öffnet die Einstellungen", nil, nil, nil, nil)
        end,
    }
)

function addonButton:OnInitialize()
    self.db = LibStub("AceDB-3.0"):New("KBMinimapButtonPOS", {
        profile = {
            minimap = {
                hide = false,
            },
        },
    })

    MyMinimapButton:Register("KevsBasics", miniButton, self.db.profile.minimap)
end

MyMinimapButton:Show("KevsBasics")

-- Auch mit ESC schließbar
table.insert(UISpecialFrames, "KBSettings")