module.exports = {
  get: isOnCooldown,
  set: placeOnCooldown
};

const memcache = require('memcache'),
  md5 = require('md5'),
  keyPrefix = 'cd';

const cache = new memcache.Client();
cache.on('error', console.error);
cache.connect();

// Given a cooldownTime in seconds and a command, returns false if the command is not on cooldown
// returns the time in seconds until the command will be ready again otherwise
function isOnCooldown(command, cooldownTime, callback)
{
  return new Promise((resolve, reject) => {
    let now = Date.now();
    let onCooldown = false;
    let key = keyPrefix + md5(command);

    cache.get(key, function(err, timeUsed) {
      if (err) reject(err);

      if (timeUsed !== null) {
        // Command was recently used, check timestamp to see if it's on cooldown
        if ((now - timeUsed) <= (cooldownTime*1000)) {
          // Calculate how much longer it's on cooldown
          onCooldown = ((cooldownTime*1000) - (now - timeUsed))/1000;
        }
      }

      resolve(onCooldown);
    });
  });
}

// Places a command on cooldown for cooldownTime (in seconds)
function placeOnCooldown(command, cooldownTime)
{
  let key = keyPrefix + md5(command);
  return cache.set(key, Date.now(), handleCacheSet, cooldownTime);
}

function handleCacheSet(error, result) {}

process.on('exit', (code) => {cache.close()});