import '../security/secret_store.dart';

/// Remembers the display names peers have published (their NIP-01 kind:0
/// `name`), so the inbox and chat show a human name instead of a raw key —
/// even offline. Keystore-backed (no plaintext at rest).
class ProfileCache {
  /// [accountScope] namespaces the keys per social identity (empty = the
  /// original identity's legacy keys). See [socialAccountScope].
  ProfileCache(this._store, {String accountScope = ''})
      : _prefix = accountScope.isEmpty
            ? 'tane.social.name.'
            : 'tane.social.$accountScope.name.';

  final SecretStore _store;
  final String _prefix;

  /// The cached name for [pubkeyHex], or null if none is known.
  Future<String?> name(String pubkeyHex) async {
    final value = await _store.read('$_prefix$pubkeyHex');
    return (value == null || value.isEmpty) ? null : value;
  }

  Future<void> setName(String pubkeyHex, String name) =>
      _store.write('$_prefix$pubkeyHex', name.trim());
}

/// A compact, human-ish rendering of a public key when no name is known yet.
String shortPubkey(String pubkeyHex) => pubkeyHex.length <= 12
    ? pubkeyHex
    : '${pubkeyHex.substring(0, 6)}…${pubkeyHex.substring(pubkeyHex.length - 4)}';
