const remoteExec = require('../remoteExec.js');

// links lubiland and module.exports
const lubiland = module.exports = {};

lubiland['infrastructure'] = {};

lubiland['infrastructure']['rebuild'] = {};
lubiland['infrastructure']['rebuild'].regex = /^([a-zA-Z0-9\-\_]*)$/;
lubiland['infrastructure']['rebuild'].usage = '<container>';
lubiland['infrastructure']['rebuild'].exec = (args, room, event) => {
    return new Promise((resolve, reject) => {
        const container = args[1];

        matrixClient.sendNotice(room.roomId, 'rebuilding container ' + container);

        remoteExec('./rebuild.sh ' + container)
        .then(function(success) {
            matrixClient.sendNotice(room.roomId, event.sender.userId + '\nrebuilt container ' + container);
        }, function(process) {
            matrixClient.sendNotice(room.roomId, event.sender.userId + '\nrebuild of container ' + container + ' failed.\ncode: ' + process.code + '\nstdout: \n```\n' + process.stdout + '```\nstderr: \n```\n' + process.stderr + '\n```');
        });
    });
};


lubiland['heimdall'] = {};

lubiland['heimdall']['join'] = {};
lubiland['heimdall']['join'].regex = /^(.*)$/;
lubiland['heimdall']['join'].usage = '<container>';
lubiland['heimdall']['join'].exec = (args, room, event) => {
    return new Promise((resolve, reject) => {
        const roomId = args[1];

        matrixClient.joinRoom(roomId)
        .then((success) => {
            matrixClient.sendNotice(room.roomId, ' joined ' + success.name);
        }, (fail) => {
            matrixClient.sendNotice(room.roomId, 'error while trying to join the other room: ' + fail.message);
        })
    });
};