import 'package:flutter/material.dart'; import 'package:rijig_mobile/core/getinfodevice.dart'; import 'package:rijig_mobile/model/response_model.dart'; import 'package:rijig_mobile/model/auth_model.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:rijig_mobile/model/userpin_model.dart'; import 'package:shared_preferences/shared_preferences.dart'; class AuthViewModel extends ChangeNotifier { final AuthModel _authModel = AuthModel(); final PinModel _pinModel = PinModel(); final FlutterSecureStorage _secureStorage = FlutterSecureStorage(); bool isLoading = false; String? errorMessage; ResponseModel? authModel; bool? pinExists; Future login(String phone) async { try { isLoading = true; errorMessage = null; notifyListeners(); final response = await _authModel.login(phone); if (response != null && response.status == 200) { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setBool('isLoggedIn', false); authModel = response; } else { errorMessage = response?.message ?? 'Failed to send OTP'; } } catch (e) { errorMessage = 'Error: $e'; } finally { isLoading = false; notifyListeners(); } } Future verifyOtp(String phone, String otp) async { try { isLoading = true; errorMessage = null; notifyListeners(); String deviceId = await getDeviceId(); var response = await _authModel.verifyOtp(phone, otp, deviceId); if (response != null && response.status == 200) { await _secureStorage.write( key: 'token', value: response.data?['token'], ); await _secureStorage.write( key: 'user_id', value: response.data?['user_id'], ); await _secureStorage.write( key: 'user_role', value: response.data?['user_role'], ); SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setBool('isLoggedIn', true); var pinStatusResponse = await _pinModel.checkPinStatus( response.data?['user_id'], ); if (pinStatusResponse?.status == 200) { pinExists = true; } else { pinExists = false; } authModel = response; notifyListeners(); } else { errorMessage = response?.message ?? 'Failed to verify OTP'; } } catch (e) { errorMessage = 'Error: $e'; } finally { isLoading = false; notifyListeners(); } } Future getAuthToken() async { return await _secureStorage.read(key: 'token'); } Future getUserId() async { return await _secureStorage.read(key: 'user_id'); } Future getUserRole() async { return await _secureStorage.read(key: 'user_role'); } Future logout() async { await _secureStorage.delete(key: 'token'); await _secureStorage.delete(key: 'user_id'); await _secureStorage.delete(key: 'user_role'); SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.remove('isLoggedIn'); notifyListeners(); } Future isUserLoggedIn() async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getBool('isLoggedIn') ?? false; } }