import 'package:get/get.dart'; import 'package:siro_driver/controller/auth/captin/login_captin_controller.dart'; import 'package:siro_driver/controller/functions/crud.dart'; import 'package:siro_driver/print.dart'; import 'package:siro_driver/views/home/on_boarding_page.dart'; import 'package:siro_driver/views/widgets/error_snakbar.dart'; import 'package:siro_driver/controller/functions/country_logic.dart'; import '../../../constant/box_name.dart'; import '../../../constant/links.dart'; import '../../../main.dart'; import '../../../views/auth/syria/registration_view.dart'; // --- Helper Class for Phone Authentication --- class PhoneAuthHelper { // Define your server URLs static final String _sendOtpUrl = '${AppLink.server}/auth/otp/request.php'; static final String _verifyOtpUrl = '${AppLink.server}/auth/otp/verify.php'; static final String _registerUrl = '${AppLink.server}/auth/syria/driver/register_driver.php'; // removed formatSyrianPhone /// Sends an OTP to the provided phone number. static Future sendOtp(String phoneNumber) async { try { final fixedPhone = CountryLogic.formatCurrentCountryPhone(phoneNumber); Log.print('fixedPhone: $fixedPhone'); final response = await CRUD().post( link: _sendOtpUrl, payload: { 'receiver': fixedPhone, 'context': 'login', 'user_type': 'driver' }, ); Log.print('fixedPhone: ${fixedPhone}'); if (response != 'failure') { final data = (response); Log.print('data: ${data}'); if (data['status'] == 'success') { mySnackbarSuccess('An OTP has been sent to your number.'.tr); return true; } else { mySnackeBarError(data['message'] ?? 'Failed to send OTP.'.tr); return false; } } else { mySnackeBarError('Server error. Please try again.'.tr); return false; } } catch (e) { // mySnackeBarError('An error occurred: $e'); return false; } } /// Verifies the OTP and logs the user in. static Future verifyOtp(String phoneNumber, String otpCode) async { try { final fixedPhone = CountryLogic.formatCurrentCountryPhone(phoneNumber); Log.print('fixedPhone: $fixedPhone'); final response = await CRUD().post( link: _verifyOtpUrl, payload: { 'phone_number': fixedPhone, 'token_code': otpCode, 'context': 'login', 'user_type': 'driver' }, ); if (response != 'failure') { final data = response; if (data['status'] == 'success') { final isRegistered = data['message']['isRegistered'] ?? false; box.write(BoxName.phoneVerified, '1'); box.write(BoxName.phoneDriver, phoneNumber); box.write(BoxName.driverID, data['message']['driverID']); if (isRegistered) { // ✅ السائق مسجل مسبقًا - سجل دخوله واذهب إلى الصفحة الرئيسية final driver = data['message']['driver']; // mySnackbarSuccess('Welcome back, ${driver['first_name']}!'); // حفظ بيانات السائق إذا أردت: box.write(BoxName.driverID, driver['id']); box.write(BoxName.emailDriver, driver['email']); await Get.find().loginDriver( driver['id'].toString(), driver['email'].toString()); } else { // ✅ رقم الهاتف تم التحقق منه لكن السائق غير مسجل // mySnackbarSuccess('Phone verified. Please complete registration.'); // Get.offAll(() => SyrianCardAI()); Get.to(() => RegistrationView()); } } else { mySnackeBarError(data['message'] ?? 'Verification failed.'); } } else { mySnackeBarError('Server error. Please try again.'); } } catch (e) { mySnackeBarError('An error occurred: $e'); } } static Future registerUser({ required String phoneNumber, required String firstName, required String lastName, String? email, }) async { try { final response = await CRUD().post( link: _registerUrl, payload: { 'phone_number': phoneNumber, 'first_name': firstName, 'last_name': lastName, 'email': email ?? '', // Send empty string if null }, ); final data = (response); if (data != 'failure') { // Registration successful, log user in await _handleSuccessfulLogin(data['message']); } else { mySnackeBarError( "User with this phone number or email already exists.".tr); } } catch (e) { mySnackeBarError('An error occurred: $e'); } } static Future _handleSuccessfulLogin( Map userData) async { mySnackbarSuccess('Welcome, ${userData['first_name']}!'); // Save user data to local storage (Hive box) using new keys box.write(BoxName.passengerID, userData['id']); box.write(BoxName.nameDriver, userData['first_name']); box.write(BoxName.lastNameDriver, userData['last_name']); box.write(BoxName.emailDriver, userData['email']); box.write(BoxName.phoneDriver, userData['phone']); Get.offAll(() => OnBoardingPage()); // Navigate to home } }