Cu.import("resource://gre/modules/Services.jsm");
var { PaymentManager } = Cu.import("resource://gre/modules/Payment.jsm", {});
Cu.import("resource://webapprt/modules/WebappRT.jsm");

function test() {
  waitForExplicitFinish();

  let curTest = 0;

  let tests = [];
  tests.push({
    providerUri: "https://example.com:443/webapprtChrome/webapprt/test/chrome/mozpay-success.html?req=",
    message: "Success."
  });
  // tests.push({
  //   providerUri: "https://example.com:443/webapprtChrome/webapprt/test/chrome/mozpay-failure.html?req=",
  //   message: "Chocolate rejected."
  // });

  let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" +
            "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" +
            "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" +
            "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" +
            "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" +
            "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" +
            "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" +
            "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" +
            "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" +
            "IyKIC1TKelVhNklvk-Ou1l_daKntaFI";

  PaymentManager.registeredProviders = {};
  PaymentManager.registeredProviders["mock/payments/inapp/v1"] = {
    name: "mockprovider",
    description: "Mock Payment Provider",
    uri: tests[curTest].providerUri,
    requestMethod: "GET"
  };

  // Disabled because the mozPay API is disabled, so the provider window
  // won't be shown.
  //
  // let providerWindow;
  // let winObserver = function(win, topic) {
  //   if (topic == "domwindowopened") {
  //     win.addEventListener("load", function onLoadWindow() {
  //       win.removeEventListener("load", onLoadWindow, false);
  //
  //       if (win.document.getElementById("content") &&
  //           win.document.getElementById("content").getAttribute("src") ==
  //             (tests[curTest].providerUri + jwt)) {
  //         ok(true, "Payment provider window shown.");
  //         providerWindow = win;
  //       }
  //     }, false);
  //   }
  // }
  // Services.ww.registerNotification(winObserver);

  let mutObserver = null;

  function onLoad() {
    let msg = gAppBrowser.contentDocument.getElementById("msg");
    mutObserver = new MutationObserver(function(mutations) {
      is(msg.textContent, tests[curTest].message, "Got: " + tests[curTest].message);

      // if (!providerWindow) {
      //   ok(false, "Payment provider window shown.");
      // } else {
      //   providerWindow.close();
      //   providerWindow = null;
      // }

      runNextTest();
    });
    mutObserver.observe(msg, { childList: true });
  }

  loadWebapp("mozpay.webapp", undefined, onLoad);

  function runNextTest() {
    // providerWindow = null;
    if (mutObserver) {
      mutObserver.disconnect();
    }

    curTest++;

    if (curTest < tests.length) {
      PaymentManager.registeredProviders["mock/payments/inapp/v1"].uri = tests[curTest].providerUri;

      gAppBrowser.addEventListener("load", function onLoadH() {
        gAppBrowser.removeEventListener("load", onLoadH, true);
        onLoad();
      }, true);
      gAppBrowser.reload();
    } else {
      finish();
    }
  }

  registerCleanupFunction(function() {
    // Services.ww.unregisterNotification(winObserver);
    mutObserver.disconnect();
  });
}
