import { colors, consola } from '@vben/node-utils';

import { cac } from 'cac';

import { defineCheckCircularCommand } from './check-circular';
import { defineDepcheckCommand } from './check-dep';
import { defineCodeWorkspaceCommand } from './code-workspace';
import { defineLintCommand } from './lint';
import { definePubLintCommand } from './publint';

try {
  const vsh = cac('vsh');

  // vsh lint
  defineLintCommand(vsh);

  // vsh publint
  definePubLintCommand(vsh);

  // vsh code-workspace
  defineCodeWorkspaceCommand(vsh);

  // vsh check-circular
  defineCheckCircularCommand(vsh);

  // vsh check-dep
  defineDepcheckCommand(vsh);

  // Invalid command
  vsh.on('command:*', () => {
    consola.error(colors.red('Invalid command!'));
    process.exit(1);
  });

  vsh.usage('vsh');
  vsh.help();
  vsh.parse();
} catch (error) {
  consola.error(error);
  process.exit(1);
}
