import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/controller/auth/captin/login_captin_controller.dart'; import 'package:sefer_driver/controller/functions/crud.dart'; import 'package:sefer_driver/main.dart'; import 'package:sefer_driver/views/auth/captin/cards/sms_signup.dart'; import 'package:sefer_driver/views/home/on_boarding_page.dart'; import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'package:get/get.dart'; import 'package:google_sign_in/google_sign_in.dart'; import '../../views/auth/captin/ai_page.dart'; import '../functions/add_error.dart'; import '../functions/encrypt_decrypt.dart'; class GoogleSignInHelper { static final GoogleSignIn _googleSignIn = GoogleSignIn( scopes: [ 'email', 'profile', ], ); // Method to handle Google Sign-In static Future signIn() async { try { final GoogleSignInAccount? googleUser = await _googleSignIn.signIn(); if (googleUser != null) { await _handleSignUp(googleUser); if (box.read(BoxName.countryCode) == 'Egypt') { Get.to(() => SmsSignupEgypt()); } else if (box.read(BoxName.countryCode) == 'Jordan') { Get.to(() => AiPage()); } } return googleUser; } catch (error) { return null; } } Future signInFromLogin() async { try { final GoogleSignInAccount? googleUser = await _googleSignIn.signIn(); if (googleUser != null) { // Handle sign-up and store user information await _handleSignUp(googleUser); // Retrieve driverID and emailDriver with added validation final driverID = (box.read(BoxName.driverID)!.toString()) ?? 'Unknown ID'; final emailDriver = (box.read(BoxName.emailDriver)!.toString()) ?? 'Unknown Email'; // Debug print statements print('Driver ID: $driverID'); print('Driver Email: $emailDriver'); // Check if driverID is a valid numeric string // if (driverID != 'Unknown ID' && int.tryParse(driverID) != null) { await Get.find() .loginWithGoogleCredential(driverID, emailDriver); // } // else { // print('Invalid driverID format: $driverID'); // Get.snackbar('Login Error', 'Invalid driver ID format.', // backgroundColor: AppColor.redColor); // } } return googleUser; } catch (error, stackTrace) { mySnackeBarError('$error'); CRUD.addError(error.toString(), stackTrace.toString(), 'GoogleSignInAccount?> signInFromLogin()'); return null; } } static Future _handleSignUp(GoogleSignInAccount user) async { // Store driver information box.write(BoxName.driverID, (user.id) ?? 'Unknown ID'); // Ensure there's a fallback value box.write(BoxName.emailDriver, (user.email) ?? 'Unknown Email'); } // Method to handle Google Sign-Out static Future signOut() async { try { await _googleSignIn.signOut(); await _handleSignOut(); } catch (error) {} } static Future _handleSignOut() async { // Clear stored driver information box.remove(BoxName.driverID); box.remove(BoxName.emailDriver); box.remove(BoxName.lang); box.remove(BoxName.nameDriver); box.remove(BoxName.passengerID); box.remove(BoxName.phoneDriver); box.remove(BoxName.tokenFCM); box.remove(BoxName.tokens); box.remove(BoxName.carPlate); box.remove(BoxName.lastNameDriver); box.remove(BoxName.agreeTerms); box.remove(BoxName.tokenDriver); box.remove(BoxName.countryCode); box.remove(BoxName.accountIdStripeConnect); box.remove(BoxName.phoneVerified); Get.offAll(OnBoardingPage()); // Perform any additional sign-out tasks or API calls here // For example, you can notify your server about the user sign-out } // Method to get the current signed-in user static GoogleSignInAccount? getCurrentUser() { return _googleSignIn.currentUser; } } // import 'dart:async'; // import 'dart:async'; // import 'dart:convert'; // import 'package:flutter/material.dart'; // import 'package:get/get.dart'; // import 'package:http/http.dart' as http; // import 'package:sefer_driver/constant/box_name.dart'; // import 'package:sefer_driver/controller/auth/captin/login_captin_controller.dart'; // import 'package:sefer_driver/main.dart'; // import 'package:sefer_driver/views/auth/captin/ai_page.dart'; // import 'package:sefer_driver/views/auth/captin/cards/sms_signup.dart'; // import 'package:sefer_driver/views/home/on_boarding_page.dart'; // import 'package:sefer_driver/views/widgets/error_snakbar.dart'; // import 'package:url_launcher/url_launcher.dart'; // import '../functions/add_error.dart'; // /// Helper class to manage Google Sign-In via an external browser and polling. // class GoogleSignInHelper { // // URLs for your server endpoints // static const String _startLoginUrl = // 'https://api.tripz-egypt.com/tripz/auth/google_auth/login.php'; // static const String _checkStatusUrl = // 'https://api.tripz-egypt.com/tripz/auth/google_auth/check_status.php'; // static Future _initiateSignIn( // Function(Map userData) onSignInSuccess) async { // try { // // Show a loading dialog to the user // Get.dialog( // const Center( // child: Material( // color: Colors.transparent, // child: Column( // mainAxisSize: MainAxisSize.min, // children: [ // CircularProgressIndicator(), // SizedBox(height: 16), // Text( // "Waiting for browser sign-in...", // style: TextStyle(color: Colors.white, fontSize: 16), // ), // ], // ), // ), // ), // barrierDismissible: false, // ); // // 1. Get the auth URL and login token from the server // final startResponse = await http.get(Uri.parse(_startLoginUrl)); // if (startResponse.statusCode != 200) { // throw Exception('Failed to start login process.'); // } // final startData = jsonDecode(startResponse.body); // final String authUrl = startData['authUrl']; // final String loginToken = startData['loginToken']; // // 2. Launch the URL in an external browser // if (!await launchUrl(Uri.parse(authUrl), // mode: LaunchMode.externalApplication)) { // throw Exception('Could not launch browser.'); // } // // 3. Start polling the server for status // await _startPolling(loginToken, onSignInSuccess); // } catch (e) { // addError(e.toString(), '_initiateSignIn'); // mySnackeBarError('Sign-in failed: ${e.toString()}'); // // Close the loading dialog on error // if (Get.isDialogOpen ?? false) { // Get.back(); // } // } // } // static Future _startPolling(String loginToken, // Function(Map userData) onSignInSuccess) async { // Timer? poller; // const int maxAttempts = 30; // Poll for 60 seconds (30 attempts * 2s) // int attempts = 0; // poller = Timer.periodic(const Duration(seconds: 2), (timer) async { // if (attempts >= maxAttempts) { // timer.cancel(); // if (Get.isDialogOpen ?? false) Get.back(); // mySnackeBarError('Sign-in timed out. Please try again.'); // return; // } // attempts++; // try { // final statusResponse = await http.post( // Uri.parse(_checkStatusUrl), // headers: {'Content-Type': 'application/json'}, // body: jsonEncode({'loginToken': loginToken}), // ); // if (statusResponse.statusCode == 200) { // final statusData = jsonDecode(statusResponse.body); // if (statusData['status'] == 'success') { // timer.cancel(); // if (Get.isDialogOpen ?? false) Get.back(); // // Success! // onSignInSuccess(statusData['userData']); // } // // If status is 'pending', do nothing and wait for the next poll. // } // } catch (e) { // // Handle polling errors silently or log them // debugPrint("Polling error: $e"); // } // }); // } // /// Triggers the sign-in process for a new user. // static Future signIn() async { // await _initiateSignIn((userData) async { // debugPrint('Sign-in success data: $userData'); // await _handleSignUp(userData); // if (box.read(BoxName.countryCode) == 'Egypt') { // Get.offAll(() => SmsSignupEgypt()); // } else if (box.read(BoxName.countryCode) == 'Jordan') { // Get.offAll(() => AiPage()); // } // }); // } // /// Triggers the sign-in process for an existing user. // static Future signInFromLogin() async { // await _initiateSignIn((userData) async { // debugPrint('Sign-in from login success data: $userData'); // await _handleSignUp(userData); // final driverID = userData['id']?.toString() ?? 'Unknown ID'; // final emailDriver = userData['email']?.toString() ?? 'Unknown Email'; // debugPrint('Driver ID from server: $driverID'); // debugPrint('Driver Email from server: $emailDriver'); // await Get.find() // .loginWithGoogleCredential(driverID, emailDriver); // }); // } // /// Stores user information received from the server. // static Future _handleSignUp(Map userData) async { // box.write(BoxName.driverID, userData['id'] ?? 'Unknown ID'); // box.write(BoxName.emailDriver, userData['email'] ?? 'Unknown Email'); // } // /// Clears local data. // static Future signOut() async { // box.remove(BoxName.driverID); // box.remove(BoxName.emailDriver); // box.remove(BoxName.lang); // box.remove(BoxName.nameDriver); // box.remove(BoxName.passengerID); // box.remove(BoxName.phoneDriver); // box.remove(BoxName.tokenFCM); // box.remove(BoxName.tokens); // box.remove(BoxName.carPlate); // box.remove(BoxName.lastNameDriver); // box.remove(BoxName.agreeTerms); // box.remove(BoxName.tokenDriver); // box.remove(BoxName.countryCode); // box.remove(BoxName.accountIdStripeConnect); // box.remove(BoxName.phoneVerified); // Get.offAll(() => OnBoardingPage()); // } // }