"use strict";

const kOverflowPanel = document.getElementById("widget-overflow");

var gOriginalWidth;
async function stopOverflowing() {
  kOverflowPanel.removeAttribute("animate");
  window.resizeTo(gOriginalWidth, window.outerHeight);
  await TestUtils.waitForCondition(
    () => !document.getElementById("nav-bar").hasAttribute("overflowing")
  );
  CustomizableUI.reset();
}

registerCleanupFunction(stopOverflowing);

/**
 * This checks that subview-compatible items show up as subviews rather than
 * re-anchored panels. If we ever remove the library widget, please
 * replace this test with another subview - don't remove it.
 */
add_task(async function check_library_subview_in_overflow() {
  kOverflowPanel.setAttribute("animate", "false");
  gOriginalWidth = window.outerWidth;

  CustomizableUI.addWidgetToArea("library-button", CustomizableUI.AREA_NAVBAR);

  let navbar = document.getElementById(CustomizableUI.AREA_NAVBAR);
  ok(
    !navbar.hasAttribute("overflowing"),
    "Should start with a non-overflowing toolbar."
  );
  window.resizeTo(kForceOverflowWidthPx, window.outerHeight);

  await TestUtils.waitForCondition(() => navbar.hasAttribute("overflowing"));

  let chevron = document.getElementById("nav-bar-overflow-button");
  let shownPanelPromise = BrowserTestUtils.waitForEvent(
    kOverflowPanel,
    "ViewShown"
  );
  chevron.click();
  await shownPanelPromise;

  let button = document.getElementById("library-button");
  button.click();

  let libraryView = document.getElementById("appMenu-libraryView");
  await BrowserTestUtils.waitForEvent(libraryView, "ViewShown");
  let hasSubviews = !!kOverflowPanel.querySelector("panelmultiview");
  let expectedPanel = hasSubviews
    ? kOverflowPanel
    : document.getElementById("customizationui-widget-panel");
  is(libraryView.closest("panel"), expectedPanel, "Should be inside the panel");
  expectedPanel.hidePopup();
  await Promise.resolve(); // wait for popup to hide fully.
  await stopOverflowing();
});

/**
 * This checks that non-subview-compatible items still work correctly.
 * Ideally we should make the downloads panel and bookmarks/library item
 * proper subview items, then this test can go away, and potentially we can
 * simplify some of the subview anchoring code.
 */
add_task(async function check_downloads_panel_in_overflow() {
  let button = document.getElementById("downloads-button");
  await gCustomizeMode.addToPanel(button);
  await waitForOverflowButtonShown();

  let chevron = document.getElementById("nav-bar-overflow-button");
  let shownPanelPromise = promisePanelElementShown(window, kOverflowPanel);
  chevron.click();
  await shownPanelPromise;

  button.click();
  await TestUtils.waitForCondition(() => {
    let panel = document.getElementById("downloadsPanel");
    return panel && panel.state != "closed";
  });
  let downloadsPanel = document.getElementById("downloadsPanel");
  isnot(
    downloadsPanel.state,
    "closed",
    "Should be attempting to show the downloads panel."
  );
  downloadsPanel.hidePopup();
});
