// Dart imports:
import 'dart:convert';
import 'dart:typed_data';

import 'package:hive_ce/hive.dart';
import 'package:remever/common/storage.dart';

import 'core_service.dart';

///
/// Сервис для работы с ключами шифрования
///
class EncKeysService extends CoreService {
  ///
  /// Получение ключа для шифрования
  ///
  Future<String> getRawKey(String keyFor) async {
    String? encKey = await hiveKeysStorage.read(key: keyFor);

    if (encKey == null) {
      final List<int> hiveKey = Hive.generateSecureKey();

      encKey = base64UrlEncode(hiveKey);

      await hiveKeysStorage.write(key: keyFor, value: encKey);
    }

    return encKey;
  }

  ///
  /// Получение ключа шифрования
  ///
  /// Если ключа ранее не существовало - он будет создан
  ///
  Future<Uint8List> getKey(String keyFor) async {
    String? encKey = await getRawKey(keyFor);

    return base64Url.decode(encKey);
  }

  ///
  /// Получение ключа шифрования в виде строки
  ///
  /// Если ключа ранее не существовало - он будет создан
  ///
  Future<String> getStringKey(String keyFor) async {
    final Uint8List key = await getKey(keyFor);

    return String.fromCharCodes(key);
  }
}
