import 'dart:io';

import 'package:args/args.dart';
import 'package:args/command_runner.dart';
import 'package:pub/src/pub_embeddable_command.dart';
import 'package:pub/src/log.dart' as log;
import 'package:pub/src/exit_codes.dart' as exit_codes;

class Runner extends CommandRunner {
  ArgResults _options;

  Runner() : super('pub_command_runner', 'Tests the embeddable pub command.') {
    addCommand(PubEmbeddableCommand());
  }

  @override
  Future<int> run(Iterable<String> args) async {
    try {
      _options = super.parse(args);

      return await runCommand(_options);
    } on UsageException catch (error) {
      log.exception(error);
      return exit_codes.USAGE;
    }
  }

  @override
  Future<int> runCommand(ArgResults topLevelResults) async {
    return await super.runCommand(topLevelResults) ?? 0;
  }
}

Future<void> main(List<String> arguments) async {
  exitCode = await Runner().run(arguments);
}
