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

/**
 * @fileoverview
 * Mock implementation of remoting.OAuth2Api
 */

'use strict';

/** @suppress {duplicate} */
var remoting = remoting || {};

/**
 * @constructor
 * @implements {remoting.OAuth2Api}
 */
remoting.MockOAuth2Api = function() {
  /**
   * @type {string}
   * @private
   */
  this.email_ = 'fake-email@test-user.com';

  /**
   * @type {string}
   * @private
   */
  this.fullName_ = 'Fake User, Esq.';
};

/**
 * @param {function(string, number): void} onDone
 * @param {function(remoting.Error):void} onError
 * @param {string} clientId
 * @param {string} clientSecret
 * @param {string} refreshToken
 * @return {void} Nothing.
 */
remoting.MockOAuth2Api.prototype.refreshAccessToken = function(
    onDone, onError, clientId, clientSecret, refreshToken) {
  window.setTimeout(
      onDone.bind(null, remoting.MockIdentity.AccessToken.VALID, 60 * 60),
      0);
};

/**
 * @param {function(string, string, number): void} onDone
 * @param {function(remoting.Error):void} onError
 * @param {string} clientId
 * @param {string} clientSecret
 * @param {string} code
 * @param {string} redirectUri
 * @return {void} Nothing.
 */
remoting.MockOAuth2Api.prototype.exchangeCodeForTokens = function(
    onDone, onError, clientId, clientSecret, code, redirectUri) {
  window.setTimeout(
      onDone.bind(null, '', remoting.MockIdentity.AccessToken.VALID, 60 * 60),
      0);
};

/**
 * @param {function(string)} onDone
 * @param {function(remoting.Error)} onError
 * @param {string} token
 */
remoting.MockOAuth2Api.prototype.getEmail = function(onDone, onError, token) {
  remoting.MockIdentity.validateTokenAndCall(
      token, onDone, onError, [this.email_]);
};

/**
 * @param {function(string, string)} onDone
 * @param {function(remoting.Error)} onError
 * @param {string} token
 */
remoting.MockOAuth2Api.prototype.getUserInfo =
    function(onDone, onError, token) {
  remoting.MockIdentity.validateTokenAndCall(
      token, onDone, onError, [this.email_, this.fullName_]);
};


/**
 * @param {boolean} active
 */
remoting.MockOAuth2Api.setActive = function(active) {
  remoting.oauth2Api = active ? new remoting.MockOAuth2Api()
                              : new remoting.OAuth2ApiImpl();
};