import 'package:autos/core/constants/api_endpoints.dart'; import 'package:autos/data/sources/remote/api_service.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; class TokenRepository { final ApiService apiService; final _storage = const FlutterSecureStorage(); TokenRepository(this.apiService); static const _tokenKey = "turn14_token"; static const _tokenTimeKey = "turn14_token_time"; /// ✅ Get Valid Token (Auto Refresh If Expired) Future getValidToken(String userId) async { final token = await _storage.read(key: _tokenKey); final time = await _storage.read(key: _tokenTimeKey); if (token != null && time != null) { final savedTime = DateTime.parse(time); final diff = DateTime.now().difference(savedTime); /// ✅ Token Valid for 50 minutes if (diff.inMinutes < 50) { return token; } } /// 🔄 Token Expired → Refresh return await _refreshToken(userId); } /// 🔄 Refresh Token API Future _refreshToken(String userId) async { final response = await apiService.post( ApiEndpoints.getToken, {"userid": userId}, ); final data = response.data; if (data["code"] != "TOKEN_UPDATED") { throw Exception(data["message"]); } final token = data["access_token"]; /// ✅ Save New Token + Timestamp await _storage.write(key: _tokenKey, value: token); await _storage.write( key: _tokenTimeKey, value: DateTime.now().toIso8601String(), ); return token; } }