import 'package:get/get.dart'; import 'package:sefer_admin1/controller/functions/device_info.dart'; import 'package:sefer_admin1/views/auth/login_page.dart'; import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../../print.dart'; import '../../views/admin/admin_home_page.dart'; import '../../views/widgets/snackbar.dart'; import '../functions/crud.dart'; class OtpHelper extends GetxController { static final String _sendOtpUrl = '${AppLink.server}/Admin/auth/send_otp_admin.php'; static final String _verifyOtpUrl = '${AppLink.server}/Admin/auth/verify_otp_admin.php'; static final String _checkAdminLogin = '${AppLink.server}/Admin/auth/login.php'; /// إرسال OTP static Future sendOtp(String phoneNumber) async { try { final response = await CRUD().post( link: _sendOtpUrl, payload: {'receiver': phoneNumber}, ); if (response != 'failure') { mySnackeBarError('تم إرسال رمز التحقق إلى رقمك عبر WhatsApp'); return true; } else { mySnackeBarError('حدث خطأ من الخادم. حاول مجددًا.'); return false; } } catch (e) { Log.print('OTP SEND ERROR: $e'); mySnackeBarError('حدث خطأ أثناء الإرسال: $e'); return false; } } /// التحقق من OTP Future verifyOtp(String phoneNumber, String otp) async { try { final response = await CRUD().post( link: _verifyOtpUrl, payload: { 'phone_number': phoneNumber, 'otp': otp, 'device_number': box.read(BoxName.fingerPrint) }, ); if (response != 'failure') { if (response['status'] == 'success') { box.write(BoxName.phoneVerified, true); box.write(BoxName.adminPhone, phoneNumber); mySnackbarSuccess('تم التحقق من الرقم بنجاح'); await checkAdminLogin(); } else { mySnackeBarError(response['message'] ?? 'فشل في التحقق.'); } } else { mySnackeBarError('فشل من الخادم. حاول مرة أخرى.'); } } catch (e) { Log.print('OTP VERIFY ERROR: $e'); mySnackeBarError('خطأ في التحقق: $e'); } } Future checkAdminLogin() async { final deviceNumber = box.read(BoxName.fingerPrint); // خزّنه عند التشغيل أول مرة final phoneNumber = box.read(BoxName.adminPhone); // عند التحقق من OTP if (deviceNumber != null && phoneNumber != null) { final response = await CRUD().post( link: _checkAdminLogin, payload: { "device_number": deviceNumber, "phone_number": phoneNumber, }, ); if (response != "failure") { Get.offAll(() => AdminHomePage()); } else { Get.offAll(() => AdminLoginPage()); } } else { Get.offAll(() => AdminLoginPage()); } } @override void onInit() { super.onInit(); DeviceHelper.getDeviceFingerprint().then((deviceFingerprint) { box.write(BoxName.fingerPrint, deviceFingerprint); }); // تأجيل تنفيذ التنقل حتى تنتهي مرحلة البناء Future.microtask(() { if (box.read(BoxName.phoneVerified) == true && box.read(BoxName.adminPhone) != null) { checkAdminLogin(); } else { Get.offAll(() => AdminLoginPage()); } }); } }