import 'package:marco/helpers/services/auth_service.dart'; import 'package:marco/helpers/services/localizations/language.dart'; import 'package:marco/helpers/theme/theme_customizer.dart'; import 'package:shared_preferences/shared_preferences.dart'; class LocalStorage { static const String _loggedInUserKey = "user"; static const String _themeCustomizerKey = "theme_customizer"; static const String _languageKey = "lang_code"; static const String _jwtTokenKey = "jwt_token"; static const String _refreshTokenKey = "refresh_token"; static SharedPreferences? _preferencesInstance; static SharedPreferences get preferences { if (_preferencesInstance == null) { throw ("Call LocalStorage.init() to initialize local storage"); } return _preferencesInstance!; } static Future init() async { _preferencesInstance = await SharedPreferences.getInstance(); await initData(); } static Future initData() async { SharedPreferences preferences = await SharedPreferences.getInstance(); AuthService.isLoggedIn = preferences.getBool(_loggedInUserKey) ?? false; ThemeCustomizer.fromJSON(preferences.getString(_themeCustomizerKey)); } static Future setLoggedInUser(bool loggedIn) async { return preferences.setBool(_loggedInUserKey, loggedIn); } static Future setCustomizer(ThemeCustomizer themeCustomizer) { return preferences.setString(_themeCustomizerKey, themeCustomizer.toJSON()); } static Future setLanguage(Language language) { return preferences.setString(_languageKey, language.locale.languageCode); } static String? getLanguage() { return preferences.getString(_languageKey); } static Future removeLoggedInUser() async { return preferences.remove(_loggedInUserKey); } // Add methods to handle JWT and Refresh Token static Future setToken(String key, String token) { return preferences.setString(key, token); } static String? getToken(String key) { return preferences.getString(key); } static Future removeToken(String key) { return preferences.remove(key); } // Convenience methods for getting the JWT and Refresh tokens static String? getJwtToken() { return getToken(_jwtTokenKey); } static String? getRefreshToken() { return getToken(_refreshTokenKey); } static Future setJwtToken(String jwtToken) { return setToken(_jwtTokenKey, jwtToken); } static Future setRefreshToken(String refreshToken) { return setToken(_refreshTokenKey, refreshToken); } }