class CanvasSync::Jobs::CanvasProcessWaiter

def perform(progress_url, next_job, kwargs = {})

rubocop:disable Metrics/PerceivedComplexity
def perform(progress_url, next_job, kwargs = {})
  kwargs = kwargs.symbolize_keys
  response = canvas_sync_client.get(progress_url)
  status = kwargs[:status_key].present? ? response[kwargs[:status_key]] : response['workflow_state'] || response['status']
  if %w[completed complete].include? status
    InvokeCallbackWorker.perform_later(build_next_job(next_job, kwargs, response)) if next_job
  elsif %w[failed error].include? status
    if kwargs[:on_failure].is_a?(Hash)
      InvokeCallbackWorker.perform_later(build_next_job(kwargs[:on_failure], kwargs, response))
    else
      Rails.logger.error("Progress #{progress_url} failed")
    end
  else # if status == 'queued' || status == 'running'
    interval = kwargs[:interval] || (Rails.env.development? ? 3 : 60)
    CanvasProcessWaiter.set(wait: interval).perform_later(progress_url, next_job, kwargs)
  end
end