// 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 Map<String, dynamic> data = <String, dynamic>$jsonFormattedString;
''',
    );

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