var BaseReporter = require('./Base');


var ProgressReporter = function(formatError, reportSlow) {
  BaseReporter.call(this, formatError, reportSlow);


  this.writeCommonMsg = function(msg) {
    this.write(this._remove() + msg + this._render());
  };


  this.specSuccess = function() {
    this.write(this._refresh());
  };


  this.onBrowserComplete = function() {
    this.write(this._refresh());
  };


  this.onRunStart = function(browsers) {
    this._browsers = browsers;
    this._isRendered = false;
  };


  this._remove = function() {
    if (!this._isRendered) {
      return '';
    }

    var cmd = '';
    this._browsers.forEach(function() {
      cmd += '\x1B[1A' + '\x1B[2K';
    });

    this._isRendered = false;

    return cmd;
  };

  this._render = function() {
    this._isRendered = true;

    return this._browsers.map(this.renderBrowser).join('\n') + '\n';
  };

  this._refresh = function() {
    return this._remove() + this._render();
  };
};


// PUBLISH
module.exports = ProgressReporter;