import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'dart:convert'; import '../models/user.dart'; import '../utils/constants.dart'; import 'api_service.dart'; class AuthService { static final AuthService _instance = AuthService._internal(); factory AuthService() => _instance; AuthService._internal(); final _storage = const FlutterSecureStorage(); final _apiService = ApiService(); User? _currentUser; User? get currentUser => _currentUser; bool get isAuthenticated => _currentUser != null; Future login(String email, String password) async { try { final response = await _apiService.login(email, password); final token = response['access_token'] as String; await _storage.write(key: AppConstants.storageKeyToken, value: token); _apiService.setAuthToken(token); _currentUser = await _apiService.getCurrentUser(); final prefs = await SharedPreferences.getInstance(); await prefs.setString( AppConstants.storageKeyUser, json.encode(_currentUser!.toJson()), ); return true; } catch (e) { print('Login error: $e'); return false; } } Future autoLogin() async { try { final token = await _storage.read(key: AppConstants.storageKeyToken); if (token == null) return false; _apiService.setAuthToken(token); _currentUser = await _apiService.getCurrentUser(); return true; } catch (e) { print('Auto login error: $e'); await logout(); return false; } } Future logout() async { _currentUser = null; _apiService.clearAuthToken(); await _storage.delete(key: AppConstants.storageKeyToken); final prefs = await SharedPreferences.getInstance(); await prefs.remove(AppConstants.storageKeyUser); await prefs.remove(AppConstants.storageKeyFcmToken); } Future saveFcmToken(String fcmToken) async { try { await _apiService.registerFcmToken(fcmToken); final prefs = await SharedPreferences.getInstance(); await prefs.setString(AppConstants.storageKeyFcmToken, fcmToken); } catch (e) { print('Error saving FCM token: $e'); } } }