// 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:io' show File, exit, stderr;

import 'dart:isolate' show RawReceivePort;

import 'dart:convert' show JsonEncoder;

import 'package:yaml/yaml.dart' show loadYaml;

main(List<String> arguments) {
  var port = new RawReceivePort();
  if (arguments.length != 2) {
    stderr.writeln("Usage: yaml2json.dart input.yaml output.json");
    exit(1);
  }
  Uri input = Uri.base.resolve(arguments[0]);
  Uri output = Uri.base.resolve(arguments[1]);
  Map yaml = loadYaml(new File.fromUri(input).readAsStringSync());
  Map<String, dynamic> result = new Map<String, dynamic>();
  result["comment:0"] = "NOTE: THIS FILE IS GENERATED. DO NOT EDIT.";
  result["comment:1"] =
      "Instead modify '${arguments[0]}' and follow the instructions therein.";
  for (String key in yaml.keys) {
    result[key] = yaml[key];
  }
  File file = new File.fromUri(output);
  file.writeAsStringSync(const JsonEncoder.withIndent("  ").convert(result));
  port.close();
}
