/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

const { Cc, Ci, Cu } = require("chrome");

const BRAND_SHORT_NAME = Cc["@mozilla.org/intl/stringbundle;1"].
                         getService(Ci.nsIStringBundleService).
                         createBundle("chrome://branding/locale/brand.properties").
                         GetStringFromName("brandShortName");

const l10n = require("gcli/l10n");

exports.items = [
  {
    name: 'resize',
    description: l10n.lookup('resizeModeDesc')
  },
  {
    item: "command",
    runAt: "client",
    name: 'resize on',
    description: l10n.lookup('resizeModeOnDesc'),
    manual: l10n.lookupFormat('resizeModeManual2', [BRAND_SHORT_NAME]),
    exec: gcli_cmd_resize
  },
  {
    item: "command",
    runAt: "client",
    name: 'resize off',
    description: l10n.lookup('resizeModeOffDesc'),
    manual: l10n.lookupFormat('resizeModeManual2', [BRAND_SHORT_NAME]),
    exec: gcli_cmd_resize
  },
  {
    item: "command",
    runAt: "client",
    name: 'resize toggle',
    buttonId: "command-button-responsive",
    buttonClass: "command-button command-button-invertable",
    tooltipText: l10n.lookup("resizeModeToggleTooltip"),
    description: l10n.lookup('resizeModeToggleDesc'),
    manual: l10n.lookupFormat('resizeModeManual2', [BRAND_SHORT_NAME]),
    state: {
      isChecked: function(aTarget) {
        if (!aTarget.tab) {
          return false;
        }
        let browserWindow = aTarget.tab.ownerDocument.defaultView;
        let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager;
        return mgr.isActiveForTab(aTarget.tab);
      },
      onChange: function(aTarget, aChangeHandler) {
        if (aTarget.tab) {
          let browserWindow = aTarget.tab.ownerDocument.defaultView;
          let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager;
          mgr.on("on", aChangeHandler);
          mgr.on("off", aChangeHandler);
        }
      },
      offChange: function(aTarget, aChangeHandler) {
        if (aTarget.tab) {
          let browserWindow = aTarget.tab.ownerDocument.defaultView;
          let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager;
          mgr.off("on", aChangeHandler);
          mgr.off("off", aChangeHandler);
        }
      },
    },
    exec: gcli_cmd_resize
  },
  {
    item: "command",
    runAt: "client",
    name: 'resize to',
    description: l10n.lookup('resizeModeToDesc'),
    params: [
      {
        name: 'width',
        type: 'number',
        description: l10n.lookup("resizePageArgWidthDesc"),
      },
      {
        name: 'height',
        type: 'number',
        description: l10n.lookup("resizePageArgHeightDesc"),
      },
    ],
    exec: gcli_cmd_resize
  }
];

function gcli_cmd_resize(args, context) {
  let browserWindow = context.environment.chromeWindow;
  let mgr = browserWindow.ResponsiveUI.ResponsiveUIManager;
  mgr.handleGcliCommand(browserWindow,
                        browserWindow.gBrowser.selectedTab,
                        this.name,
                        args);
}
