-- 1. Tornar Global: Remova o "local" para que todos os scripts vejam a MESMA tabela
if not EventHandlers then
    EventHandlers = {
        OnReadScript = {},
        OnShutScript = {},
        OnTimerThread = {},
        OnLoadInterface = {},
        OnInterfaceRender = {},
        OnInterfaceActive = {},
        OnInterfaceActiveZone = {},
        OnPacketRecv = {},
    }
end

-- 2. Garantir que a função de registro seja global
function BridgeFunctionAttach(eventName, handlerFunction)
    if EventHandlers[eventName] and type(handlerFunction) == "function" then
        table.insert(EventHandlers[eventName], handlerFunction)
    else
        print(string.format("ScriptCore: Erro ao registrar '%s'", eventName))
    end
end

function BridgeFunction_OnReadScript()
    for _, func in ipairs(EventHandlers.OnReadScript) do pcall(func) end
end

function BridgeFunction_OnShutScript()
    for _, func in ipairs(EventHandlers.OnShutScript) do pcall(func) end
end

function BridgeFunction_OnTimerThread()
    for _, func in ipairs(EventHandlers.OnTimerThread) do pcall(func) end
end

function BridgeFunction_OnLoadInterface()
    for _, func in ipairs(EventHandlers.OnLoadInterface) do pcall(func) end
end

function BridgeFunction_OnInterfaceRender()
    -- Garantimos que o input comece desbloqueado em cada frame.
    -- Os scripts que precisarem bloquear chamarão SetBlockInput(true) individualmente.
    SetBlockInput(false)
    for _, func in ipairs(EventHandlers.OnInterfaceRender) do
        pcall(func)
    end
end

-- 3. Corrigir a interrupção de Cliques/Teclas
function BridgeFunction_OnInterfaceActive()
    local finalResult = 0
    for _, func in ipairs(EventHandlers.OnInterfaceActive) do
        local status, result = pcall(func)
        -- Aceita tanto 1 (inteiro) quanto true (booleano) para maior robustez
        if status and (result == 1 or result == true) then
            finalResult = 1
        end
    end
    return finalResult
end

function BridgeFunction_OnInterfaceActiveZone()
    local finalResult = 0
    for _, func in ipairs(EventHandlers.OnInterfaceActiveZone) do
        local status, result = pcall(func)
        -- Aceita tanto 1 (inteiro) quanto true (booleano) para maior robustez
        if status and (result == 1 or result == true) then
            finalResult = 1
        end
    end
    return finalResult
end

function BridgeFunction_OnPacketRecv(...)
    for _, func in ipairs(EventHandlers.OnPacketRecv) do func(...) end
end