#!/usr/bin/env node

/**
 * Module dependencies.
 */

require('./util');
const program = require('commander');
const { head, map } = require('lodash');
const Matcher = require('did-you-mean');

program
  .command('serve', 'serve the application')
  .command('settings', 'interact with the application settings')
  .command('assets', 'interact with assets')
  .command('setup', 'setup the application')
  .command('jobs', 'work with the job queues')
  .command('token', 'work with the access tokens')
  .command('users', 'work with the application auth')
  .command('migration', 'provides utilities for migrating the database')
  .command(
    'plugins',
    'provides utilities for interacting with the plugin system'
  )
  .parse(process.argv);

// If the command wasn't found, output help.
const commands = map(program.commands, '_name');
const command = head(program.args);
if (!commands.includes(command)) {
  const m = new Matcher(commands);
  const similarCommands = m.list(command);

  console.error(
    `cli '${command}' is not a talk cli command. See 'cli --help'.`
  );
  if (similarCommands.length > 0) {
    const sc = similarCommands.map(({ value }) => `\t${value}\n`).join('');
    console.error(`\nThe most similar commands are\n${sc}`);
  }
  process.exit(1);
}
