local UIManager = require("ui/uimanager")

local HTTPClient = {
    input_timeouts = 0,
}

function HTTPClient:new()
    local o = {}
    setmetatable(o, self)
    self.__index = self
    return o
end

function HTTPClient:request(request, response_callback)
    request.connect_timeout = 10
    request.request_timeout = 20
    UIManager:initLooper()
    UIManager.looper:add_callback(function()
        -- avoid endless waiting for input
        UIManager:setInputTimeout()
        self.input_timeouts = self.input_timeouts + 1
        local turbo = require("turbo")
        -- disable success and warning logs
        turbo.log.categories.success = false
        turbo.log.categories.warning = false
        local client = turbo.async.HTTPClient({verify_ca = false})
        local res = coroutine.yield(client:fetch(request.url, request))
        self.input_timeouts = self.input_timeouts - 1
        -- reset INPUT_TIMEOUT to nil when all HTTP requests are fullfilled.
        if self.input_timeouts == 0 then UIManager:resetInputTimeout() end
        if response_callback then
            response_callback(res)
        end
    end)
end

return HTTPClient
