import 'dart:convert'; import '../../../core/services/api_service.dart'; import '../../../core/services/secure_storage_service.dart'; import 'models/user_model.dart'; class AuthRepository { final ApiService _apiService = ApiService(); final SecureStorageService _secureStorage = SecureStorageService(); // English: Perform login by email/password, verify response status, and save JWT token. // Arabic: إجراء تسجيل الدخول عن طريق البريد الإلكتروني وكلمة المرور، والتحقق من حالة الاستجابة، وحفظ رمز التحقق. Future login(String email, String password) async { final response = await _apiService.login(email, password); if (response.statusCode == 200) { final data = jsonDecode(response.body) as Map; final token = data['token'] as String; final userJson = data['user'] as Map; // English: Store JWT token securely using secure storage. // Arabic: تخزين رمز التحقق بشكل آمن باستخدام التخزين الآمن. await _secureStorage.writeToken(token); return UserModel.fromJson(userJson); } else { // English: Handle server error messages securely. // Arabic: معالجة رسائل خطأ الخادم بشكل آمن. final data = jsonDecode(response.body) as Map; final errorMessage = data['error'] as String? ?? 'Failed to authenticate'; throw Exception(errorMessage); } } // English: Check if a valid JWT token exists and fetch the authenticated user data. // Arabic: التحقق من وجود رمز تحقق صالح وجلب بيانات المستخدم المصادق عليه. Future getCachedUser() async { final token = await _secureStorage.readToken(); if (token == null || token.isEmpty) { return null; } try { final response = await _apiService.getMe(token); if (response.statusCode == 200) { final data = jsonDecode(response.body) as Map; final userJson = data['user'] as Map; return UserModel.fromJson(userJson); } else { // English: Token is likely invalid or expired, clear it. // Arabic: من المحتمل أن يكون الرمز غير صالح أو منتهي الصلاحية، قم بمسحه. await _secureStorage.deleteToken(); return null; } } catch (_) { // English: Return null if offline or server is unreachable. // Arabic: إرجاع قيمة فارغة إذا كان الجهاز غير متصل أو تعذر الوصول إلى الخادم. return null; } } // English: Clear stored JWT credentials. // Arabic: مسح بيانات اعتماد رمز التحقق المخزنة. Future logout() async { await _secureStorage.deleteToken(); } }