var abbrev = require('abbrev');
var mout = require('mout');

function expandNames(obj, prefix, stack) {
  prefix = prefix || '';
  stack = stack || [];

  mout.object.forOwn(obj, function (value, name) {
    name = prefix + name;

    stack.push(name);

    if (typeof value === 'object' && !value.line) {
      expandNames(value, name + ' ', stack);
    }
  });

  return stack;
}

module.exports = function (commands) {
  var abbreviations = abbrev(expandNames(commands));

  abbreviations.i = 'install';
  abbreviations.rm = 'uninstall';
  abbreviations.unlink = 'uninstall';
  abbreviations.ls = 'list';

  return abbreviations;
};
