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

/**
 * gapi-loader.js provides a method for loading gapi.js asynchronously.
 *
 * gapi.js docs:
 * https://developers.google.com/identity/sign-in/web/reference
 * (we load gapi.js via the chops-signin module)
 */

import * as signin from '@chopsui/chops-signin';

const BUGANIZER_SCOPE = 'https://www.googleapis.com/auth/buganizer';
// Only allow google.com profiles through currently.
const RESTRICT_TO_DOMAIN = '@google.com';

// loadGapi loads window.gapi and returns a logged in user object or null.
// Allows overriding signinImpl for testing.
export default function loadGapi() {
  const signinImpl = getSigninInstance();
  // Validate client_id exists.
  if (!CS_env.gapi_client_id) {
    throw new Error('Cannot find gapi.js client id');
  }

  // Prevent gapi.js from being loaded multiple times.
  if (window.__gapiLoadPromise) {
    return window.__gapiLoadPromise;
  }

  window.__gapiLoadPromise = new Promise(async (resolve) => {
    signinImpl.init(CS_env.gapi_client_id, ['client'], [BUGANIZER_SCOPE]);
    resolve(await fetchGapiEmail(signinImpl));
  });

  return window.__gapiLoadPromise;
}

// For fetching current email. May have changed since load.
export function fetchGapiEmail() {
  const signinImpl = getSigninInstance();
  return new Promise((resolve) => {
    signinImpl.getUserProfileAsync().then((profile) => {
      resolve(
          (
            profile &&
            profile.getEmail instanceof Function &&
            profile.getEmail().endsWith(RESTRICT_TO_DOMAIN) &&
            profile.getEmail()
          ) || null,
      );
    });
  });
}

// Provide a singleton chops-signin instance to make testing easier.
let signinInstance;
export function getSigninInstance(signinImpl=signin, overwrite=false) {
  // Assign on first run.
  if (overwrite || !signinInstance) {
    signinInstance = signinImpl;
  }
  return signinInstance;
}
