/**
 * Module Name: JS
 * Description: Allows users to run sandboxed JS code, printing the result in
 * the channel. Also allows admins to run un-sandboxed Javascript code with
 * access to the DepressionBot instance memory.
 */
var vm = require('vm');
var sbox = require('sandbox');

var js = function(dbot) {
    var s = new sbox();

    var commands = {
        // Run JS code sandboxed, return result to channel.
        '~js': function(event) {
            try {
                s.run(event.input[1], function(output) {
                    event.reply(output.result);
                }.bind(this));
            } catch(err) {}
        },

        // Run JS code un-sandboxed, with access to DBot memory (admin-only).
        '~ajs': function(event) {
            if(dbot.config.admins.include(event.user) ) {
                var ret = eval(event.input[1]);
                if(ret !== undefined) {
                    event.reply(ret);
                }
            }
        }
    };
    commands['~js'].regex = [/^~js (.*)/, 2];
    commands['~ajs'].regex = [/^~ajs (.*)/, 2];

    return {
        'name': 'js',
        'ignorable': true,
        'commands': commands
    };
};

exports.fetch = function(dbot) {
    return js(dbot);
};