local ns = _G.WoWTranslate_UK_NS

local translator = setmetatable({}, { __index = ns.BaseTooltipTranslator })

function translator:IsEnabled()
    return true
end

function translator:Init()
    if TooltipDataProcessor and Enum and Enum.TooltipDataType and Enum.TooltipDataType.Spell then
        TooltipDataProcessor.AddTooltipPostCall(Enum.TooltipDataType.Spell, function(tooltip)
            if ns.TranslateTooltipLines then ns.TranslateTooltipLines(tooltip) end
        end)
    end

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    pcall(hooksecurefunc, ShoppingTooltip2, "SetItem", function(self)
        C_Timer.After(0, function()
            if ns.TranslateTooltipLines then ns.TranslateTooltipLines(self) 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)

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

    pcall(GameTooltip.HookScript, GameTooltip, "OnTooltipCleared", function(self)
    end)
end

ns.TranslationsManager:Add(translator)