/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

add_task(async function testInvalidScaleResetAfterDestinationChange() {
  const mockPrinterName = "Fake Printer";
  await PrintHelper.withTestPage(async helper => {
    helper.addMockPrinter(mockPrinterName);
    await helper.startPrint();

    let destinationPicker = helper.get("printer-picker");

    await helper.openMoreSettings();
    let scaleRadio = helper.get("percent-scale-choice");
    await helper.assertSettingsChanged(
      { shrinkToFit: true },
      { shrinkToFit: false },
      async () => {
        await helper.waitForPreview(() => helper.click(scaleRadio));
      }
    );
    let percentScale = helper.get("percent-scale");

    let scaleError = helper.get("error-invalid-scale");

    await helper.assertSettingsNotChanged({ scaling: 1 }, async () => {
      ok(scaleError.hidden, "Scale error is hidden");
      await helper.text(percentScale, "9");
      await BrowserTestUtils.waitForAttributeRemoval("hidden", scaleError);
      ok(!scaleError.hidden, "Scale error is showing");
    });

    is(destinationPicker.disabled, false, "Destination picker is enabled");

    // Select a new printer
    await helper.dispatchSettingsChange({ printerName: mockPrinterName });
    await TestUtils.waitForCondition(
      () => scaleError.hidden,
      "Wait for scale error to be hidden"
    );
    is(percentScale.value, "100", "Scale has reset to 100");

    await helper.closeDialog();
  });
});

add_task(async function testScaleUIUpdateAfterExit() {
  const mockPrinterName = "Scale";
  await PrintHelper.withTestPage(async helper => {
    helper.addMockPrinter(mockPrinterName);
    //push changes to mock printer before opening printer dialog
    await SpecialPowers.pushPrefEnv({
      set: [
        ["print.printer_Scale.print_scaling", "2"],
        ["print.printer_Scale.print_shrink_to_fit", false],
      ],
    });

    await helper.startPrint();
    await helper.openMoreSettings();

    let scaleRadio = helper.get("percent-scale-choice");
    let percentScale = helper.get("percent-scale");
    is(scaleRadio.checked, false, "Fit to page is set");
    is(percentScale.value, "100", "Default scale is set");

    percentScale = helper.get("percent-scale");
    await helper.openMoreSettings();

    // Switch to the mock printer
    await helper.dispatchSettingsChange({ printerName: mockPrinterName });
    await helper.waitForSettingsEvent();

    is(scaleRadio.checked, true, "Scale is set");
    is(percentScale.value, "200", "200% scaling is set");

    await helper.closeDialog();
  });
});
