// Copyright (c) 2016, 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:io';

import 'package:kernel/kernel.dart';

class CommandLineHelper {
  static void requireExactlyOneArgument(
      List<String> args, void Function() usage,
      {bool requireFileExists: false}) {
    if (args.length != 1) {
      print("Expected exactly 1 argument, got ${args.length}.");
      usage();
    }
    if (requireFileExists) CommandLineHelper.requireFileExists(args[0]);
  }

  static void requireVariableArgumentCount(
      List<int> ok, List<String> args, void Function() usage) {
    if (!ok.contains(args.length)) {
      print("Expected the argument count to be one of ${ok}, got "
          "${args.length}.");
      usage();
    }
  }

  static void requireFileExists(String file) {
    if (!new File(file).existsSync()) {
      print("File $file doesn't exist.");
      exit(1);
    }
  }

  static Component tryLoadDill(String file) {
    try {
      return loadComponentFromBinary(file);
    } catch (e, s) {
      print("$file can't be loaded:");
      print('$e\n$s');
      exit(1);
    }
  }
}
