// Copyright (c) 2019, 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.

// @dart=2.9

import 'dart:io' show File;

import '../test/binary_md_dill_reader.dart' show DillComparer;

import '../test/utils/io_utils.dart' show computeRepoDir;

main(List<String> args) {
  if (args.length != 2) {
    throw "Expects two arguments: The two files to compare";
  }
  File fileA = new File(args[0]);
  File fileB = new File(args[1]);

  List<int> a = fileA.readAsBytesSync();
  List<int> b = fileB.readAsBytesSync();

  bool shouldCompare = false;
  if (a.length != b.length) {
    print("Input lengths are different.");
    shouldCompare = true;
  } else {
    for (int i = 0; i < a.length; ++i) {
      if (a[i] != b[i]) {
        print("Data differs at byte ${i + 1}.");
        shouldCompare = true;
        break;
      }
    }
  }

  if (shouldCompare) {
    StringBuffer message = new StringBuffer();
    final String repoDir = computeRepoDir();
    File binaryMd = new File("$repoDir/pkg/kernel/binary.md");
    String binaryMdContent = binaryMd.readAsStringSync();

    DillComparer dillComparer = new DillComparer();
    if (dillComparer.compare(a, b, binaryMdContent, message)) {
      message.writeln(
          "Somehow the two different byte-lists compared to the same.");
    }

    print(message);
  } else {
    print("Inputs byte-equal!");
  }
}
