import 'dart:convert';
import 'dart:io';
import 'package:change_case/change_case.dart';
import 'package:json_pretty/json_pretty.dart';

Future<void> main(List<String> args) async {
  if (args.isEmpty) throw Exception("Missing args");
  if (args.length > 1) throw Exception("Too many args");
  final keys = args.first.split(",");
  final enArb = File("lib/_localisation/intl_en.arb");
  final daArb = File("lib/_localisation/intl_da.arb");
  final svArb = File("lib/_localisation/intl_sv.arb");
  final noArb = File("lib/_localisation/intl_no.arb");

  final enContent = await enArb.readAsString();
  final json = jsonDecode(enContent) as Map;

  final argsFormatted = keys.map((arg) => arg.trim().toSnakeCase()).toList();
  for (var key in argsFormatted) {
    if (json.containsKey(key)) {
      throw Exception("Key $key already exists");
    }
  }

  printKeys(argsFormatted);
  await _addKeysToArb(enArb, argsFormatted);
  await _addKeysToArb(daArb, argsFormatted);
  await _addKeysToArb(svArb, argsFormatted);
  await _addKeysToArb(noArb, argsFormatted);
  print("Keys added successfully");
}

Future<void> _addKeysToArb(File arbFile, List<String> keys) async {
  final content = await arbFile.readAsString();
  final json = jsonDecode(content) as Map;
  for (var key in keys) {
    json[key] = "";
  }

  final encoded = jsonEncode(json);
  final pretty = prettyPrintJson(encoded);
  await arbFile.writeAsString(pretty);
}

Future<void> printKeys(List<String> args) async {
  final json = <String, dynamic>{};
  for (var arg in args) {
    json[arg] = "";
  }
  print("Adding keys:");
  print(prettyPrintJson(jsonEncode(json)));
}