-- WoWUkraine: переклад валют у тултіпах (гаманець, нагороди квестів, токен-
-- фрейм) і в слотах нагород. База: ns.currencies[currencyID] =
-- { name = ua, en = EN-назва, desc = ua-опис, den = EN-опис }.
-- Підміна — лише видимий текст (SetText), без замін API — без taint.

local _, ns = ...

-- Зворотний індекс EN-назва -> запис (для слотів нагород, де є лише назва).
ns.currencyByName = ns.currencyByName or {}
if ns.currencies then
    for _, e in pairs(ns.currencies) do
        if type(e) == "table" and e.en then
            ns.currencyByName[e.en] = e
        end
    end
end

local function NameLine(tooltip)
    if tooltip.GetLeftLine then
        local line = tooltip:GetLeftLine(1)
        if line then return line end
    end
    local name = tooltip.GetName and tooltip:GetName()
    return name and _G[name .. "TextLeft1"] or nil
end

local function LineByIndex(tooltip, i)
    if tooltip.GetLeftLine then
        local line = tooltip:GetLeftLine(i)
        if line then return line end
    end
    local name = tooltip.GetName and tooltip:GetName()
    return name and _G[name .. "TextLeft" .. i] or nil
end

local function TranslateCurrencyTooltip(tooltip, data)
    if not ns.IsEnabled("currency") then return end -- перемикач «Валюти»
    if ns.ShowOriginal() then return end -- клавіша «показати оригінал»
    local id = data and data.id
    local entry = id and ns.currencies and ns.currencies[id]
    if type(entry) ~= "table" then return end
    local changed = false

    -- 1) Назва — рядок 1 (зі збереженням кольору рідкості).
    if entry.name then
        local line = NameLine(tooltip)
        local orig = ns.SafeText(line and line:GetText())
        if orig and not orig:find(entry.name, 1, true) then
            local r, g, b = line:GetTextColor()
            local shown = ns.ApplyNames(entry.name) .. " |cff808080(" .. orig .. ")|r"
            line:SetText(shown)
            if r then line:SetTextColor(r, g, b) end
            ns.Remember(line, orig, shown)
            changed = true
        end
    end

    -- 2) Опис — шукаємо рядок, що дорівнює EN-опису (den), і міняємо на ua.
    if entry.desc and entry.den then
        for i = 2, tooltip:NumLines() do
            local line = LineByIndex(tooltip, i)
            local text = ns.SafeText(line and line:GetText())
            if text == entry.den then
                local r, g, b = line:GetTextColor() -- зберегти колір (опис буває жовтий)
                line:SetText(entry.desc)
                if r then line:SetTextColor(r, g, b) end
                ns.Remember(line, entry.den, entry.desc)
                changed = true
                break
            end
        end
    end

    if changed then tooltip:Show() end
end

if TooltipDataProcessor and Enum.TooltipDataType and Enum.TooltipDataType.Currency then
    TooltipDataProcessor.AddTooltipPostCall(Enum.TooltipDataType.Currency,
        TranslateCurrencyTooltip)
end
