// 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.

/// Reformats the status file(s) at the given path.
import 'dart:io';

import 'package:status_file/status_file.dart';

void main(List<String> arguments) {
  if (arguments.length != 1) {
    print("Usage: dart status_file/bin/format.dart <path>");
    exit(1);
  }

  var path = arguments[0];

  if (File(path).existsSync()) {
    formatFile(path);
  } else if (Directory(path).existsSync()) {
    for (var entry in Directory(path).listSync(recursive: true)) {
      if (!entry.path.endsWith(".status")) continue;

      formatFile(entry.path);
    }
  }
}

void formatFile(String path) {
  try {
    var statusFile = StatusFile.read(path);
    File(path).writeAsStringSync(statusFile.serialize());
    print("Formatted $path");
  } on SyntaxError catch (error) {
    stderr.writeln("Could not parse $path:\n$error");
  }
}
