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

//
// <window-controls> shadow element implementation.
//

var chrome = requireNative('chrome').GetChrome();
var forEach = require('utils').forEach;
var addTagWatcher = require('tagWatcher').addTagWatcher;
var appWindow = require('app.window');
var getHtmlTemplate =
  requireNative('app_window_natives').GetWindowControlsHtmlTemplate;

/**
 * @constructor
 */
function WindowControls(node) {
  this.node_ = node;
  this.shadowRoot_ = this.createShadowRoot_(node);
  this.setupWindowControls_();
}

/**
 * @private
 */
WindowControls.prototype.template_element = null;

/**
 * @private
 */
WindowControls.prototype.createShadowRoot_ = function(node) {
  // Initialize |template| from HTML template resource and cache result.
  var template = WindowControls.prototype.template_element;
  if (!template) {
    var element = document.createElement('div');
    element.innerHTML = getHtmlTemplate();
    WindowControls.prototype.template_element = element.firstChild;
    template = WindowControls.prototype.template_element;
  }
  // Create shadow root element with template clone as first child.
  var shadowRoot = node.webkitCreateShadowRoot();
  shadowRoot.appendChild(template.content.cloneNode(true));
  return shadowRoot;
}

/**
 * @private
 */
WindowControls.prototype.setupWindowControls_ = function() {
  var self = this;
  this.shadowRoot_.querySelector("#close-control").addEventListener('click',
      function(e) {
        chrome.app.window.current().close();
      });

  this.shadowRoot_.querySelector("#maximize-control").addEventListener('click',
      function(e) {
        self.maxRestore_();
      });
}

/**
 * @private
 * Restore or maximize depending on current state
 */
WindowControls.prototype.maxRestore_ = function() {
  if (chrome.app.window.current().isMaximized()) {
    chrome.app.window.current().restore();
  } else {
    chrome.app.window.current().maximize();
  }
}

addTagWatcher('WINDOW-CONTROLS', function(addedNode) {
  new WindowControls(addedNode);
});
