var gulp     = require('gulp');
var mocha    = require('gulp-mocha');
var istanbul = require('gulp-istanbul');
var jshint   = require('gulp-jshint');
[%- IF sonar %]
var sonar    = require('gulp-sonar');
[%- END %]
var gutil    = require('gulp-util');

gulp.task('lint', function() {
    return gulp.src('./lib/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

gulp.task('test', function(cb) {
    return gulp.src(['lib/*.js'])
        .pipe(istanbul())
        .pipe(istanbul.hookRequire())
        .on('finish', function () {
            gulp.src(['test/*.js'], { read: false })
                .pipe(mocha())
                .pipe(istanbul.writeReports())
                .on('error', gutil.log);
        });
});

[%- IF sonar %]
gulp.task('sonar', function () {
    var options = {
        sonar: {
            host: {
                url: 'http://localhost:9000'
            },
            jdbc: {
                url: 'jdbc:mysql://localhost:3306/sonar',
                username: 'sonar',
                password: 'sonar'
            },
            projectKey: 'sonar:node-getopt-long:0.0.1',
            projectName: 'node-getopt-long',
            projectVersion: '0.0.1',
            // comma-delimited string of source directories
            sources: 'lib',
            language: 'js',
            sourceEncoding: 'UTF-8',
            javascript: {
                lcov: {
                    reportPath: 'coverage/locv.info'
                }
            }
        }
    };

    // gulp source doesn't matter, all files are referenced in options object above
    return gulp.src('lib/getopt-long.js', { read: false })
        .pipe(sonar(options))
        .on('error', gutil.log);
});
[%- END %]

gulp.task('watch', function() {
    gulp.watch(['lib/**', 'test/**'], ['lint', 'test']);
});