'use strict';

var logger = require('./logger.js');

/**
 * profiler.js: TODO: add file header description.
 *
 * (C) 2010 Charlie Robbins
 * MIT LICENCE
 */

var profiler;
var hasRequiredProfiler;

function requireProfiler () {
	if (hasRequiredProfiler) return profiler;
	hasRequiredProfiler = 1;
	/**
	 * TODO: add class description.
	 * @type {Profiler}
	 * @private
	 */
	class Profiler {
	  /**
	   * Constructor function for the Profiler instance used by
	   * `Logger.prototype.startTimer`. When done is called the timer will finish
	   * and log the duration.
	   * @param {!Logger} logger - TODO: add param description.
	   * @private
	   */
	  constructor(logger$1) {
	    const Logger = logger.__require();
	    if (typeof logger$1 !== 'object' || Array.isArray(logger$1) || !(logger$1 instanceof Logger)) {
	      throw new Error('Logger is required for profiling');
	    } else {
	      this.logger = logger$1;
	      this.start = Date.now();
	    }
	  }

	  /**
	   * Ends the current timer (i.e. Profiler) instance and logs the `msg` along
	   * with the duration since creation.
	   * @returns {mixed} - TODO: add return description.
	   * @private
	   */
	  done(...args) {
	    if (typeof args[args.length - 1] === 'function') {
	      // eslint-disable-next-line no-console
	      console.warn('Callback function no longer supported as of winston@3.0.0');
	      args.pop();
	    }

	    const info = typeof args[args.length - 1] === 'object' ? args.pop() : {};
	    info.level = info.level || 'info';
	    info.durationMs = (Date.now()) - this.start;

	    return this.logger.write(info);
	  }
	}
	profiler = Profiler;
	return profiler;
}

exports.__require = requireProfiler;
