local addonName, _ns = ...
local AC = _G.ArenaCore
if not AC then return end

local V = AC.Vanity

local CUSTOM_FONT = "Interface\\AddOns\\ArenaCore\\Media\\Fonts\\arenacore.ttf"

local function ApplyAtlasCardBg(frame)
    if not frame then return end

    local COLORS = AC.COLORS or {}

    local fill = frame:CreateTexture(nil, "BACKGROUND", nil, 2)
    local bgColor = COLORS.HEADER_BG or {0.102, 0.102, 0.102, 1}
    fill:SetColorTexture(bgColor[1], bgColor[2], bgColor[3], bgColor[4] or 1)
    fill:SetPoint("TOPLEFT", 1, -1)
    fill:SetPoint("BOTTOMRIGHT", -1, 1)
    frame.__acFill = fill
    frame.__acFillIsGroupBox = true

    local borderFrame = CreateFrame("Frame", nil, frame)
    borderFrame:SetAllPoints(frame)

    local uniqueLevel = frame:GetFrameLevel() + 1
    if frame:GetParent() then
        uniqueLevel = uniqueLevel + (frame:GetFrameLevel() % 3)
    end
    borderFrame:SetFrameLevel(uniqueLevel)

    local purpleTop = borderFrame:CreateTexture(nil, "BORDER", nil, 1)
    purpleTop:SetColorTexture(0.545, 0.271, 1.000, 1)
    purpleTop:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0)
    purpleTop:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, 0)
    purpleTop:SetHeight(1)
    if purpleTop.SetSnapToPixelGrid then purpleTop:SetSnapToPixelGrid(true) end
    if purpleTop.SetTexelSnappingBias then purpleTop:SetTexelSnappingBias(0) end

    local grayTop = borderFrame:CreateTexture(nil, "BORDER", nil, 0)
    grayTop:SetColorTexture(0.278, 0.278, 0.278, 0.9)
    grayTop:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, -1)
    grayTop:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, -1)
    grayTop:SetHeight(1)

    local grayBottom = borderFrame:CreateTexture(nil, "BORDER", nil, 0)
    grayBottom:SetColorTexture(0.278, 0.278, 0.278, 0.9)
    grayBottom:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, 0)
    grayBottom:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 0, 0)
    grayBottom:SetHeight(1)

    local grayLeft = borderFrame:CreateTexture(nil, "BORDER", nil, 0)
    grayLeft:SetColorTexture(0.278, 0.278, 0.278, 0.9)
    grayLeft:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0)
    grayLeft:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, 0)
    grayLeft:SetWidth(1)

    local grayRight = borderFrame:CreateTexture(nil, "BORDER", nil, 0)
    grayRight:SetColorTexture(0.278, 0.278, 0.278, 0.9)
    grayRight:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, 0)
    grayRight:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 0, 0)
    grayRight:SetWidth(1)

    frame.__acBorderFrame = borderFrame
end

local function ApplySurrenderSetting()
    local enabled = AC and AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures and AC.DB.profile.moreFeatures.surrenderGGEnabled

    SlashCmdList.ACGG = nil
    _G.SLASH_ACGG1 = nil

    if enabled and SurrenderArena then
        _G.SLASH_ACGG1 = "/gg"
        SlashCmdList.ACGG = function()
            print("|cff8B45FFArenaCore:|r /gg command called - attempting surrender...")
            SurrenderArena()
        end
    elseif enabled and not SurrenderArena then
        print("|cffFF0000ArenaCore:|r Surrender enabled but SurrenderArena function not found")
    end
end

local function ShowFontReloadPopup(fontType)
    local popup = CreateFrame("Frame", "ArenaCoreFontReloadPopup", UIParent)
    popup:SetSize(400, 180)
    popup:SetPoint("CENTER")
    popup:SetFrameStrata("FULLSCREEN_DIALOG")
    popup:SetFrameLevel(9999)

    local bg = popup:CreateTexture(nil, "BACKGROUND")
    bg:SetAllPoints()
    bg:SetTexture("Interface\\AddOns\\ArenaCore\\Media\\button-hide.tga")
    bg:SetVertexColor(1, 0.2, 0.2, 1)

    local overlay = popup:CreateTexture(nil, "BORDER")
    overlay:SetAllPoints()
    overlay:SetColorTexture(0, 0, 0, 0.4)

    local title = popup:CreateFontString(nil, "OVERLAY")
    title:SetFont("Fonts\\FRIZQT__.TTF", 16, "")
    title:SetPoint("TOP", 0, -15)
    title:SetTextColor(1, 1, 1, 1)
    title:SetText("RELOAD REQUIRED")

    local message = popup:CreateFontString(nil, "OVERLAY")
    message:SetFont("Fonts\\FRIZQT__.TTF", 12, "")
    message:SetPoint("TOP", title, "BOTTOM", 0, -20)
    message:SetWidth(360)
    message:SetJustifyH("CENTER")

    local messageText = ""
    if fontType == "global" then
        messageText = "Global font setting changed.\n\nYou must reload your UI for the font changes to fully take effect.\n\nClick OK to reload now, or Cancel to reload later."
    elseif fontType == "actionbar" then
        messageText = "Action bar font setting changed.\n\nYou must reload your UI for the font changes to fully take effect.\n\nClick OK to reload now, or Cancel to reload later."
    end
    message:SetText(messageText)

    local okBtn = AC:CreateTexturedButton(popup, 120, 35, "OK (Reload)", "button-save")
    okBtn:SetPoint("BOTTOM", -65, 15)
    okBtn:SetScript("OnClick", function()
        popup:Hide()
        ReloadUI()
    end)

    local cancelBtn = AC:CreateTexturedButton(popup, 120, 35, "Cancel", "button-cancel")
    cancelBtn:SetPoint("BOTTOM", 65, 15)
    cancelBtn:SetScript("OnClick", function()
        popup:Hide()
    end)

    popup:Show()
end

local function ApplyGlobalFont(enabled, skipPopup)
    if enabled then
        if AC.GlobalFont then
            local fontPath = "Interface/AddOns/ArenaCore/Media/Fonts/arenacore.ttf"
            local useOutline = AC.DB.profile.moreFeatures.globalFontOutline ~= false
            local useShadow = AC.DB.profile.moreFeatures.globalFontShadow ~= false
            local fontFlags = useOutline and "OUTLINE" or ""

            AC.GlobalFont:UpdateSettings(fontPath, fontFlags, useShadow)
            AC.GlobalFont:Enable(false)
        end

        if AC.ApplyActionBarFonts then
            AC:ApplyActionBarFonts()
        end

        if not skipPopup then
            ShowFontReloadPopup("global")
        end
    else
        if AC.GlobalFont then
            AC.GlobalFont:Disable()
        end

        if AC.RevertActionBarFonts then
            AC:RevertActionBarFonts()
        end

        if not skipPopup then
            ShowFontReloadPopup("global")
        end
    end
