// Copyright 2019 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.

import 'dart:async';
import 'dart:html' as html;

import 'package:google_sign_in_platform_interface/google_sign_in_platform_interface.dart';

import 'generated/gapiauth2.dart' as auth2;

/// Injects a list of JS [libraries] as `script` tags into a [target] [html.HtmlElement].
///
/// If [target] is not provided, it defaults to the web app's `head` tag (see `web/index.html`).
/// [libraries] is a list of URLs that are used as the `src` attribute of `script` tags
/// to which an `onLoad` listener is attached (one per URL).
///
/// Returns a [Future] that resolves when all of the `script` tags `onLoad` events trigger.
Future<void> injectJSLibraries(
  List<String> libraries, {
  html.HtmlElement? target,
}) {
  final List<Future<void>> loading = <Future<void>>[];
  final List<html.HtmlElement> tags = <html.HtmlElement>[];

  final html.Element targetElement = target ?? html.querySelector('head')!;

  libraries.forEach((String library) {
    final html.ScriptElement script = html.ScriptElement()
      ..async = true
      ..defer = true
      ..src = library;
    // TODO add a timeout race to fail this future
    loading.add(script.onLoad.first);
    tags.add(script);
  });

  targetElement.children.addAll(tags);
  return Future.wait(loading);
}

/// Utility method that converts `currentUser` to the equivalent [GoogleSignInUserData].
///
/// This method returns `null` when the [currentUser] is not signed in.
GoogleSignInUserData? gapiUserToPluginUserData(auth2.GoogleUser? currentUser) {
  final bool isSignedIn = currentUser?.isSignedIn() ?? false;
  final auth2.BasicProfile? profile = currentUser?.getBasicProfile();
  if (!isSignedIn || profile?.getId() == null) {
    return null;
  }

  return GoogleSignInUserData(
    displayName: profile?.getName(),
    email: profile?.getEmail() ?? '',
    id: profile?.getId() ?? '',
    photoUrl: profile?.getImageUrl(),
    idToken: currentUser?.getAuthResponse().id_token,
  );
}
