/**
 * @license
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @fileoverview This file is a backwards-compatibility shim.
 * Before Polygerrit converted to ES Modules, it exposes some variables out onto
 * the global namespace. Plugins can depend on these variables and we must
 * expose these variables until plugins switch to direct import from polygerrit.
 */

import {GrAnnotation} from './diff/gr-diff-highlight/gr-annotation';
import {GrDiffLine, GrDiffLineType} from './diff/gr-diff/gr-diff-line';
import {GrDiffGroup, GrDiffGroupType} from './diff/gr-diff/gr-diff-group';
import {getPluginEndpoints} from './shared/gr-js-api-interface/gr-plugin-endpoints';
import {util} from '../scripts/util';
import {page} from '../utils/page-wrapper-utils';
import {appContext} from '../services/app-context';
import {
  getPluginLoader,
  PluginLoader,
} from './shared/gr-js-api-interface/gr-plugin-loader';
import {GrPluginActionContext} from './shared/gr-js-api-interface/gr-plugin-action-context';
import {
  getPluginNameFromUrl,
  getRestAPI,
  PLUGIN_LOADING_TIMEOUT_MS,
  PRELOADED_PROTOCOL,
  send,
} from './shared/gr-js-api-interface/gr-api-utils';
import {getBaseUrl} from '../utils/url-util';
import {GerritNav} from './core/gr-navigation/gr-navigation';
import {getRootElement} from '../scripts/rootElement';
import {RevisionInfo} from './shared/revision-info/revision-info';

export function initGlobalVariables() {
  window.GrAnnotation = GrAnnotation;
  window.GrDiffLine = GrDiffLine;
  window.GrDiffLineType = GrDiffLineType;
  window.GrDiffGroup = GrDiffGroup;
  window.GrDiffGroupType = GrDiffGroupType;
  window.util = util;
  window.page = page;
  window.Auth = appContext.authService;
  window.EventEmitter = appContext.eventEmitter;
  window.PluginLoader = PluginLoader;
  window.GrPluginActionContext = GrPluginActionContext;

  window._apiUtils = {
    getPluginNameFromUrl,
    send,
    getRestAPI,
    getBaseUrl,
    PRELOADED_PROTOCOL,
    PLUGIN_LOADING_TIMEOUT_MS,
  };

  window.Gerrit = window.Gerrit || {};
  window.Gerrit.Nav = GerritNav;
  window.Gerrit.getRootElement = getRootElement;
  window.Gerrit.Auth = appContext.authService;

  window.Gerrit._pluginLoader = getPluginLoader();
  // TODO: should define as a getter
  window.Gerrit._endpoints = getPluginEndpoints();

  window.Gerrit.RevisionInfo = RevisionInfo;
}