end

local function ApplyActionBarFont(enabled, skipPopup)
    if enabled then
        if AC.GlobalFont then
            local fontPath = "Interface/AddOns/ArenaCore/Media/Fonts/arenacore.ttf"
            local useOutline = AC.DB.profile.moreFeatures.globalFontOutline ~= false
            local useShadow = AC.DB.profile.moreFeatures.globalFontShadow ~= false
            local fontFlags = useOutline and "OUTLINE" or ""

            AC.GlobalFont:UpdateSettings(fontPath, fontFlags, useShadow)
            AC.GlobalFont:Enable(true)
        end

        if not skipPopup then
            ShowFontReloadPopup("actionbar")
        end
    else
        if AC.GlobalFont then
            AC.GlobalFont:Disable()
        end

        if not skipPopup then
            ShowFontReloadPopup("actionbar")
        end
    end
end

local function ApplyToSingleActionButton(btn, scale, offsetX, offsetY)
    if not btn then return end
    local hk = btn.HotKey
    if not hk then return end

    local arenaCoreFontPath = "Interface\\AddOns\\ArenaCore\\Media\\Fonts\\arenacore.ttf"
    local baseSize = 10
    local newSize = math.max(1, math.floor(baseSize * scale))
    hk:SetFont(arenaCoreFontPath, newSize, "OUTLINE")

    hk:ClearAllPoints()
    hk:SetPoint("TOPRIGHT", btn, "TOPRIGHT", offsetX, offsetY)

    if not hk._AC_ABF_Hooked then
        local originalSetText = hk.SetText
        hk.SetText = function(self, text)
            originalSetText(self, text)

            local globalEnabled = _G.ArenaCoreDB and _G.ArenaCoreDB.profile and _G.ArenaCoreDB.profile.moreFeatures and _G.ArenaCoreDB.profile.moreFeatures.globalFontEnabled
            if not globalEnabled then return end

            local db = _G.ArenaCoreDB and _G.ArenaCoreDB.profile and _G.ArenaCoreDB.profile.actionBarFont
            if not db then return end

            local currentScale = (db.scale or 100) / 100
            local currentOffsetX = db.horizontal or 0
            local currentOffsetY = db.vertical or 0

            local newSize2 = math.max(1, math.floor(baseSize * currentScale))
            self:SetFont(arenaCoreFontPath, newSize2, "OUTLINE")
            self:ClearAllPoints()
            self:SetPoint("TOPRIGHT", btn, "TOPRIGHT", currentOffsetX, currentOffsetY)
        end
        hk._AC_ABF_Hooked = true
    end
end

function AC:ApplyActionBarFonts()
    local db = AC.DB and AC.DB.profile and AC.DB.profile.actionBarFont
    if not db then return end

    local scale = (db.scale or 100) / 100
    local offsetX = db.horizontal or 0
    local offsetY = db.vertical or 0

    local bars = {
        "ActionButton", "MultiBarBottomLeftButton", "MultiBarBottomRightButton",
        "MultiBarRightButton", "MultiBarLeftButton", "MultiBar5Button",
        "MultiBar6Button", "MultiBar7Button", "StanceButton"
    }

    for _, bar in pairs(bars) do
        for i = 1, 12 do
            local button = _G[bar .. i]
            if button then
                ApplyToSingleActionButton(button, scale, offsetX, offsetY)
            end
        end
    end
end

function AC:RevertActionBarFonts()
    local bars = {
        "ActionButton", "MultiBarBottomLeftButton", "MultiBarBottomRightButton",
        "MultiBarRightButton", "MultiBarLeftButton", "MultiBar5Button",
        "MultiBar6Button", "MultiBar7Button", "StanceButton"
    }

    for _, bar in pairs(bars) do
        for i = 1, 12 do
            local button = _G[bar .. i]
            if button and button.HotKey then
                local hk = button.HotKey
                local defaultFont = NumberFontNormal or GameFontNormalSmall
                if defaultFont then
                    local font, size, flags = defaultFont:GetFont()
                    hk:SetFont(font, size, flags)
                end
                hk:ClearAllPoints()
                hk:SetPoint("TOPRIGHT", button, "TOPRIGHT", 0, 0)
            end
        end
    end
end

function AC:SetupActionBarHook()
    if self.actionBarHookSetup then return end
    self.actionBarHookSetup = true

    local eventFrame = _G._AC_ABFont or CreateFrame("Frame")
    _G._AC_ABFont = eventFrame

    eventFrame:RegisterEvent("PLAYER_LOGIN")
    eventFrame:RegisterEvent("UPDATE_BINDINGS")

    eventFrame:SetScript("OnEvent", function(_, event)
        if event == "PLAYER_LOGIN" then
            local enabled = AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures and AC.DB.profile.moreFeatures.globalFontEnabled
            if enabled then
                AC:ApplyActionBarFonts()
            end
        elseif event == "UPDATE_BINDINGS" then
            C_Timer.After(0.2, function()
                local enabled = AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures and AC.DB.profile.moreFeatures.globalFontEnabled
                if enabled then
                    AC:ApplyActionBarFonts()
                end
            end)
        end
    end)

    if QuickKeybindFrame then
        QuickKeybindFrame:HookScript("OnHide", function()
            local enabled = AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures and AC.DB.profile.moreFeatures.globalFontEnabled
            if enabled then
                AC:ApplyActionBarFonts()
            end
        end)
    end

    local enabled = AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures and AC.DB.profile.moreFeatures.globalFontEnabled
    if enabled then
        AC:ApplyActionBarFonts()
    end
end

