/* 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";

/**
 * Bug 1847971 - ebay.com listings page
 *
 * eBay does not show the barcode scanner option on Firefox on Android,
 * though it seems to work. It uses a server-side check to tell itself
 * to not enable the scanner feature, so rather than pretend to be Chrome
 * entirely, we carefully change `barcodeEnabled` from `false` to `true`.
 */

if (!window.$feprelist_C) {
  const ENABLED_MESSAGE =
    "The barcode scanner feature has been force-enabled. See https://bugzilla.mozilla.org/show_bug.cgi?id=1847971 for details.";

  let value = undefined;

  function check(obj) {
    if (obj === null) {
      return false;
    }
    if (Array.isArray(obj)) {
      for (const v of obj) {
        if (check(v)) {
          return true;
        }
      }
      return false;
    }
    if (typeof obj === "object") {
      if ("barcodeEnabled" in obj) {
        obj.barcodeEnabled = true;
        return true;
      }
      for (const v of Object.values(obj)) {
        if (check(v)) {
          return true;
        }
      }
    }
    return false;
  }

  Object.defineProperty(window, "$feprelist_C", {
    configurable: true,

    get() {
      return value;
    },

    set(v) {
      try {
        if (check(v)) {
          console.info(ENABLED_MESSAGE);
        }
      } catch (_) {}
      value = v;
    },
  });
}
