import 'token_storage_stub.dart'
    if (dart.library.html) 'token_storage_web.dart'
    if (dart.library.io) 'token_storage_native.dart';

/// 액세스/리프레시 토큰을 안전하게 보관하는 스토리지 인터페이스.
abstract class TokenStorage {
  /// 액세스 토큰을 저장한다. null을 전달하면 기존 값을 제거한다.
  Future<void> writeAccessToken(String? token);

  /// 저장된 액세스 토큰을 읽어온다. 없으면 null을 반환한다.
  Future<String?> readAccessToken();

  /// 리프레시 토큰을 저장한다. null이면 값을 삭제한다.
  Future<void> writeRefreshToken(String? token);

  /// 저장된 리프레시 토큰을 읽어온다. 없으면 null을 반환한다.
  Future<String?> readRefreshToken();

  /// 저장 중인 모든 토큰 정보를 초기화한다.
  Future<void> clear();
}

/// 플랫폼에 맞는 스토리지 구현체를 생성한다.
TokenStorage createTokenStorage() => buildTokenStorage();
