class ZuoraConnect::AppInstanceBase

def refresh_oauth

def refresh_oauth
  count ||= 0
  Rails.logger.debug("[#{self.id}] REFRESHING - OAuth")
  params = {
            :grant_type => "refresh_token",
            :redirect_uri => ZuoraConnect.configuration.oauth_client_redirect_uri,
            :refresh_token => self.refresh_token
          }
  response = HTTParty.post("#{ZuoraConnect.configuration.url}/oauth/token",:body => params)
  response_body = JSON.parse(response.body)
  if response.code == 200
    self.refresh_token = response_body["refresh_token"]
    self.access_token = response_body["access_token"]
    self.oauth_expires_at = Time.at(response_body["created_at"].to_i) + response_body["expires_in"].seconds
    self.save
  else
    Rails.logger.debug("REFRESHING - OAuth Failed - Code #{response.code}")
    raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Refreshing Access Token", response.body, response.code)
  end
rescue
  if count < 3
    Rails.logger.debug("REFRESHING - OAuth Failed - Retrying(#{count})")
    self.reload
    sleep(5)
    count += 1
    retry
  else
    Rails.logger.fatal("REFRESHING - OAuth Failed")
    raise
  end
end