// this file is lib/reportstream.js
// provides a stream interface to JSLint
//
// Copyright 2014 Cubane Canada Inc.
//
// Released under modified MIT/BSD 3-clause license
// See LICENSE for details.

/*jslint unparam: true*/

(function () {
    'use strict';

    var util = require('util'),
        Transform = require('stream').Transform,
        reporter = require('./reporter'),
        ReportStream;


    ReportStream = function ReportStream_constructor(options) {
        var stream = this;

        if (!(this instanceof ReportStream)) {
            return new ReportStream(options);
        }

        options = options || {};
        options.objectMode = true;
        Transform.call(this, options);

        this.reporter = reporter.makeReporter(
            {
                log: function (s) { stream.emit('data', s); },
                err: function (s) { stream.emit('data', s); }
            },
            options.color,
            options.terse
        );

        this.allOK = true;

    };
    util.inherits(ReportStream, Transform);

    function ReportStream_transform(chunk, encoding, callback) {
        // chunk: a package of lint data from JSLint

        this.reporter.report(chunk.file, chunk.linted);

        this.allOK = this.allOK && chunk.linted.ok;

        callback();
    }

    /*jslint nomen: true */
    ReportStream.prototype._transform = ReportStream_transform;

    module.exports = ReportStream;

}());
