import 'dart:convert'; import 'package:cheminova/controller/home_controller.dart'; import 'package:cheminova/controller/home_service.dart'; import 'package:cheminova/screens/authentication/controller/auth_service.dart'; import 'package:cheminova/screens/authentication/login_screen.dart'; import 'package:cheminova/screens/home_screen.dart'; import 'package:cheminova/utils/show_snackbar.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../../notification_service.dart'; import '../../../utils/api_urls.dart'; import '../../../utils/secure__storage_service.dart'; class AuthController extends GetxController { final authService = AuthService(); final Dio _dio = Dio(); final _storageService = SecureStorageService(); TextEditingController emailController = TextEditingController(); TextEditingController passwordController = TextEditingController(); //TextEditingController phoneController = TextEditingController(); TextEditingController currentpassController = TextEditingController(); TextEditingController newpassController = TextEditingController(); TextEditingController confirmpassController = TextEditingController(); final HomeController _homeController = Get.put(HomeController()); RxBool isLoading = false.obs; @override void onInit(){ super.onInit(); // Request notification permissions on initialization NotificationServices().requestNotificationPermission(); } // Function to handle user login // Future login() async { // isLoading.value = true; // // Call the login service with email and password // final response = await authService.login({ // 'email': emailController.text, // 'password': passwordController.text, // }); // isLoading.value = false; // update(); // if (response != null) { // _homeController.fcmToken(); // showSnackbar("Your Successfully logged In!"); // // Get.offAll(() => const HomeScreen()); // } // else if(response == null){ // showSnackbar("Please Enter Valid Email or Password"); // } // } Future login() async { SharedPreferences prefs = await SharedPreferences.getInstance(); isLoading.value = true; // Perform login API request final response = await authService.login({ 'email': emailController.text, 'password': passwordController.text, }); isLoading.value = false; update(); if (response != null && response['token'] != null) { // Save the JWT token to SharedPreferences String token = response['token']; await prefs.setString('token', token); // Fetch the FCM token and send it to the server final fcmToken = await NotificationServices().getDeviceToken(); print('fcmToken: $fcmToken'); await HomeService().fcmToken({'fcmToken': fcmToken}, token); showSnackbar("You successfully logged in!"); // Proceed to the HomeScreen after successful login checkToken(); // Ensure the token is valid and the user is authenticated Get.offAll(() => const HomeScreen()); } else { showSnackbar("Please enter a valid email or password"); } } Future checkToken() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String? token = prefs.getString('token'); if (token != null) { // Token exists, proceed with the flow (maybe fetch user data or navigate to the home screen) print('Token found: $token'); // You can also fetch the FCM token if necessary final fcmToken = await NotificationServices().getDeviceToken(); print('fcmToken: $fcmToken'); // Optionally send the FCM token to the server if needed // This might be where you're getting the error await _homeController.fcmToken(); // Navigate to HomeScreen or perform other operations Get.offAll(() => const HomeScreen()); } else { // No token found, redirect to login screen Get.offAll(() => const LoginScreen()); } } // Function to validate the token // Future isTokenValid(String token) async { // try { // final response = await authService.validateToken(token); // return response['isValid'] ?? false; // Adjust based on your API response // } catch (e) { // print("Token validation failed: $e"); // return false; // } // } // Future<(bool, String)> login() async { // isLoading(true); // try { // Response response = (await _apiClient.post( // ApiUrls.loginUrl, // data: { // 'email': emailController.text, // 'password': passwordController.text // }, // )) as Response; // // isLoading(false); // // // Check if the response status code is 200 // if (response.statusCode == 200) { // // Access the data field from the response // final responseData = jsonDecode(response.body) as Map; // final token = responseData['token']; // final message = responseData['message']; // // await _storageService.write( // key: 'access_token', // value: token, // ); // // final fcmToken = await NotificationServices().getDeviceToken(); // print('fcmToken: $fcmToken'); // // await _apiClient.post( // ApiUrls.fcmUrl, // data: {'fcmToken': fcmToken}, // ); // // return (true, message.toString()); // } else { // // Handle the error based on status code // final responseData = jsonDecode(response.body) as Map; // return (false, responseData['message'].toString()); // } // } catch (e) { // isLoading(false); // return (false, 'Something went wrong'); // } // } // Function to handle forgotten password Future forgotpass() async{ isLoading.value = true; final response = await authService.forgotPassword( { 'email': emailController.text, } ); isLoading.value = false; update(); if(response != null){ showSnackbar("Email sent successfully"); } } // Function to handle password change Future changePassword() async { isLoading.value = true; SharedPreferences prefs = await SharedPreferences.getInstance(); String? token = prefs.getString('token'); if (token != null) { final response = await authService.changePassword( { 'oldPassword': currentpassController.text, 'newPassword': newpassController.text, 'confirmPassword': confirmpassController.text, }, token: token, // Pass the token here ); print("tokemn ,$token"); isLoading.value = false; update(); if (response != null) { Get.snackbar('Success', 'Password changed successfully'); } else { Get.snackbar('Error', 'Failed to change password'); } } else { isLoading.value = false; update(); Get.snackbar('Error', 'Token not found. Please login again.'); } } }