/* Magic Mirror
 *
 * Checker configuration file
 *
 * By Rodrigo Ramírez Norambuena
 *    https://rodrigoramirez.com
 *
 * MIT Licensed.
 *
 */

var v = require("jshint");
var path = require("path");
var fs = require("fs");
var Utils = require(__dirname + "/../../js/utils.js");

if (process.env.NODE_ENV == "test") {return 0};

/* getConfigFile()
 * Return string with path of configuration file
 * Check if set by enviroment variable MM_CONFIG_FILE
 */
function getConfigFile() {
	// FIXME: This function should be in core. Do you want refactor me ;) ?, be good!
	rootPath = path.resolve(__dirname + "/../../");
	var configFileName = path.resolve(rootPath + "/config/config.js");
	if (process.env.MM_CONFIG_FILE) {
		configFileName = path.resolve(process.env.MM_CONFIG_FILE);
	}
	return configFileName;
}

var configFileName = getConfigFile();
// Check if file is present
if (fs.existsSync(configFileName) === false) {
	console.error(Utils.colors.error("File not found: "), configFileName);
	return;
}
// check permision
try {
	fs.accessSync(configFileName, fs.F_OK);
} catch (e) {
	console.log(Utils.colors.error(e));
	return;
}

// Validate syntax of the configuration file.
// In case the there errors show messages and
// return
console.info(Utils.colors.info("Checking file... ", configFileName));
                            // I'm not sure if all ever is utf-8
fs.readFile(configFileName, "utf-8", function(err, data) {
	if (err) {throw err;}
	v.JSHINT(data); // Parser by jshint

	if (v.JSHINT.errors.length == 0) {
		console.log("Your configuration file don't containt syntax error :)");
		return true;
	} else {
		errors = v.JSHINT.data().errors;
		for (idx in errors) {
			error = errors[idx];
			console.log("Line", error.line, "col", error.character, error.reason);
		}
	}
});
