#!/usr/bin/env node

var fs = require('fs');
// var Loader = require('core').Net.Loader;
var YAML = require("core").yaml.YAML;
var JsonRpcMethod = require("core").jsonrpc.JsonRpcMethod;
var ResourceManager = require('../lib/resource/ResourceManager.js').ResourceManager;
var ResourceMethod = require('../lib/jsonrpc/ResourceMethod.js').ResourceMethod;
var ResourcePackage = require('../lib/resource/ResourcePackage.js').ResourcePackage;
var ResourceRouter = require('../lib/router/ResourceRouter.js').ResourceRouter;


var LoadColorScheme = function (callback) {
    
    var colorsSchemeLocation = null;
    
    if (process.argv.length == 3) {
        colorsSchemeLocation = process.argv[2];
    } else {
        console.log('Test Check LESS Resources require one argument: path to colors Scheme.');
        process.exit(1);
    }
    
    fs.readFile(colorsSchemeLocation, 'utf8', function (err, fileData) {
        if (err) {
            console.error('ERROR read TE/params/onet.yaml', colorsSchemeLocation, err);
            process.exit(1);
        }

        callback((YAML.parse(fileData)).pop());
    });
};

var CheckLessCSS = function (colorScheme, callback) {
    var err = false;
    var doneCount = 0;
    var toDo = -1;

    if (!callback) {
        callback = function () {};
    }
    var done = function () {
        if (!err && ++doneCount == toDo) {
            callback(false);
        }
    };

    var error = function () {
        if (!err) {
            callback(true);
        }

        err = true;
    };

    var router = new ResourceRouter('dynamic/');
    var manager = new ResourceManager.getInstance(router);
    manager.init('dynamic/resources.yaml', true, function (data) {

        manager.stopJob();
        var resources = manager.getResources();
        var keys = Object.keys(resources);
        var key;
        var resource;

        for (var i = 0, l = toDo = keys.length; i < l; i++) {
            key = keys[i];
            resource = resources[key];

            if (resource.getClass() != "external" && resource.getClass() != "inject" && resource.getPlugins().indexOf("Less")) {
                console.log(key)

                var method = new ResourceMethod();
                method.addEventListener(JsonRpcMethod.Event.WRONG_PARAMS, error);
                method.addEventListener(JsonRpcMethod.Event.ERROR, error);
                method.addEventListener(JsonRpcMethod.Event.OK, done);
                method.execute({resource: key, params: colorScheme});
            }
        }
    });
};

console.log('Start :\n');
LoadColorScheme(function (colorScheme) {
    CheckLessCSS(colorScheme, function (err) {
        if (err) {
            process.exit(1);
        }

        process.exit();
    });
});
