import 'dart:convert';
import 'dart:io';
import 'package:csv/csv.dart';

String _translationsUrl(String apiKey) {
  const sheetId = "1gOIXPpBFlrWYawp0yt1sN456siIp2jyNVBopcQRra8A";
  const sheetName = "translations";
  return "https://docs.google.com/spreadsheets/d/$sheetId/gviz/tq?tqx=out:csv&sheet=$sheetName&key=$apiKey";
}

Future<String> _loadApiKeyFromSecrets() async {
  final dotEnvFile = File("env/.env");
  final lines = await dotEnvFile.readAsLines();
  final apiKey = lines.firstWhere(
    (line) => line.startsWith("GOOGLE_SHEETS_API_KEY"),
  );
  return apiKey.split("=")[1].toString();
}

Future<void> main() async {
  final http = HttpClient();
  final apiKey = await _loadApiKeyFromSecrets();
  print("Loading google sheet from ${_translationsUrl(apiKey)}");
  final response = await http.getUrl(Uri.parse(_translationsUrl(apiKey)));
  print("Writing data to memory...");
  final responseBody = await response.close();
  print("Decoding data...");
  final buffer = StringBuffer();
  final data = await responseBody.transform(utf8.decoder).toList();
  buffer.writeAll(data);
  final dataString = buffer.toString();
  final enArb = File("assets/translations/intl_en.arb");
  final daArb = File("assets/translations/intl_da.arb");
  final csvList = const CsvToListConverter().convert(
    dataString,
    fieldDelimiter: ',',
    textDelimiter: '"',
    eol: '\n',
  );
  final Map<String, dynamic> enJson = {};
  final Map<String, dynamic> daJson = {};
  for (var i = 1; i < csvList.length; i++) {
    final row = csvList[i];
    final key = row[0].toString();
    final en = row[1].toString();
    final da = row[2].toString();
    enJson[key] = _parseValue(en);
    daJson[key] = _parseValue(da);
  }

  const encoder = JsonEncoder.withIndent("  ");
  await enArb.writeAsString(encoder.convert(enJson));
  await daArb.writeAsString(encoder.convert(daJson));
  print("Complete");
}

String _parseValue(String value) {
  if (value.contains("\\n")) {
    return value.replaceAll("\\n", "\n");
  }
  return value;
}