import 'dart:io';

import 'package:args/args.dart';
import 'package:dart_style/src/io.dart';

void main(List<String> args) {
  var parser = new ArgParser();
  parser.addFlag("help", abbr: "h", negatable: false,
      help: "Shows usage information.");
  parser.addOption("line-length", abbr: "l",
      help: "Wrap lines longer than this.",
      defaultsTo: "80");
  parser.addFlag("overwrite", abbr: "w", negatable: false,
      help: "Overwrite input files with formatted output.\n"
            "If unset, prints results to standard output.");
  parser.addFlag("follow-links", negatable: false,
      help: "Follow links to files and directories.\n"
            "If unset, links will be ignored.");

  var options = parser.parse(args);

  if (options["help"]) {
    printUsage(parser);
    return;
  }

  var overwrite = options["overwrite"];
  var followLinks = options["follow-links"];

  var pageWidth;

  try {
    pageWidth = int.parse(options["line-length"]);
  } on FormatException catch (_) {
    printUsage(parser, '--line-length must be an integer, was '
                       '"${options['line-length']}".');
    exitCode = 64;
    return;
  }

  if (options.rest.isEmpty) {
    printUsage(parser,
        "Please provide at least one directory or file to format.");
    exitCode = 64;
    return;
  }

  for (var path in options.rest) {
    var directory = new Directory(path);
    if (directory.existsSync()) {
      processDirectory(directory, overwrite: overwrite, pageWidth: pageWidth,
          followLinks: followLinks);
      continue;
    }

    var file = new File(path);
    if (file.existsSync()) {
      processFile(file, overwrite: overwrite, pageWidth: pageWidth);
    } else {
      stderr.writeln('No file or directory found at "$path".');
    }
  }
}

void printUsage(ArgParser parser, [String error]) {
  var output = stdout;

  var message = "Reformats whitespace in Dart source files.";
  if (error != null) {
    message = error;
    output = stdout;
  }

  output.write("""$message

Usage: dartformat [-l <line length>] <files or directories...>

${parser.usage}
""");
}
