local CurrentProgress = nil
local function Progressbar(message,length,Options)
    local Canceled = false
    if not CurrentProgress then
        CurrentProgress = Options or {}
        if CurrentProgress.animation then 
            if CurrentProgress.animation.type == "anim" then
                ESX.Streaming.RequestAnimDict(CurrentProgress.animation.dict, function()
                    TaskPlayAnim(ESX.PlayerData.ped, CurrentProgress.animation.dict, CurrentProgress.animation.lib, 1.0, 1.0, length, 1, 1.0, false,false,false)
                    RemoveAnimDict(CurrentProgress.animation.dict)
                end)
            elseif CurrentProgress.animation.type == "Scenario" then
                TaskStartScenarioInPlace(ESX.PlayerData.ped, CurrentProgress.animation.Scenario, 0, true)
            end
        end
        if CurrentProgress.FreezePlayer then FreezeEntityPosition(PlayerPedId(),CurrentProgress.FreezePlayer) end
        SendNuiMessage(json.encode({
            type = "Progressbar",
            length = length or 3000,
            message = message or "ESX-Framework"
        }))
        CurrentProgress.length = length or 3000
        while CurrentProgress ~= nil do
            if CurrentProgress.length > 0 then 
                CurrentProgress.length -= 1000
            else
                ClearPedTasks(ESX.PlayerData.ped)
                if CurrentProgress.FreezePlayer then FreezeEntityPosition(PlayerPedId(), false) end
                if CurrentProgress.onFinish then CurrentProgress.onFinish() end
                CurrentProgress = nil
            end
            Wait(1000)
        end
    end
end

ESX.RegisterInput("cancelprog", "[ProgressBar] Cancel Progressbar", "keyboard", "BACK", function()
    if not CurrentProgress then return end
    if not CurrentProgress.onCancel then return end
    SendNuiMessage(json.encode({
        type = "Close"
    }))
        ClearPedTasks(ESX.PlayerData.ped)
        if CurrentProgress.FreezePlayer then FreezeEntityPosition(PlayerPedId(), false) end
        CurrentProgress.canceled = true
        CurrentProgress.length = 0
        CurrentProgress.onCancel()
        CurrentProgress = nil
end)
exports('Progressbar', Progressbar)