class ZuoraConnect::AppInstanceBase

def fetch_connect_data(session: {})

def fetch_connect_data(session: {})
  refresh_count ||= 0
  self.check_oauth_state
  request_url = ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json"
  response = HTTParty.get(request_url,:body => {:access_token => self.access_token})
  if response.code == 200
    begin
      parsed_json = JSON.parse(response.body)
    rescue JSON::ParserError => ex
      raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("JSON parse error", response.body, response.code)
    end
    self.build_task(task_data: parsed_json, session: session)
    self.set_backup_creds
    self.save(validate: false) if self.changed?
  else
    raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error communicating with Connect for '#{request_url}' with #{response.code}", response.body, response.code)
  end
rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS + ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
  refresh_count += 1
  if refresh_count < 3
    sleep(10)
    ZuoraConnect.logger.debug("REFRESH TASK - Connection Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
    retry
  else
    ZuoraConnect.logger.fatal("REFRESH TASK - Connection Failed", ex)
    raise
  end
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
  refresh_count += 1
  if refresh_count < 3
    ZuoraConnect.logger.debug("REFRESH TASK - Communication Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
    self.refresh_oauth if ex.code == 401
    retry
  else
    ZuoraConnect.logger.fatal("REFRESH TASK - Communication Failed #{ex.code}", ex, self.default_ougai_items)
    raise
  end
end