// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef REMOTING_BASE_OAUTH_CLIENT_H_
#define REMOTING_BASE_OAUTH_CLIENT_H_

#include <string>

#include "base/functional/callback.h"

namespace gaia {
struct OAuthClientInfo;
}

namespace remoting {

class OAuthClient {
 public:
  // Called when GetCredentialsFromAuthCode is completed, with the |user_email|
  // and |refresh_token| that correspond to the given |auth_code|, or with empty
  // strings on error.
  typedef base::OnceCallback<void(const std::string& user_email,
                                  const std::string& refresh_token)>
      CompletionCallback;

  virtual ~OAuthClient() {}

  // Redeems |auth_code| using |oauth_client_info| to obtain
  // |refresh_token| and |access_token|, then, if |need_user_email| is
  // true, uses the userinfo endpoint to obtain |user_email|.  Calls
  // CompletionCallback with |user_email| and |refresh_token| when
  // done, or with empty strings on error.  If a request is received
  // while another one is being processed, it is enqueued and
  // processed after the first one is finished.
  virtual void GetCredentialsFromAuthCode(
      const gaia::OAuthClientInfo& oauth_client_info,
      const std::string& auth_code,
      bool need_user_email,
      CompletionCallback on_done) = 0;
};

}  // namespace remoting

#endif  // REMOTING_BASE_OAUTH_CLIENT_H_