/**
 * @license
 * Copyright 2020 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

// Former goog.module ID: Blockly.utils.deprecation

// Set of previously-emitted warnings.
const previousWarnings = new Set();

/**
 * Warn developers that a function or property is deprecated.
 *
 * @param name The name of the function or property.
 * @param deprecationDate The date of deprecation. Prefer 'version n.0.0'
 *     format, and fall back to 'month yyyy' or 'quarter yyyy' format.
 * @param deletionDate The date of deletion. Prefer 'version n.0.0'
 *     format, and fall back to 'month yyyy' or 'quarter yyyy' format.
 * @param opt_use The name of a function or property to use instead, if any.
 * @internal
 */
export function warn(
  name: string,
  deprecationDate: string,
  deletionDate: string,
  opt_use?: string,
) {
  let msg =
    name +
    ' was deprecated in ' +
    deprecationDate +
    ' and will be deleted in ' +
    deletionDate +
    '.';
  if (opt_use) {
    msg += '\nUse ' + opt_use + ' instead.';
  }

  // Don't log deprecation warnings multiple times.
  if (previousWarnings.has(msg)) {
    return;
  }

  previousWarnings.add(msg);
  console.warn(msg);
}