'use strict';
/* eslint-disable no-underscore-dangle, no-console */
var __extends =
  (this && this.__extends) ||
  (function () {
    var extendStatics = function (d, b) {
      extendStatics =
        Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array &&
          function (d, b) {
            d.__proto__ = b;
          }) ||
        function (d, b) {
          for (var p in b)
            if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
        };
      return extendStatics(d, b);
    };
    return function (d, b) {
      if (typeof b !== 'function' && b !== null)
        throw new TypeError(
          'Class extends value ' + String(b) + ' is not a constructor or null'
        );
      extendStatics(d, b);
      function __() {
        this.constructor = d;
      }
      d.prototype =
        b === null ?
          Object.create(b)
        : ((__.prototype = b.prototype), new __());
    };
  })();
var __importDefault =
  (this && this.__importDefault) ||
  function (mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
Object.defineProperty(exports, '__esModule', { value: true });
exports.wasReported = exports.log = void 0;
var progress_1 = __importDefault(require('progress'));
var assert_1 = __importDefault(require('assert'));
var chalk_1 = __importDefault(require('chalk'));
var Log = /** @class */ (function () {
  function Log() {
    this.debugMode = false;
  }
  Log.prototype.lines = function (lines) {
    if (lines === undefined) {
      return;
    }
    if (!Array.isArray(lines)) {
      console.log('  ' + lines);
      return;
    }
    for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
      var line = lines_1[_i];
      console.log('  ' + line);
    }
  };
  Log.prototype.debug = function (text, lines) {
    if (!this.debugMode) {
      return;
    }
    console.log('> ' + chalk_1.default.green('[debug]') + ' ' + text);
    this.lines(lines);
  };
  Log.prototype.info = function (text, lines) {
    console.log('> ' + text);
    this.lines(lines);
  };
  Log.prototype.warn = function (text, lines) {
    console.log('> ' + chalk_1.default.blue('Warning') + ' ' + text);
    this.lines(lines);
  };
  Log.prototype.error = function (text, lines) {
    var message = text instanceof Error ? text.stack : text;
    console.log('> ' + chalk_1.default.red('Error!') + ' ' + message);
    this.lines(lines);
  };
  Log.prototype.enableProgress = function (text) {
    (0, assert_1.default)(!this.bar);
    text += ' '.repeat(35 - text.length);
    this.bar = new progress_1.default('  ' + text + ' [:bar] :percent', {
      stream: process.stdout,
      width: 20,
      complete: '=',
      incomplete: ' ',
      total: 100,
    });
  };
  Log.prototype.showProgress = function (percentage) {
    if (!this.bar) {
      return;
    }
    this.bar.update(percentage / 100);
  };
  Log.prototype.disableProgress = function () {
    if (!this.bar) {
      return;
    }
    // avoid empty line
    if (!this.bar.complete) {
      this.bar.terminate();
    }
    delete this.bar;
  };
  return Log;
})();
exports.log = new Log();
var ReportedError = /** @class */ (function (_super) {
  __extends(ReportedError, _super);
  function ReportedError() {
    var _this = (_super !== null && _super.apply(this, arguments)) || this;
    _this.name = 'ReportedError';
    _this.wasReported = true;
    return _this;
  }
  return ReportedError;
})(Error);
function wasReported(error, lines) {
  var reportedError = new ReportedError('No message');
  if (typeof error === 'string') {
    exports.log.error(error, lines);
    reportedError = new ReportedError(error);
  }
  return reportedError;
}
exports.wasReported = wasReported;
//# sourceMappingURL=log.js.map