local function CreateMiscTabButton(parent, text, width, height)
    local COLORS = AC.COLORS or {}

    local btn = CreateFrame("Button", nil, parent)
    btn:SetSize(width or 90, height or 26)

    local bg = AC:CreateFlatTexture(btn, "BACKGROUND", 0, {0.06, 0.06, 0.06, 1}, 1)
    bg:SetAllPoints()
    btn.bg = bg

    local hover = AC:CreateFlatTexture(btn, "ARTWORK", 1, COLORS.BORDER_LIGHT or {0.278, 0.278, 0.278, 1}, 0.15)
    hover:SetAllPoints()
    hover:Hide()
    btn.hover = hover

    local glow = btn:CreateTexture(nil, "OVERLAY")
    glow:SetTexture("Interface\\AddOns\\ArenaCore\\Media\\UI\\tab-purple-matte.tga")
    glow:SetAllPoints()
    glow:SetBlendMode("ADD")
    glow:SetAlpha(0)
    btn.glow = glow

    local function CreateGlowLine()
        local t = btn:CreateTexture(nil, "OVERLAY")
        local c = COLORS.PRIMARY or {0.545, 0.271, 1.000, 1}
        t:SetColorTexture(c[1], c[2], c[3], 1)
        t:SetDrawLayer("OVERLAY")
        if t.SetSnapToPixelGrid then
            t:SetTexelSnappingBias(0)
            t:SetSnapToPixelGrid(false)
        end
        t:Hide()
        return t
    end

    local outlineTop = CreateGlowLine()
    outlineTop:SetPoint("TOPLEFT", btn, "TOPLEFT", 1, 0)
    outlineTop:SetPoint("TOPRIGHT", btn, "TOPRIGHT", -1, 0)
    outlineTop:SetHeight(1)

    local outlineBottom = CreateGlowLine()
    outlineBottom:SetPoint("BOTTOMLEFT", btn, "BOTTOMLEFT", 1, 1)
    outlineBottom:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -1, 1)
    outlineBottom:SetHeight(1)

    local outlineLeft = CreateGlowLine()
    outlineLeft:SetPoint("TOPLEFT", btn, "TOPLEFT", 0, -1)
    outlineLeft:SetPoint("BOTTOMLEFT", btn, "BOTTOMLEFT", 0, 1)
    outlineLeft:SetWidth(1)

    local outlineRight = CreateGlowLine()
    outlineRight:SetPoint("TOPRIGHT", btn, "TOPRIGHT", 0, -1)
    outlineRight:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", 0, 1)
    outlineRight:SetWidth(1)

    btn.outlineTop = outlineTop
    btn.outlineBottom = outlineBottom
    btn.outlineLeft = outlineLeft
    btn.outlineRight = outlineRight

    local label = AC:CreateStyledText(btn, text or "", 11, (COLORS.TEXT_2 or {0.706, 0.706, 0.706, 1}), "OVERLAY", "")
    label:SetPoint("CENTER", 0, 0)
    btn.label = label

    btn.isSelected = false

    function btn:SetSelected(selected)
        self.isSelected = selected and true or false

        if self.isSelected then
            self.bg:SetColorTexture(0.11, 0.11, 0.11, 1)
            self.hover:Hide()
            self.outlineTop:Show()
            self.outlineBottom:Show()
            self.outlineLeft:Show()
            self.outlineRight:Show()
            if self.glow then
                self.glow:SetAlpha(0.22)
            end
            self.label:SetTextColor((COLORS.TEXT and COLORS.TEXT[1]) or 1, (COLORS.TEXT and COLORS.TEXT[2]) or 1, (COLORS.TEXT and COLORS.TEXT[3]) or 1, 1)
        else
            self.bg:SetColorTexture(0.06, 0.06, 0.06, 1)
            self.outlineTop:Hide()
            self.outlineBottom:Hide()
            self.outlineLeft:Hide()
            self.outlineRight:Hide()
            if self.glow then
                self.glow:SetAlpha(0)
            end
            self.label:SetTextColor((COLORS.TEXT_2 and COLORS.TEXT_2[1]) or 0.706, (COLORS.TEXT_2 and COLORS.TEXT_2[2]) or 0.706, (COLORS.TEXT_2 and COLORS.TEXT_2[3]) or 0.706, 1)
        end
    end

    btn:SetScript("OnEnter", function(selfBtn)
        if not selfBtn.isSelected then
            selfBtn.hover:Show()
            selfBtn.outlineTop:Show()
            selfBtn.outlineBottom:Show()
            selfBtn.outlineLeft:Show()
            selfBtn.outlineRight:Show()
            if selfBtn.glow then
                selfBtn.glow:SetAlpha(0.22)
            end
            selfBtn.label:SetTextColor((COLORS.TEXT and COLORS.TEXT[1]) or 1, (COLORS.TEXT and COLORS.TEXT[2]) or 1, (COLORS.TEXT and COLORS.TEXT[3]) or 1, 1)
        end
    end)

    btn:SetScript("OnLeave", function(selfBtn)
        if not selfBtn.isSelected then
            selfBtn.hover:Hide()
            selfBtn.outlineTop:Hide()
            selfBtn.outlineBottom:Hide()
            selfBtn.outlineLeft:Hide()
            selfBtn.outlineRight:Hide()
            if selfBtn.glow then
                selfBtn.glow:SetAlpha(0)
            end
            selfBtn.label:SetTextColor((COLORS.TEXT_2 and COLORS.TEXT_2[1]) or 0.706, (COLORS.TEXT_2 and COLORS.TEXT_2[2]) or 0.706, (COLORS.TEXT_2 and COLORS.TEXT_2[3]) or 0.706, 1)
        end
    end)

    return btn
end

local function ClearContainerChildren(container)
    if not container then return end
    local children = { container:GetChildren() }
    for _, child in ipairs(children) do
        if child then
            child:Hide()
            child:ClearAllPoints()
            child:SetParent(nil)
        end
    end
end

