const utils = require('../utils');
const actions = require('../utils/actions');
const location = require('../utils/location');
const ifttt = require('../utils/ifttt');
const neato = require('../utils/neato');
let registeredActions = {
homeEmpty: null
};
function neato_action_wrapper(neato_action, options) {
options = options || {};
neato.getRobot().then(neato_action).then(function(message) {
console.log("neato_action complete:", message);
if (!options.silent) {
ifttt({
user_id: options.user_id,
event: "notification",
data: message
});
}
}).catch(function(error) {
console.error(error);
if (!options.silent) {
ifttt({
user_id: options.user_id,
event: "notification",
data: error
});
}
});
}
module.exports = {
post: {
"start": {
"home-empty": function(req, res) {
if (registeredActions.homeEmpty) {
ifttt({
user_id: req.body.user_id,
event: "notification",
data: "Cleaning already scheduled"
});
} else {
if (!location.num_home().curr) {
// If no one is home already, clean immediately
neato_action_wrapper(neato.startCleaning);
} else {
// Otherwise, we will create a location action to start cleaning
registeredActions.homeEmpty = actions.register(function(invoke) {
if (!location.num_home().curr) {
invoke();
}
}, function() {
console.log("Start cleaning, everyone left the house...");
neato_action_wrapper(neato.startCleaning);
delete registeredActions.homeEmpty;
return true;
}, {
id: "Clean when no one is home",
type: "location"
});
}
}
res.send(utils.ok());
},
"": function(req, res) {
neato_action_wrapper(neato.startCleaning, {
user_id: req.body.user_id
});
res.send(utils.ok());
},
},
"pause": function(req, res) {
neato_action_wrapper(neato.pauseCleaning, {
user_id: req.body.user_id,
silent: true
});
res.send(utils.ok());
},
"resume": function(req, res) {
neato_action_wrapper(neato.resumeCleaning, {
user_id: req.body.user_id,
silent: true
});
res.send(utils.ok());
}
}
};