// Copyright (C) 2018 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.

import '../gen/all_tracks';

import {assertTrue} from '../base/logging';
import {ControllerWorkerInitMessage} from '../common/worker_messages';
import {AppController} from './app_controller';
import {globals} from './globals';

let initialized = false;
export function initController(init: ControllerWorkerInitMessage) {
  assertTrue(!initialized);
  initialized = true;
  const controllerPort = init.controllerPort;
  const extensionPort = init.extensionPort;
  controllerPort.onmessage = ({data}) => globals.patchState(data);
  globals.initialize(new AppController(extensionPort));
}


// For devtools-based debugging.
(self as {} as {controllerGlobals: {}}).controllerGlobals = globals;
