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() {
    this._browsers = [];
    this._isRendered = false;
  };

  this.onBrowserStart = function(browser) {
    this._browsers.push(browser);

    if (this._isRendered) {
      this.write('\n');
    }

    this.write(this._refresh());
  };


  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;
