local ns = _G.WoWTranslate_UK_NS

local translator = setmetatable({ tooltipDataType = Enum and Enum.TooltipDataType and Enum.TooltipDataType.Item }, { __index = ns.BaseTooltipTranslator })

function translator:IsEnabled()
    return true
end

function translator:Init()
    if self.tooltipDataType and TooltipDataProcessor then
        TooltipDataProcessor.AddTooltipPostCall(self.tooltipDataType, function(tooltip)
            if ns.TranslateTooltipLines then ns.TranslateTooltipLines(tooltip) end
        end)
    end

    local itemMethods = {
        "SetBagItem", "SetItemByID", "SetInventoryItem",
        "SetLootItem", "SetQuestItem", "SetQuestLogItem",
        "SetMerchantItem", "SetBuybackItem", "SetAuctionSellItem",
        "SetTradePlayerItem", "SetTradeTargetItem",
        "SetInboxItem", "SetSendMailItem", "SetLootRollItem",
        "SetHyperlink", "SetSocketGem", "SetExistingSocketGem",
        "SetAction", "SetOwnedItemByID",
    }
    for _, method in ipairs(itemMethods) do
        pcall(hooksecurefunc, GameTooltip, method, function(self)
            C_Timer.After(0, function()
                if ns.TranslateTooltipLines then ns.TranslateTooltipLines(self) end
            end)
        end)
    end

    pcall(hooksecurefunc, ItemTooltip, "SetItem", function(self)
        C_Timer.After(0, function()
            if ns.TranslateTooltipLines then ns.TranslateTooltipLines(self) end
        end)
    end)

    if ShoppingTooltip1 then
        pcall(hooksecurefunc, ShoppingTooltip1, "SetItem", function(self)
            C_Timer.After(0, function()
                if ns.TranslateTooltipLines then ns.TranslateTooltipLines(self) end
            end)
        end)
    end
    if ShoppingTooltip2 then
        pcall(hooksecurefunc, ShoppingTooltip2, "SetItem", function(self)
            C_Timer.After(0, function()
                if ns.TranslateTooltipLines then ns.TranslateTooltipLines(self) end
            end)
        end)
    end

    pcall(GameTooltip.HookScript, GameTooltip, "OnTooltipSetItem", function(self)
        C_Timer.After(0, function()
            if ns.TranslateTooltipLines then ns.TranslateTooltipLines(self) end
        end)
    end)
end

ns.TranslationsManager:Add(translator)
