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

'use strict';

(function() {
  var didLaunch = false;

  /**
   * Used to watch for launch events that occur before we're ready to handle
   * them. Only used when Secure Shell is running as a v2 app.
   */
  if (!!chrome.app.window) {
    var onLaunched = function() { didLaunch = true };
    chrome.app.runtime.onLaunched.addListener(onLaunched);
  }

  /**
   * Perform any required async initialization, then create our app instance.
   *
   * The window.app_ property will contain the new app instance so it can be
   * reached from the background page's JS console.
   */
  lib.init(function nassh_background() {
    var manifest = chrome.runtime.getManifest();
    var app = new nassh.App(manifest);

    app.onInit.addListener(function() {
      if (!!chrome.app.window) {
        // Ready to handle launch events, no need for special handling anymore.
        chrome.app.runtime.onLaunched.removeListener(onLaunched);

        app.installHandlers(chrome.app.runtime);

        if (didLaunch)
        app.onLaunched();
      } else {
        console.log('background-page: init complete');
      }
    });
    app.installOmnibox(chrome.omnibox);

    // "Public" window.app will be retrieved by individual windows via
    // chrome.getBackgroundPage().
    window.app = app;
  }, console.log.bind(console));
})();
