#!/usr/bin/env node

var fs = require('fs');
var path = require('path');
var jshint = require('jshint').JSHINT;
var async = require('async');

var foldersToProcess = [
		'js'
];

foldersToProcess.forEach(function(folder) {
		processFiles("www/" + folder);
});

function processFiles(dir, callback) {
		var errorCount = 0;
		fs.readdir(dir, function(err, list) {
				if (err) {
						console.log('processFiles err: ' + err);
						return;
				}
				async.eachSeries(list, function(file, innercallback) {
						file = dir + '/' + file;
						fs.stat(file, function(err, stat) {
								if(!stat.isDirectory()) {
										if(path.extname(file) === ".js") {
												lintFile(file, function(hasError) {
														if(hasError) {
																errorCount++;
														}
														innercallback();
												});
										} else {
												innercallback();
										}
								} else {
										innercallback();
								}
						});
				}, function(error) {
						if(errorCount > 0) {
								process.exit(1);
						}
				});
		});
}

function lintFile(file, callback) {
		console.log("Linting " + file);
		fs.readFile(file, function(err, data) {
				if(err) {
						console.log('Error: ' + err);
						return;
				}
				if(jshint(data.toString())) {
						console.log('File ' + file + ' has no errors.');
						console.log('-----------------------------------------');
						callback(false);
				} else {
						console.log('Errors in file ' + file);
						var out = jshint.data(),
						errors = out.errors;
						for(var j = 0; j < errors.length; j++) {
								console.log(errors[j].line + ':' + errors[j].character + ' -> ' + errors[j].reason + ' -> ' +
errors[j].evidence);
						}
						console.log('-----------------------------------------');
						callback(true);
				}
		});
}
