local PT = AhUI
if not PT then return end

local L = PT.L
local WhatsNew = {}
PT.WhatsNewUI = WhatsNew

local ADDON_NAME = "AhUI"
local FONT = AhUI.FONT

local function GetAddonVersion()
    local version = C_AddOns.GetAddOnMetadata(ADDON_NAME, "Version")
    return version or "0.0"
end

local CHANGELOG = {

    ["1.2.2"] = function()

        local version = GetAddonVersion()

        local header =
            "|cffFFD100VERSION " .. version .. "|r\n\n"

        local function Entry(ru, en)
            return
                "|cff00bfff• " .. ru .. "|r\n" ..
                "|cffaaaaaa  " .. en .. "|r\n\n"
        end

        return header ..

        Entry(
            "Шрифт элементов инфопанели теперь масштабируется вместе с высотой панели.",
            "InfoPanel element fonts now scale dynamically with panel height."
        ) ..

        Entry(
            "Изменён подход к уведомлениям о капе концентрации — теперь можно включать уведомления отдельно для каждой профессии.",
            "Concentration cap notifications reworked — notifications can now be enabled per profession."
        ) ..

        Entry(
            "Исправлен офлайн-реген концентрации в обзоре персонажа — реген больше не происходит, если профессия отсутствует.",
            "Fixed offline concentration regeneration in Character Overview — no regeneration occurs if the profession is missing."
        ) ..

        Entry(
            "Добавлен выбор отображаемого дополнения в окнах концентрации и очков знаний.",
            "Added expansion selection for Concentration and Knowledge Points windows."
        ) ..

        Entry(
            "Добавлен выбор типа попапа (диалогового окна) для кнопки подтверждения.",
            "Added popup type selection for confirmation buttons."
        ) ..

        Entry(
            "Добавлен модуль руководств профессий (/pg) — подробности по команде. Модуль в разработке.",
            "Added Profession Guides module (/pg) — see command for details. Still in development."
        )

    end,
}

function WhatsNew:Create()
    if self.frame then return self.frame end

    AhUI_DB = AhUI_DB or {}

    local f = CreateFrame("Frame", "AhUIWhatsNewFrame", UIParent, "BackdropTemplate")
    f:SetSize(520, 460)
    f:SetPoint("CENTER")
    f:SetFrameStrata("DIALOG")

    f:SetBackdrop({
        bgFile   = "Interface\\Buttons\\WHITE8x8",
        edgeFile = "Interface\\Buttons\\WHITE8x8",
        edgeSize = 3,
    })

    f:SetBackdropColor(0, 0, 0, 0.95)
    f:SetBackdropBorderColor(1, 1, 1, 1)

    f:Hide()
    tinsert(UISpecialFrames, f:GetName())

    local logo = f:CreateTexture(nil, "ARTWORK")
    logo:SetSize(96, 96)
    logo:SetPoint("TOP", 0, -18)
    logo:SetTexture("Interface\\AddOns\\AhUI\\media\\logo.png")

    local title = f:CreateFontString(nil, "OVERLAY")
    title:SetFont(FONT, 16, "OUTLINE")
    title:SetPoint("TOP", logo, "BOTTOM", 0, -10)
    title:SetText("What's New")

    local scrollFrame = CreateFrame("ScrollFrame", nil, f, "UIPanelScrollFrameTemplate")
    scrollFrame:SetPoint("TOPLEFT", 40, -140)
    scrollFrame:SetPoint("BOTTOMRIGHT", -40, 70)

    local content = CreateFrame("Frame", nil, scrollFrame)
    content:SetSize(420, 800)
    scrollFrame:SetScrollChild(content)

    local text = content:CreateFontString(nil, "OVERLAY")
    text:SetFont(FONT, 14, "")
    text:SetPoint("TOPLEFT")
    text:SetWidth(400)
    text:SetJustifyH("LEFT")
    text:SetJustifyV("TOP")
    text:SetWordWrap(true)

    local version = GetAddonVersion()
    local entry = CHANGELOG[version]

    if type(entry) == "function" then
        text:SetText(entry())
    elseif type(entry) == "table" then
        text:SetText(table.concat(entry, "\n\n"))
    else
        text:SetText("|cffFFD100VERSION " .. version .. "|r\n\n|cffaaaaaaMinor fixes and improvements.|r")
    end

    local ok = CreateFrame("Button", nil, f, "UIPanelButtonTemplate")
    ok:SetSize(140, 26)
    ok:SetPoint("BOTTOM", 0, 20)
    ok:SetText("Close")

    local fs = ok:GetFontString()
    if fs then fs:SetFont(FONT, 13, "") end

    ok:SetScript("OnClick", function()
        AhUI_DB.lastShownVersion = GetAddonVersion()
        f:Hide()
    end)

    self.frame = f
    return f
end

function WhatsNew:Show()
    self:Create():Show()
end

local ev = CreateFrame("Frame")
ev:RegisterEvent("PLAYER_LOGIN")
ev:SetScript("OnEvent", function()

    AhUI_DB = AhUI_DB or {}

    local current = GetAddonVersion()
    local saved   = AhUI_DB.lastShownVersion

    if saved ~= current then
        C_Timer.After(0.8, function()
            WhatsNew:Create():Show()
        end)
    end
end)

SLASH_AHUIWHATSNEW1 = "/ahuiwhatsnew"
SLASH_AHUIWHATSNEW2 = "/ahwn"

SlashCmdList["AHUIWHATSNEW"] = function()
    if PT.WhatsNewUI then
        PT.WhatsNewUI:Show()
    end
end