// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';
import 'dart:io';

import 'compare_failures.dart' as compare_failures;
import 'current_summary.dart' as current_summary;
import 'find_shard.dart' as find_shard;
import 'status_summary.dart' as status_summary;
import 'summary.dart' as summary;

typedef Future MainFunction(List<String> args);

Future help(List<String> args) async {
  if (args.length == 1 && args[0] == "--help") {
    print("This help");
    return null;
  }

  print("A script that combines multiple commands:\n");

  for (String command in commands.keys) {
    print(command);
    print('-' * command.length);
    await commands[command](["--help"]);
    print("");
  }
}

const Map<String, MainFunction> commands = const <String, MainFunction>{
  "help": help,
  "summary": summary.main,
  "compare-failures": compare_failures.main,
  "current-summary": current_summary.main,
  "status-summary": status_summary.main,
  "find-shard": find_shard.main,
};

main(List<String> args) async {
  if (args.isEmpty) {
    await help([]);
    exit(-1);
  }
  var command = commands[args[0]];
  if (command == null) {
    await help([]);
    exit(-1);
  }
  command(args.sublist(1));
}
