/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

// This refers to a WWW module.
const warningWWW = require('warning');

export function warn(format, ...args) {
  if (__DEV__) {
    printWarning('warn', format, args);
  }
}

export function error(format, ...args) {
  if (__DEV__) {
    printWarning('error', format, args);
  }
}

function printWarning(level, format, args) {
  if (__DEV__) {
    const hasExistingStack =
      args.length > 0 &&
      typeof args[args.length - 1] === 'string' &&
      args[args.length - 1].indexOf('\n    in') === 0;

    if (!hasExistingStack) {
      const React = require('react');
      const ReactSharedInternals =
        React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
      // Defensive in case this is fired before React is initialized.
      if (ReactSharedInternals != null) {
        const ReactDebugCurrentFrame =
          ReactSharedInternals.ReactDebugCurrentFrame;
        const stack = ReactDebugCurrentFrame.getStackAddendum();
        if (stack !== '') {
          format += '%s';
          args.push(stack);
        }
      }
    }
    // TODO: don't ignore level and pass it down somewhere too.
    args.unshift(format);
    args.unshift(false);
    warningWWW.apply(null, args);
  }
}
