-------------------------------------------------------------------------------
--  EllesmereUI_koKR_Plus / PopupSkin.lua
--  StaticPopup 배율(크기)만 조절. 다크 스킨 기능은 제거 — koKR taint 수정 후 불필요.
--  Taint 안전: secure StaticPopup 에 사용자 필드 안 씀 → 외부 weak 테이블(_ffd).
-------------------------------------------------------------------------------
---@diagnostic disable: undefined-global
local NS = _G.EUIKorPlus
if not NS then return end
local GetDB = NS.GetDB

-- weak-keyed cache — secure StaticPopup 에 사용자 필드 쓰지 않기 위해.
local _ffd = setmetatable({}, { __mode = "k" })
local function _GetFFD(f)
    local d = _ffd[f]
    if not d then d = {}; _ffd[f] = d end
    return d
end

-- 배율 적용 (0.5~2.0).
local function _ApplyPopupScale(popup)
    if not popup or popup:IsForbidden() then return end
    local sc = GetDB().popupSkinScale or 1.0
    if sc < 0.5 then sc = 0.5 elseif sc > 2.0 then sc = 2.0 end
    pcall(popup.SetScale, popup, sc)
end

-- 배율 후크 설치 (모든 StaticPopup OnShow). 사용자 필드 안 쓰고 weak 캐시로 1회 가드.
local function _InstallScaleHook()
    for i = 1, (STATICPOPUP_NUMDIALOGS or 4) do
        local p = _G["StaticPopup" .. i]
        if p and not _GetFFD(p).scaleHooked then
            _GetFFD(p).scaleHooked = true
            p:HookScript("OnShow", _ApplyPopupScale)
            if p:IsShown() then pcall(_ApplyPopupScale, p) end
        end
    end
end

-- PLAYER_LOGIN 후: 배율 후크 설치 + (옛 다크스킨 기능이 강제했던 customTooltips 1회 복원).
if C_Timer and C_Timer.After then
    C_Timer.After(2.0, function()
        pcall(_InstallScaleHook)
        local db = GetDB()
        if EllesmereUIDB and db.popupOnlyPriorCustomTooltips ~= nil then
            EllesmereUIDB.customTooltips = db.popupOnlyPriorCustomTooltips
            db.popupOnlyPriorCustomTooltips = nil
        end
        db.popupOnlyEuiSkin = nil   -- 제거된 토글 상태 정리
    end)
end

-- 현재 표시 중인 StaticPopup 들에 배율 즉시 반영 (섹션 스텝 onChange 용).
local function _applyToShownPopups()
    for i = 1, (STATICPOPUP_NUMDIALOGS or 4) do
        local p = _G["StaticPopup" .. i]
        if p and p:IsShown() then pcall(p.SetScale, p, GetDB().popupSkinScale or 1.0) end
    end
end

-- ============================================================
--  팝업 배율 섹션 등록
-- ============================================================
if NS.RegisterSection then
    NS.RegisterSection({
        order = 90, col = 1, row = 1, title = "팝업 배율",
        desc  = "StaticPopup 크기를 조절합니다.",
        build = function(popup, descFS)
            NS.MakeStepperRow(popup, descFS, {
                get = function() return GetDB().popupSkinScale or 1.0 end,
                set = function(v) GetDB().popupSkinScale = v end,
                fmt = function(v) return string.format("배율 %.2fx", v) end,
                min = 0.5, max = 2.0, step = 0.05,
                onChange = function() _applyToShownPopups() end,
            })
        end,
    })
end
