import 'dart:convert';
import 'dart:io';
import 'package:args/command_runner.dart';
import 'package:random_string/random_string.dart' as rs;

class KeyCommand extends Command {
  @override
  String get name => 'key';

  @override
  String get description => 'Generates a new `angel_auth`key.';

  @override
  run() async {
    var secret = rs.randomAlphaNumeric(32);
    print('Generated new JWT secret: $secret');
    await changeSecret(new File('config/default.yaml'), secret);
    await changeSecret(new File('config/production.yaml'), secret);
  }

  changeSecret(File file, String secret) async {
    if (await file.exists()) {
      var sink = await file.openWrite();

      await for (var chunk
          in await file.openRead().transform(UTF8.decoder)) {
        var lines = chunk.split('\n');

        for (String line in lines) {
          if (line.contains('jwt_secret:')) {
            sink.writeln('jwt_secret: $secret');
          } else sink.writeln(line);
        }
      }
    }
  }
}