"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.setToolboxTelemetry = setToolboxTelemetry;
exports.recordEvent = recordEvent;
loader.lazyRequireGetter(this, "_environment", "devtools/client/debugger/src/utils/environment");

/* 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/>. */

/**
 * Usage:
 *
 * import { recordEvent } from "src/utils/telemetry";
 *
 * // Event without extra properties
 * recordEvent("add_breakpoint");
 *
 * // Event with extra properties
 * recordEvent("pause", {
 *   "reason": "debugger-statement",
 *   "collapsed_callstacks": 1
 * });
 *
 * // If the properties are in multiple code paths and you can't send them all
 * // in one go you will need to use the full telemetry API.
 *
 * const Telemetry = require("devtools/client/shared/telemetry");
 *
 * const telemetry = new Telemetry();
 *
 * // Prepare the event and define which properties to expect.
 * //
 * // NOTE: You CAN send properties before preparing the event.
 * //
 *  telemetry.preparePendingEvent(this, "pause", "debugger", null, [
 *   "reason", "collapsed_callstacks"
 * ]);
 *
 * // Elsewhere in another codepath send the reason property
 * telemetry.addEventProperty(
 *   this, "pause", "debugger", null, "reason", "debugger-statement"
 * );
 *
 * // Elsewhere in another codepath send the collapsed_callstacks property
 * telemetry.addEventProperty(
 *   this, "pause", "debugger", null, "collapsed_callstacks", 1
 * );
 */
let telemetry;

if ((0, _environment.isNode)()) {
  const Telemetry = require("resource://devtools/client/shared/telemetry.js");

  telemetry = new Telemetry();
}

function setToolboxTelemetry(toolboxTelemetry) {
  telemetry = toolboxTelemetry;
}
/**
 * @memberof utils/telemetry
 * @static
 */


function recordEvent(eventName, fields = {}) {
  telemetry.recordEvent(eventName, "debugger", null, fields);

  if ((0, _environment.isNode)()) {
    const {
      events
    } = window.dbg._telemetry;

    if (!events[eventName]) {
      events[eventName] = [];
    }

    events[eventName].push(fields);
  }
}