local function CreateMiscPage(container)
    if not container then return end

    if V and V.EnsureMottoStrip then
        V:EnsureMottoStrip(container)
    end

    local COLORS = AC.COLORS or {}

    local tabBar = CreateFrame("Frame", nil, container)
    tabBar:SetHeight(84)
    if tabBar.SetClipsChildren then
        tabBar:SetClipsChildren(false)
    end
    if container._mottoStrip then
        tabBar:SetPoint("TOPLEFT", container._mottoStrip, "BOTTOMLEFT", 12, -10)
        tabBar:SetPoint("TOPRIGHT", container._mottoStrip, "BOTTOMRIGHT", -12, -10)
    else
        tabBar:SetPoint("TOPLEFT", 12, -12)
        tabBar:SetPoint("TOPRIGHT", -12, -12)
    end

    local tabBorder = AC:CreateFlatTexture(tabBar, "BACKGROUND", 1, COLORS.BORDER_LIGHT, 0.6)
    tabBorder:SetAllPoints()
    local tabFill = AC:CreateFlatTexture(tabBar, "BACKGROUND", 2, COLORS.INPUT_DARK, 1)
    tabFill:SetPoint("TOPLEFT", 1, -1)
    tabFill:SetPoint("BOTTOMRIGHT", -1, 1)
    tabBorder.__acSkipThemeRefresh = true
    tabFill.__acSkipThemeRefresh = true

    local contentRoot = CreateFrame("Frame", nil, container)
    contentRoot:SetPoint("TOPLEFT", tabBar, "BOTTOMLEFT", 0, -10)
    contentRoot:SetPoint("TOPRIGHT", tabBar, "BOTTOMRIGHT", 0, -10)
    contentRoot:SetPoint("BOTTOMLEFT", 0, 0)
    contentRoot:SetPoint("BOTTOMRIGHT", 0, 0)

    local pages = {
        { id = "general", text = "General" },
        { id = "themes", text = "UI Themes" },
        { id = "font", text = "Font" },
        { id = "coming1", text = "Coming Soon" },
        { id = "coming2", text = "Coming Soon" },
        { id = "coming3", text = "Coming Soon" },
    }

    local activeTab = "general"
    local tabs = {}
    local contentFrames = {}

    local function LoadComingSoonContent(pageId, f)
        if not f then return end
        local title = AC:CreateStyledText(f, "Coming Soon...", 16, (COLORS.TEXT or {1, 1, 1, 1}), "OVERLAY", "")
        title:SetPoint("TOP", 0, -20)

        local desc = AC:CreateStyledText(f, "This feature is planned for a future update.", 12, (COLORS.TEXT_2 or {0.706, 0.706, 0.706, 1}), "OVERLAY", "")
        desc:SetPoint("TOP", title, "BOTTOM", 0, -15)
        desc:SetJustifyH("CENTER")
    end

    local function LoadGeneralContent(f)
        local y = -12

        local tooltipsCard = CreateFrame("Frame", nil, f)
        tooltipsCard:SetPoint("TOPLEFT", 12, y)
        tooltipsCard:SetPoint("TOPRIGHT", -12, y)
        tooltipsCard:SetHeight(130)
        ApplyAtlasCardBg(tooltipsCard)

        local tooltipTitle = AC:CreateStyledText(tooltipsCard, "TOOLTIPS", 13, COLORS.PRIMARY, "OVERLAY", CUSTOM_FONT)
        tooltipTitle:SetPoint("TOPLEFT", 15, -18)

        local disabledMessage = AC:CreateStyledText(tooltipsCard, "Will come back when Blizzard fixes their Tooltips errors", 9, {1, 0.4, 0.4, 1}, "OVERLAY", CUSTOM_FONT)
        disabledMessage:SetPoint("LEFT", tooltipTitle, "RIGHT", 10, 0)
        disabledMessage:SetPoint("RIGHT", tooltipsCard, "RIGHT", -20, 0)
        disabledMessage:SetJustifyH("LEFT")
        if disabledMessage.SetWordWrap then disabledMessage:SetWordWrap(true) end

        local checkboxRow2 = CreateFrame("Frame", nil, tooltipsCard)
        checkboxRow2:SetPoint("TOPLEFT", tooltipTitle, "BOTTOMLEFT", 0, -14)
        checkboxRow2:SetPoint("RIGHT", tooltipsCard, "RIGHT", -20, 0)
        checkboxRow2:SetHeight(26)

        local checkboxLabel2 = AC:CreateStyledText(checkboxRow2, "Show Spell/Item IDs in Tooltips", 12, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        checkboxLabel2:SetPoint("LEFT", 0, 0)
        checkboxLabel2:SetPoint("RIGHT", -46, 0)
        if checkboxLabel2.SetWordWrap then checkboxLabel2:SetWordWrap(true) end
        checkboxLabel2:SetJustifyH("LEFT")

        local db = (AC.DB and AC.DB.profile and AC.DB.profile.tooltipIDs) or {}
        local checkbox2 = AC:CreateFlatCheckbox(checkboxRow2, 20, db.enabled ~= false)
        checkbox2:SetPoint("RIGHT", -10, 0)
        checkbox2.checkButton:Disable()
        checkbox2.checkButton:SetScript("OnClick", nil)

        local description2 = AC:CreateStyledText(tooltipsCard, "Shows spell and item IDs in tooltips throughout the game.\nAlways enabled in ArenaCore editors for spell management.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description2:SetPoint("TOPLEFT", checkboxRow2, "BOTTOMLEFT", 0, -10)
        description2:SetPoint("TOPRIGHT", checkboxRow2, "BOTTOMRIGHT", 0, -10)
        description2:SetJustifyH("LEFT"); description2:SetJustifyV("TOP")
        if description2.SetWordWrap then description2:SetWordWrap(true) end
        description2:SetWidth(tooltipsCard:GetWidth() - 40)

        y = y - tooltipsCard:GetHeight() - 12

        local surrenderCard = CreateFrame("Frame", nil, f)
        surrenderCard:SetPoint("TOPLEFT", 12, y)
        surrenderCard:SetPoint("TOPRIGHT", -12, y)
        surrenderCard:SetHeight(120)
        ApplyAtlasCardBg(surrenderCard)

        local surrenderTitle = AC:CreateStyledText(surrenderCard, "SURRENDER", 13, COLORS.PRIMARY, "OVERLAY", CUSTOM_FONT)
        surrenderTitle:SetPoint("TOPLEFT", 15, -18)

        local checkboxRow4 = CreateFrame("Frame", nil, surrenderCard)
        checkboxRow4:SetPoint("TOPLEFT", surrenderTitle, "BOTTOMLEFT", 0, -14)
        checkboxRow4:SetPoint("RIGHT", surrenderCard, "RIGHT", -20, 0)
        checkboxRow4:SetHeight(26)

        local checkboxLabel4 = AC:CreateStyledText(checkboxRow4, "Surrender /gg", 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
        checkboxLabel4:SetPoint("LEFT", 0, 0)
        checkboxLabel4:SetPoint("RIGHT", -46, 0)
        if checkboxLabel4.SetWordWrap then checkboxLabel4:SetWordWrap(true) end
        checkboxLabel4:SetJustifyH("LEFT")

        local dbSurr = (AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures) or {}
        local checkbox4 = AC:CreateFlatCheckbox(checkboxRow4, 20, (dbSurr.surrenderGGEnabled ~= false))
        checkbox4:SetPoint("RIGHT", -10, 0)
        checkbox4:SetScript("OnClick", function(selfBtn)
            local enabled = selfBtn:GetChecked()
            AC.DB = AC.DB or {}; AC.DB.profile = AC.DB.profile or {}; AC.DB.profile.moreFeatures = AC.DB.profile.moreFeatures or {}
            AC.DB.profile.moreFeatures.surrenderGGEnabled = enabled
            ApplySurrenderSetting()
        end)

        local description4 = AC:CreateStyledText(surrenderCard, "Enable /gg feature inside of arena to easily surrender.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description4:SetPoint("TOPLEFT", checkboxRow4, "BOTTOMLEFT", 0, -10)
        description4:SetPoint("TOPRIGHT", checkboxRow4, "BOTTOMRIGHT", 0, -10)
        description4:SetJustifyH("LEFT"); description4:SetJustifyV("TOP")
        if description4.SetWordWrap then description4:SetWordWrap(true) end
        description4:SetWidth(surrenderCard:GetWidth() - 40)

        y = y - surrenderCard:GetHeight() - 12

        local chatCard = CreateFrame("Frame", nil, f)
        chatCard:SetPoint("TOPLEFT", 12, y)
        chatCard:SetPoint("TOPRIGHT", -12, y)
        chatCard:SetHeight(140)
        ApplyAtlasCardBg(chatCard)

        local chatMessagesTitle = AC:CreateStyledText(chatCard, "CHAT MESSAGES", 13, COLORS.PRIMARY, "OVERLAY", CUSTOM_FONT)
        chatMessagesTitle:SetPoint("TOPLEFT", 15, -18)

        local checkboxRow5 = CreateFrame("Frame", nil, chatCard)
        checkboxRow5:SetPoint("TOPLEFT", chatMessagesTitle, "BOTTOMLEFT", 0, -14)
        checkboxRow5:SetPoint("RIGHT", chatCard, "RIGHT", -20, 0)
        checkboxRow5:SetHeight(26)

        local checkboxLabel5 = AC:CreateStyledText(checkboxRow5, "Arena Chat Announcements", 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
        checkboxLabel5:SetPoint("LEFT", 0, 0)
        checkboxLabel5:SetPoint("RIGHT", -46, 0)
        if checkboxLabel5.SetWordWrap then checkboxLabel5:SetWordWrap(true) end
        checkboxLabel5:SetJustifyH("LEFT")

        local dbChat = (AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures) or {}
        local checkbox5 = AC:CreateFlatCheckbox(checkboxRow5, 20, (dbChat.chatMessagesEnabled ~= false))
        checkbox5:SetPoint("RIGHT", -10, 0)
        checkbox5:SetScript("OnClick", function(selfBtn)
            local enabled = selfBtn:GetChecked()
            AC.DB = AC.DB or {}; AC.DB.profile = AC.DB.profile or {}; AC.DB.profile.moreFeatures = AC.DB.profile.moreFeatures or {}
            AC.DB.profile.moreFeatures.chatMessagesEnabled = enabled

            if enabled then
                print("|cff8B45FFArena Core:|r Chat messages |cff00FF00ENABLED|r - You will see interrupt and feign death announcements")
            else
                print("|cff8B45FFArena Core:|r Chat messages |cffFF0000DISABLED|r - Interrupt and feign death announcements are now hidden")
            end
        end)

        local description5 = AC:CreateStyledText(chatCard, "Enable chat announcements for interrupts and feign death detection during arena matches.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description5:SetPoint("TOPLEFT", checkboxRow5, "BOTTOMLEFT", 0, -10)
        description5:SetPoint("TOPRIGHT", checkboxRow5, "BOTTOMRIGHT", 0, -10)
        description5:SetJustifyH("LEFT"); description5:SetJustifyV("TOP")
        if description5.SetWordWrap then description5:SetWordWrap(true) end
        description5:SetWidth(chatCard:GetWidth() - 40)
    end

    local function LoadThemesContent(f)
        local themes = {
            { id = "default", name = "Arena Core Default", description = "The classic Arena Core theme", rating = nil, icon = "Interface\\Icons\\INV_Misc_Gear_01" },
            { id = "shade_ui", name = "Shade UI", description = "Premium dark theme inspired by Shade UI addon", rating = 2100, icon = "Interface\\Icons\\Spell_Shadow_Twilight" },
            { id = "elite_2400", name = "Elite", description = "Exclusive theme unlocked at 2400 rating", rating = 2400, icon = "Interface\\Icons\\Achievement_Arena_2v2_7" },
            { id = "rank1_3000", name = "Rank 1", description = "Exclusive theme unlocked at 3000 rating", rating = 3000, icon = "Interface\\Icons\\Achievement_Arena_3v3_7" },
        }

        local settingsGroup = CreateFrame("Frame", nil, f)
        settingsGroup:SetPoint("TOPLEFT", 12, -12)
        settingsGroup:SetPoint("TOPRIGHT", -12, -12)
        settingsGroup:SetHeight(580)
        ApplyAtlasCardBg(settingsGroup)

        local groupTitle = AC:CreateStyledText(settingsGroup, "UNLOCKABLE THEMES", 13, COLORS.PRIMARY, "OVERLAY", CUSTOM_FONT)
        groupTitle:SetPoint("TOPLEFT", 15, -18)

        local productionNotice = AC:CreateStyledText(settingsGroup, "This feature is still under production and will evolve as time goes on.", 10, COLORS.WARNING, "OVERLAY", CUSTOM_FONT)
        productionNotice:SetPoint("TOPLEFT", groupTitle, "BOTTOMLEFT", 0, -6)
        productionNotice:SetPoint("RIGHT", settingsGroup, "RIGHT", -20, 0)
        productionNotice:SetJustifyH("LEFT")
        if productionNotice.SetWordWrap then productionNotice:SetWordWrap(true) end

        local desc = AC:CreateStyledText(settingsGroup, "Unlock exclusive UI themes by reaching rating milestones in PvP.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        desc:SetPoint("TOPLEFT", productionNotice, "BOTTOMLEFT", 0, -6)
        desc:SetJustifyH("LEFT")

        local yOffset = -75

        local function RebuildSelf()
            ClearContainerChildren(f)
            LoadThemesContent(f)
            if AC and AC.UpdateContentHeight then
                C_Timer.After(0.05, function() AC:UpdateContentHeight() end)
            end
        end

        for _, theme in ipairs(themes) do
            local card = CreateFrame("Frame", nil, settingsGroup)
            card:SetPoint("TOPLEFT", 15, yOffset)
            card:SetPoint("TOPRIGHT", -15, yOffset)
            card:SetHeight(100)

            local isUnlocked = (theme.id == "default") or (AC.IsThemeUnlocked and AC:IsThemeUnlocked(theme.id)) or false

            local cardBg = AC:CreateFlatTexture(card, "BACKGROUND", 1, COLORS.INPUT_DARK, 1)
            cardBg:SetAllPoints()

            local borderColor = isUnlocked and COLORS.PRIMARY or COLORS.BORDER
            local cardBorder = AC:CreateFlatTexture(card, "BORDER", 0, borderColor, 1)
            cardBorder:SetAllPoints()

            local cardInner = AC:CreateFlatTexture(card, "BORDER", 1, COLORS.INPUT_DARK, 1)
            cardInner:SetPoint("TOPLEFT", 2, -2)
            cardInner:SetPoint("BOTTOMRIGHT", -2, 2)

            local icon = card:CreateTexture(nil, "ARTWORK")
            icon:SetSize(64, 64)
            icon:SetPoint("LEFT", 15, 0)
            icon:SetTexture(theme.icon)

            if not isUnlocked then
                icon:SetDesaturated(true)
                icon:SetAlpha(0.5)
            end

            local nameColor = isUnlocked and COLORS.PRIMARY or COLORS.TEXT_MUTED
            local themeName = AC:CreateStyledText(card, theme.name, 14, nameColor, "OVERLAY", CUSTOM_FONT)
            themeName:SetPoint("TOPLEFT", icon, "TOPRIGHT", 15, -5)

            local ratingLabel = theme.rating and string.format("Requires %d Rating", theme.rating) or "Always Available"
            local ratingText = AC:CreateStyledText(card, ratingLabel, 11, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
            ratingText:SetPoint("TOPLEFT", themeName, "BOTTOMLEFT", 0, -4)

            local themeDesc = AC:CreateStyledText(card, theme.description, 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
            themeDesc:SetPoint("TOPLEFT", ratingText, "BOTTOMLEFT", 0, -6)
            themeDesc:SetPoint("TOPRIGHT", card, "TOPRIGHT", -120, 0)
            themeDesc:SetJustifyH("LEFT")
            if themeDesc.SetWordWrap then themeDesc:SetWordWrap(true) end

            local btn = AC:CreateProfileStyleButton(card, 100, 32, "", "primary", 12)
            btn:SetPoint("RIGHT", -15, 0)

            if isUnlocked then
                local isActive = AC.ThemeManager and AC.ThemeManager:IsThemeActive(theme.id) or false

                if isActive then
                    local btnText = AC:CreateStyledText(btn, "ACTIVE", 12, COLORS.TEXT, "OVERLAY", CUSTOM_FONT)
                    btnText:SetPoint("CENTER", 0, 0)
                    btnText:SetTextColor(0.133, 0.667, 0.267, 1)
                    btn:SetAlpha(1.0)
                    btn:Disable()
                else
                    local btnText = AC:CreateStyledText(btn, "ACTIVATE", 12, COLORS.TEXT, "OVERLAY", CUSTOM_FONT)
                    btnText:SetPoint("CENTER", 0, 0)
                    btnText:SetTextColor(1, 1, 1, 1)
                    btn:SetAlpha(1.0)
                    btn:Enable()
                    btn:SetScript("OnClick", function()
                        if AC.ThemeManager then
                            AC.ThemeManager:ApplyTheme(theme.id)
                            C_Timer.After(0, RebuildSelf)
                        end
                    end)
                end
            else
                local lockIcon = btn:CreateTexture(nil, "OVERLAY")
                lockIcon:SetSize(20, 20)
                lockIcon:SetPoint("CENTER", -24, 0)
                lockIcon:SetTexture("Interface\\AddOns\\ArenaCore\\Media\\Achievements\\padlock_icon.png")

                local btnText = AC:CreateStyledText(btn, "LOCKED", 12, COLORS.TEXT, "OVERLAY", CUSTOM_FONT)
                btnText:SetPoint("CENTER", 10, 0)
                btnText:SetTextColor(0.863, 0.176, 0.176, 1)
                btn:SetAlpha(0.5)
                btn:Disable()
            end

            yOffset = yOffset - 105
        end

        local infoText = AC:CreateStyledText(settingsGroup, "Themes are unlocked account-wide when you earn the achievement on any character.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        infoText:SetPoint("BOTTOMLEFT", settingsGroup, "BOTTOMLEFT", 15, 12)
        infoText:SetPoint("BOTTOMRIGHT", settingsGroup, "BOTTOMRIGHT", -15, 12)
        infoText:SetJustifyH("CENTER")
        infoText:SetJustifyV("BOTTOM")
        if infoText.SetWordWrap then infoText:SetWordWrap(true) end
    end

    local function LoadFontContent(f)
        local settingsGroup = CreateFrame("Frame", nil, f)
        settingsGroup:SetPoint("TOPLEFT", 12, -12)
        settingsGroup:SetPoint("TOPRIGHT", -12, -12)
        settingsGroup:SetHeight(620)
        ApplyAtlasCardBg(settingsGroup)

        local groupTitle = AC:CreateStyledText(settingsGroup, "GLOBAL ARENACORE FONT", 13, COLORS.PRIMARY, "OVERLAY", CUSTOM_FONT)
        groupTitle:SetPoint("TOPLEFT", 15, -18)

        local checkboxRow1 = CreateFrame("Frame", nil, settingsGroup)
        checkboxRow1:SetPoint("TOPLEFT", groupTitle, "BOTTOMLEFT", 0, -14)
        checkboxRow1:SetPoint("RIGHT", settingsGroup, "RIGHT", -20, 0)
        checkboxRow1:SetHeight(26)

        local checkboxLabel1 = AC:CreateStyledText(checkboxRow1, "Apply ArenaCore Font Globally", 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
        checkboxLabel1:SetPoint("LEFT", 0, 0)
        checkboxLabel1:SetPoint("RIGHT", -46, 0)
        if checkboxLabel1.SetWordWrap then checkboxLabel1:SetWordWrap(true) end
        checkboxLabel1:SetJustifyH("LEFT")

        local dbGlobalFont = (AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures) or {}
        local checkbox1 = AC:CreateFlatCheckbox(checkboxRow1, 20, (dbGlobalFont.globalFontEnabled == true))
        checkbox1:SetPoint("RIGHT", -10, 0)
        local globalFontCheckbox = checkbox1

        local description1 = AC:CreateStyledText(settingsGroup, "Applies ArenaCore font to your entire game UI including chat, tooltips, action bars, and combat text.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description1:SetPoint("TOPLEFT", checkboxRow1, "BOTTOMLEFT", 0, -10)
        description1:SetPoint("TOPRIGHT", checkboxRow1, "BOTTOMRIGHT", 0, -10)
        description1:SetJustifyH("LEFT"); description1:SetJustifyV("TOP")
        if description1.SetWordWrap then description1:SetWordWrap(true) end
        description1:SetWidth(settingsGroup:GetWidth() - 40)

        local checkboxRow4 = CreateFrame("Frame", nil, settingsGroup)
        checkboxRow4:SetPoint("TOPLEFT", description1, "BOTTOMLEFT", 0, -18)
        checkboxRow4:SetPoint("RIGHT", settingsGroup, "RIGHT", -20, 0)
        checkboxRow4:SetHeight(26)

        local checkboxLabel4 = AC:CreateStyledText(checkboxRow4, "Action Bar Font Only", 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
        checkboxLabel4:SetPoint("LEFT", 0, 0)
        checkboxLabel4:SetPoint("RIGHT", -46, 0)
        if checkboxLabel4.SetWordWrap then checkboxLabel4:SetWordWrap(true) end
        checkboxLabel4:SetJustifyH("LEFT")

        local dbActionBarFont = (AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures) or {}
        local checkbox4 = AC:CreateFlatCheckbox(checkboxRow4, 20, (dbActionBarFont.actionBarFontOnly == true))
        checkbox4:SetPoint("RIGHT", -10, 0)
        local actionBarFontCheckbox = checkbox4

        local description4 = AC:CreateStyledText(settingsGroup, "Applies ArenaCore custom font to action bars ONLY and nothing else. This option is mutually exclusive with 'Apply ArenaCore Font Globally'.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description4:SetPoint("TOPLEFT", checkboxRow4, "BOTTOMLEFT", 0, -10)
        description4:SetPoint("TOPRIGHT", checkboxRow4, "BOTTOMRIGHT", 0, -10)
        description4:SetJustifyH("LEFT"); description4:SetJustifyV("TOP")
        if description4.SetWordWrap then description4:SetWordWrap(true) end
        description4:SetWidth(settingsGroup:GetWidth() - 40)

        checkbox1:SetScript("OnClick", function(selfBtn)
            local enabled = selfBtn:GetChecked()
            AC.DB = AC.DB or {}; AC.DB.profile = AC.DB.profile or {}; AC.DB.profile.moreFeatures = AC.DB.profile.moreFeatures or {}
            AC.DB.profile.moreFeatures.globalFontEnabled = enabled

            if enabled and actionBarFontCheckbox then
                actionBarFontCheckbox:SetChecked(false)
                AC.DB.profile.moreFeatures.actionBarFontOnly = false
                if AC.GlobalFont and AC.GlobalFont.isEnabled then
                    AC.GlobalFont:Disable()
                end
            end

            ApplyGlobalFont(enabled)
            AC:SetupActionBarHook()
        end)

        checkbox4:SetScript("OnClick", function(selfBtn)
            local enabled = selfBtn:GetChecked()
            AC.DB = AC.DB or {}; AC.DB.profile = AC.DB.profile or {}; AC.DB.profile.moreFeatures = AC.DB.profile.moreFeatures or {}
            AC.DB.profile.moreFeatures.actionBarFontOnly = enabled

            if enabled and globalFontCheckbox then
                globalFontCheckbox:SetChecked(false)
                AC.DB.profile.moreFeatures.globalFontEnabled = false
                if AC.GlobalFont and AC.GlobalFont.isEnabled then
                    AC.GlobalFont:Disable()
                end
            end

            ApplyActionBarFont(enabled)
            AC:SetupActionBarHook()
        end)

        local checkboxRow2 = CreateFrame("Frame", nil, settingsGroup)
        checkboxRow2:SetPoint("TOPLEFT", description4, "BOTTOMLEFT", 0, -18)
        checkboxRow2:SetPoint("RIGHT", settingsGroup, "RIGHT", -20, 0)
        checkboxRow2:SetHeight(26)

        local checkboxLabel2 = AC:CreateStyledText(checkboxRow2, "Font Outline", 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
        checkboxLabel2:SetPoint("LEFT", 0, 0)
        checkboxLabel2:SetPoint("RIGHT", -46, 0)
        if checkboxLabel2.SetWordWrap then checkboxLabel2:SetWordWrap(true) end
        checkboxLabel2:SetJustifyH("LEFT")

        local dbFontOutline = (AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures) or {}
        local checkbox2 = AC:CreateFlatCheckbox(checkboxRow2, 20, (dbFontOutline.globalFontOutline ~= false))
        checkbox2:SetPoint("RIGHT", -10, 0)
        checkbox2:SetScript("OnClick", function(selfBtn)
            local enabled = selfBtn:GetChecked()
            AC.DB = AC.DB or {}; AC.DB.profile = AC.DB.profile or {}; AC.DB.profile.moreFeatures = AC.DB.profile.moreFeatures or {}
            AC.DB.profile.moreFeatures.globalFontOutline = enabled
            print("|cff8B45FFArena Core:|r Font outline " .. (enabled and "enabled" or "disabled") .. ". /reload to apply.")
        end)

        local description2 = AC:CreateStyledText(settingsGroup, "Adds a black outline around text for better visibility against varied backgrounds. Recommended for numbers and icons.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description2:SetPoint("TOPLEFT", checkboxRow2, "BOTTOMLEFT", 0, -10)
        description2:SetPoint("TOPRIGHT", checkboxRow2, "BOTTOMRIGHT", 0, -10)
        description2:SetJustifyH("LEFT"); description2:SetJustifyV("TOP")
        if description2.SetWordWrap then description2:SetWordWrap(true) end
        description2:SetWidth(settingsGroup:GetWidth() - 40)

        local checkboxRow3 = CreateFrame("Frame", nil, settingsGroup)
        checkboxRow3:SetPoint("TOPLEFT", description2, "BOTTOMLEFT", 0, -18)
        checkboxRow3:SetPoint("RIGHT", settingsGroup, "RIGHT", -20, 0)
        checkboxRow3:SetHeight(26)

        local checkboxLabel3 = AC:CreateStyledText(checkboxRow3, "Font Shadow", 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
        checkboxLabel3:SetPoint("LEFT", 0, 0)
        checkboxLabel3:SetPoint("RIGHT", -46, 0)
        if checkboxLabel3.SetWordWrap then checkboxLabel3:SetWordWrap(true) end
        checkboxLabel3:SetJustifyH("LEFT")

        local dbFontShadow = (AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures) or {}
        local checkbox3 = AC:CreateFlatCheckbox(checkboxRow3, 20, (dbFontShadow.globalFontShadow ~= false))
        checkbox3:SetPoint("RIGHT", -10, 0)
        checkbox3:SetScript("OnClick", function(selfBtn)
            local enabled = selfBtn:GetChecked()
            AC.DB = AC.DB or {}; AC.DB.profile = AC.DB.profile or {}; AC.DB.profile.moreFeatures = AC.DB.profile.moreFeatures or {}
            AC.DB.profile.moreFeatures.globalFontShadow = enabled
            print("|cff8B45FFArena Core:|r Font shadow " .. (enabled and "enabled" or "disabled") .. ". /reload to apply.")
        end)

        local description3 = AC:CreateStyledText(settingsGroup, "Adds a subtle drop shadow to text for improved depth and readability. Enabled by default for optimal visual clarity.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
        description3:SetPoint("TOPLEFT", checkboxRow3, "BOTTOMLEFT", 0, -10)
        description3:SetPoint("TOPRIGHT", checkboxRow3, "BOTTOMRIGHT", 0, -10)
        description3:SetJustifyH("LEFT"); description3:SetJustifyV("TOP")
        if description3.SetWordWrap then description3:SetWordWrap(true) end
        description3:SetWidth(settingsGroup:GetWidth() - 40)

		local function EnsureActionBarFontDB()
			AC.DB = AC.DB or {}
			AC.DB.profile = AC.DB.profile or {}
			AC.DB.profile.actionBarFont = AC.DB.profile.actionBarFont or {}
			if AC.DB.profile.actionBarFont.scale == nil then AC.DB.profile.actionBarFont.scale = 100 end
			if AC.DB.profile.actionBarFont.horizontal == nil then AC.DB.profile.actionBarFont.horizontal = 0 end
			if AC.DB.profile.actionBarFont.vertical == nil then AC.DB.profile.actionBarFont.vertical = 0 end
			return AC.DB.profile.actionBarFont
		end

		local function IsFontModeEnabled()
			local db = AC.DB and AC.DB.profile and AC.DB.profile.moreFeatures
			if not db then return false end
			return db.globalFontEnabled == true or db.actionBarFontOnly == true
		end

		local function ApplyActionBarIfEnabled()
			if not IsFontModeEnabled() then return end
			if AC.ApplyActionBarFonts then
				AC:ApplyActionBarFonts()
			end
		end

		local function CreateActionBarSlider(parentFrame, label, y, minV, maxV, key, suffix)
			local row = CreateFrame("Frame", nil, parentFrame)
			row:SetPoint("TOPLEFT", 20, y)
			row:SetPoint("TOPRIGHT", -20, y)
			row:SetHeight(26)

			local l = AC:CreateStyledText(row, label, 12, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
			l:SetPoint("LEFT", 0, 0)
			l:SetWidth(110)
			l:SetJustifyH("LEFT")

			local valueText = AC:CreateStyledText(row, "", 11, COLORS.TEXT_2, "OVERLAY", CUSTOM_FONT)
			valueText:SetPoint("RIGHT", -2, 0)
			valueText:SetWidth(90)
			valueText:SetJustifyH("RIGHT")

			local db = EnsureActionBarFontDB()
			local startValue = tonumber(db[key]) or 0

			local function OnChange(value)
				local db2 = EnsureActionBarFontDB()
				db2[key] = value
				if suffix then
					valueText:SetText(string.format("%.0f%s", value, suffix))
				else
					valueText:SetText(string.format("%.0f", value))
				end
				ApplyActionBarIfEnabled()
			end

			local slider = AC:CreateFlatSlider(row, 150, 18, minV, maxV, startValue, false, OnChange)
			slider:SetPoint("LEFT", l, "RIGHT", 10, 0)
			slider:SetPoint("RIGHT", valueText, "LEFT", -10, 0)
			OnChange(startValue)
			return row
		end

		local actionBarCard = CreateFrame("Frame", nil, settingsGroup)
		actionBarCard:SetPoint("TOPLEFT", description3, "BOTTOMLEFT", 0, -18)
		actionBarCard:SetPoint("TOPRIGHT", description3, "BOTTOMRIGHT", 0, -18)
		actionBarCard:SetHeight(180)
		ApplyAtlasCardBg(actionBarCard)

		local actionBarTitle = AC:CreateStyledText(actionBarCard, "ACTION BAR HOTKEYS", 13, COLORS.PRIMARY, "OVERLAY", CUSTOM_FONT)
		actionBarTitle:SetPoint("TOPLEFT", 15, -18)

		local actionBarDesc = AC:CreateStyledText(actionBarCard, "Fine-tune hotkey size and position. These apply when global font is enabled, or when Action Bar Font Only mode is enabled.", 11, COLORS.TEXT_MUTED, "OVERLAY", CUSTOM_FONT)
		actionBarDesc:SetPoint("TOPLEFT", actionBarTitle, "BOTTOMLEFT", 0, -10)
		actionBarDesc:SetPoint("TOPRIGHT", actionBarCard, "TOPRIGHT", -20, 0)
		actionBarDesc:SetJustifyH("LEFT")
		if actionBarDesc.SetWordWrap then actionBarDesc:SetWordWrap(true) end

		CreateActionBarSlider(actionBarCard, "Font Size", -78, 50, 200, "scale", "%")
		CreateActionBarSlider(actionBarCard, "Horizontal", -108, -30, 30, "horizontal", "")
		CreateActionBarSlider(actionBarCard, "Vertical", -138, -30, 30, "vertical", "")
    end

    for _, page in ipairs(pages) do
        local f = CreateFrame("Frame", nil, contentRoot)
        f:SetPoint("TOPLEFT", 0, 0)
        f:SetPoint("TOPRIGHT", 0, 0)
        f:SetHeight(1)
        f:Hide()
        contentFrames[page.id] = f
    end

    local function EnsureTabContent(tabId)
        local f = contentFrames[tabId]
        if not f or f.__built then return end

        ClearContainerChildren(f)

        if tabId == "general" then
            LoadGeneralContent(f)
        elseif tabId == "themes" then
            LoadThemesContent(f)
        elseif tabId == "font" then
            LoadFontContent(f)
        else
            LoadComingSoonContent(tabId, f)
        end

        f.__built = true
    end

    local function SelectTab(tabId)
        activeTab = tabId

        for id, tab in pairs(tabs) do
            tab:SetSelected(id == tabId)
        end

        for id, f in pairs(contentFrames) do
            if id == tabId then
                f:Show()
            else
                f:Hide()
            end
        end

        EnsureTabContent(tabId)

        if _G.ArenaCore and _G.ArenaCore.contentArea then
            _G.ArenaCore.contentArea:SetVerticalScroll(0)
        end
        if _G.ArenaCore and _G.ArenaCore.scrollbar then
            _G.ArenaCore.scrollbar:SetValue(0)
        end

        if AC and AC.UpdateContentHeight then
            C_Timer.After(0.05, function()
                AC:UpdateContentHeight()
            end)
        end
    end

    local tabWidth = 90
    local tabHeight = 30
    local tabSpacing = 8

    tabWidth = 102

    local firstRow = { pages[1], pages[2], pages[3] }
    local secondRow = { pages[4], pages[5], pages[6] }

    local firstRowWidth = (#firstRow * tabWidth) + ((#firstRow - 1) * tabSpacing)
    local secondRowWidth = (#secondRow * tabWidth) + ((#secondRow - 1) * tabSpacing)

    local function PositionTabs()
        local tabBarWidth = tabBar:GetWidth()
        if not tabBarWidth or tabBarWidth <= 0 then
            tabBarWidth = container:GetWidth()
        end
        if not tabBarWidth or tabBarWidth <= 0 then
            tabBarWidth = 460
        end

        local firstRowStartX = (tabBarWidth - firstRowWidth) / 2
        local secondRowStartX = (tabBarWidth - secondRowWidth) / 2

        for i, page in ipairs(firstRow) do
            local tab = tabs[page.id]
            if tab then
                tab:ClearAllPoints()
                tab:SetPoint("TOPLEFT", tabBar, "TOPLEFT", firstRowStartX + ((i - 1) * (tabWidth + tabSpacing)), -8)
            end
        end

        for i, page in ipairs(secondRow) do
            local tab = tabs[page.id]
            if tab then
                tab:ClearAllPoints()
                tab:SetPoint("TOPLEFT", tabBar, "TOPLEFT", secondRowStartX + ((i - 1) * (tabWidth + tabSpacing)), -46)
            end
        end
    end

    for _, page in ipairs(firstRow) do
        local tab = CreateMiscTabButton(tabBar, page.text, tabWidth, tabHeight)
        tab:SetScript("OnClick", function()
            SelectTab(page.id)
        end)
        tabs[page.id] = tab
    end

    for _, page in ipairs(secondRow) do
        local tab = CreateMiscTabButton(tabBar, page.text, tabWidth, tabHeight)
        tab:SetScript("OnClick", function()
            SelectTab(page.id)
        end)
        tabs[page.id] = tab
    end

    PositionTabs()
    C_Timer.After(0, PositionTabs)

    SelectTab(activeTab)
end

AC:RegisterPage("Misc", CreateMiscPage)

AC.ApplySurrenderSetting = ApplySurrenderSetting
AC.ApplyGlobalFont = ApplyGlobalFont
AC.ApplyActionBarFont = ApplyActionBarFont

local initFrame = CreateFrame("Frame")
initFrame:RegisterEvent("PLAYER_LOGIN")
initFrame:SetScript("OnEvent", function()
    if not AC.actionBarHookSetup then
        AC:SetupActionBarHook()
    end
end)
