#!/usr/bin/env dart
import 'dart:io';

import 'package:args/args.dart';
import 'package:completion/completion.dart';

import '../test/completion_tests_args.dart';

void main(List<String> args) {
  final argParser = getHelloSampleParser();

  ArgResults argResult;

  try {
    argResult = tryArgsCompletion(
      args,
      argParser,
      // logFile: '_completion.log',
    );
  } on FormatException catch (ex) {
    // TODO: print color?
    print(ex.message);
    print(argParser.usage);

    /// 64 - C/C++ standard for bad usage.
    exitCode = 64;
    return;
  }

  if (argResult.command != null) {
    final subCommand = argResult.command;
    final subCommandParser = argParser.commands[subCommand.name];

    if (subCommand.name == 'help') {
      // so the help command was run.

      // there are args here, too. Super fun.
      if (subCommand.command != null) {
        // we have a sub-sub command. Fun!
        // let's get the sub-sub command parser

        final subSubCommand = subCommand.command;
        if (subSubCommand.name == 'assistance') {
          print('Yes, we have help for help...just calling it assistance');
          // let's print sub help. Very crazy.
          print(subCommandParser.usage);
          return;
        } else {
          throw StateError(
              'no clue what that subCammand is: ${subSubCommand.name}');
        }
      }
      // one sub-sub command: help. Really.

      var usage = argParser.usage;

      if (subCommand['yell'] as bool) {
        usage = usage.toUpperCase();
        print("I'm yelling, so the case of the available commands will be off");
      }

      print(usage);
      return;
    }
  }

  final name = argResult.rest.isEmpty ? 'World' : argResult.rest.first;

  final greeting = argResult['friendly'] as bool ? 'Hiya' : 'Hello';

  final salutationVal = argResult['salutation'] as String;
  final salutation = salutationVal == null ? '' : '$salutationVal ';

  var message = '$greeting, $salutation$name';

  if (argResult['loud'] as bool) {
    message = message.toUpperCase();
  }

  print(message);
}
