// Copyright 2023 The Chromium 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 'dart:convert';
import 'dart:io';

// Note: this is a helper script for development. This is helpful for generating
// test data from DevTools exports.

/// Generates a dart file with a [Map] variable 'data' that contains the JSON
/// data contained in the given json file (first argument).
///
/// To use:
///
/// `dart json_to_map.dart ~/path/to/my_file.json`
///
/// This will generate a file with the same name but with a '.dart' extension
/// instead of '.json' (e.g. ~/path/to/my_file.dart). This will be a valid dart
/// file with a single [Map] variable [data].
void main(List<String> args) {
  if (args.isEmpty) {
    throw Exception('Please pass a file location for the json file.');
  }
  final jsonFileLocation = args.first;
  final jsonFilePath = Uri.parse(jsonFileLocation).path;
  final jsonFile = File(jsonFilePath);
  if (!jsonFile.existsSync()) {
    throw FileSystemException('File not found at $jsonFileLocation');
  }

  final jsonFileName = jsonFilePath.split('/').last;
  final fileNameWithoutExtension = (jsonFileName.split('.')
    ..removeLast()).join('.');
  final jsonFileDirectoryPath = Uri.parse(
    (jsonFilePath.split('/')..removeLast()).join('/'),
  );

  final Map<String, Object?> jsonAsMap = jsonDecode(
    jsonFile.readAsStringSync(),
  );
  var jsonFormattedString = JsonEncoder.withIndent('  ').convert(jsonAsMap);

  // Escape any '$' characters so that Dart does not think we are trying to do
  // String interpolation.
  jsonFormattedString = jsonFormattedString.replaceAll('\$', '\\\$');

  final dartFile =
      File('$jsonFileDirectoryPath/$fileNameWithoutExtension.dart')
        ..createSync()
        ..writeAsStringSync('''
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: prefer_single_quotes
// ignore_for_file: prefer-trailing-comma
// ignore_for_file: require_trailing_commas

final data = <String, Object?>$jsonFormattedString;
''');

  print('Created ${dartFile.path}');
}
