var uglifyjs = require('uglify-js'),
	less = require('less'),
	async = require('async'),
	fs = require('fs'),

	Minifier = {
		js: {},
		css: {}
	};

/* Javascript */
Minifier.js.minify = function (scripts, callback) {
	try {
		var minified = uglifyjs.minify(scripts);
		callback(minified.code);
	} catch(err) {
		process.send({
			action: 'error',
			error: err
		});
	}
};

Minifier.js.concatenate = function(scripts, callback) {
	async.map(scripts, function(path, next) {
		fs.readFile(path, { encoding: 'utf-8' }, next);
	}, function(err, contents) {
		if (err) {
			process.send({
				action: 'error',
				error: err
			});
		} else {
			callback(contents.reduce(function(output, src) {
				return output.length ? output + ';\n' + src : src;
			}, ''));
		}
	});
};

process.on('message', function(payload) {
	var	executeCallback = function(data) {
			process.send({
				action: payload.action,
				data: data
			});
		};

	switch(payload.action) {
		case 'js.minify':
			Minifier.js.minify(payload.scripts, executeCallback);
		break;

		case 'js.concatenate':
			Minifier.js.concatenate(payload.scripts, executeCallback);
		break;
	}
})