import 'dart:convert';
import 'dart:typed_data';

import 'package:paperless_mobile/core/type/types.dart';

class ClientCertificate {
  static const bytesKey = 'bytes';
  static const passphraseKey = 'passphrase';

  final Uint8List bytes;
  final String? passphrase;

  ClientCertificate({required this.bytes, this.passphrase});

  static ClientCertificate? nullable(Uint8List? bytes, {String? passphrase}) {
    if (bytes != null) {
      return ClientCertificate(bytes: bytes, passphrase: passphrase);
    }
    return null;
  }

  JSON toJson() {
    return {
      bytesKey: base64Encode(bytes),
      passphraseKey: passphrase,
    };
  }

  ClientCertificate.fromJson(JSON json)
      : bytes = base64Decode(json[bytesKey]),
        passphrase = json[passphraseKey];

  ClientCertificate copyWith({Uint8List? bytes, String? passphrase}) {
    return ClientCertificate(
      bytes: bytes ?? this.bytes,
      passphrase: passphrase ?? this.passphrase,
    );
  }
}
