#!/usr/bin/env fuchsia-vendored-python
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import difflib
import json
import sys

def usage():
  print('Usage:\n'
        '  diff_json.py FILE1 FILE2 OUTPUT\n'
        '  Generates canonical json text for FILE1 and FILE2, then does a normal text comparison,\n'
        '  writing the diff output to OUTPUT.')

def main():
  if (len(sys.argv) != 4):
    usage()
    exit(-1)
  try:
    with open(sys.argv[1], 'r') as file1:
      with open(sys.argv[2], 'r') as file2:
        with open(sys.argv[3], 'w') as result:
          json1 = json.load(file1)
          json2 = json.load(file2)
          canon1 = json.dumps(json1, sort_keys=True, indent=2).splitlines()
          canon2 = json.dumps(json2, sort_keys=True, indent=2).splitlines()
          diff = difflib.unified_diff(canon1, canon2, sys.argv[1], sys.argv[2], lineterm='')
          diffstr = '\n'.join(diff)
          result.write(diffstr)
          if (len(diffstr) != 0):
            print(f'Error: non-empty diff between canonical json representations:\n{diffstr}')
            exit(-4)
  except IOError as e:
    print(f'Error accessing files: {e}')
    usage()
    exit(-2)
  except ValueError as e:
    print(f'Error decoding json: {e}')
    exit(-3)

if __name__ == '__main__':
  sys.exit(main())
