// ignore: deprecated_member_use, avoid_web_libraries_in_flutter
import 'dart:html' as html;

import 'token_storage.dart';

/// 웹 로컬스토리지에 저장할 액세스 토큰 키.
const _kAccessTokenKey = 'access_token';

/// 웹 로컬스토리지에 저장할 리프레시 토큰 키.
const _kRefreshTokenKey = 'refresh_token';

/// 웹 환경에서 로컬스토리지를 활용하는 토큰 스토리지를 생성한다.
TokenStorage buildTokenStorage() => _WebTokenStorage(html.window.localStorage);

/// 브라우저 로컬스토리지에 토큰을 저장하는 구현체.
class _WebTokenStorage implements TokenStorage {
  const _WebTokenStorage(this._storage);

  final Map<String, String> _storage;

  @override
  Future<void> clear() async {
    _storage.remove(_kAccessTokenKey);
    _storage.remove(_kRefreshTokenKey);
  }

  @override
  Future<String?> readAccessToken() async => _storage[_kAccessTokenKey];

  @override
  Future<String?> readRefreshToken() async => _storage[_kRefreshTokenKey];

  @override
  Future<void> writeAccessToken(String? token) async {
    if (token == null || token.isEmpty) {
      _storage.remove(_kAccessTokenKey);
    } else {
      _storage[_kAccessTokenKey] = token;
    }
  }

  @override
  Future<void> writeRefreshToken(String? token) async {
    if (token == null || token.isEmpty) {
      _storage.remove(_kRefreshTokenKey);
    } else {
      _storage[_kRefreshTokenKey] = token;
    }
  }
}
