// import 'package:flutter/foundation.dart'; // import 'package:flutter/material.dart'; // import 'package:go_router/go_router.dart'; // import 'package:shared_preferences/shared_preferences.dart'; // import '../../main.dart'; // import '../email_verify.dart'; // import '../enrollment/addons.dart'; // import '../enrollment/empDetails.dart'; // import '../enrollment/empReview.dart'; // import '../login.dart'; // import '../postEnrollment/chatbot.dart'; // import '../postEnrollment/claimprocess.dart'; // import '../postEnrollment/claims.dart'; // import '../postEnrollment/generalexclusionsdeductibles.dart'; // import '../postEnrollment/help.dart'; // import '../postEnrollment/home.dart'; // import '../postEnrollment/planclaimsform.dart'; // import '../postEnrollment/policies.dart'; // import '../postEnrollment/privacypolicy.dart'; // import '../postEnrollment/profile.dart'; // import '../postEnrollment/raisedTicketList.dart'; // import '../service/SessionManager.dart'; // import 'SessionNotifier.dart'; // import 'splashScreen.dart'; // import '../postEnrollment/termsofuse.dart'; // import '../postEnrollment/tickets.dart'; // import '../postEnrollment/tickettracklist.dart'; // import '../postEnrollment/wellness.dart'; // import '../service/TokenService.dart'; // import '../session/SetPinBiometric.dart'; // import '../session/changePin.dart'; // import '../session/settingUpPinAndBiometric.dart'; // import '../verify.dart'; // // import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../main.dart'; import '../email_verify.dart'; import '../enrollment/addons.dart'; import '../enrollment/empDetails.dart'; import '../enrollment/empReview.dart'; import '../login.dart'; import '../postEnrollment/claimprocess.dart'; import '../postEnrollment/claims.dart'; import '../postEnrollment/faqs.dart'; import '../postEnrollment/generalexclusionsdeductibles.dart'; import '../postEnrollment/help.dart'; import '../postEnrollment/home.dart'; import '../postEnrollment/planclaimsform.dart'; import '../postEnrollment/policies.dart'; import '../postEnrollment/privacypolicy.dart'; import '../postEnrollment/profile.dart'; import '../postEnrollment/raisedTicketList.dart'; import '../postEnrollment/retailClaimForm.dart'; import '../postEnrollment/termsofuse.dart'; import '../postEnrollment/tickets.dart'; import '../postEnrollment/tickettracklist.dart'; import '../postEnrollment/wellness.dart'; import '../postEnrollment/wellness_web_view.dart'; import '../service/SessionManager.dart'; import '../service/TokenService.dart'; import '../session/SetPinBiometric.dart'; import '../session/changePin.dart'; import '../session/settingUpPinAndBiometric.dart'; import '../verify.dart'; class AppRouter { // static final SessionNotifier sessionNotifier = SessionNotifier(); static GoRouter createRouter() { return GoRouter( // On web, respect the browser URL if present; otherwise fall back to login. initialLocation: kIsWeb ? '/login' : '/splash', debugLogDiagnostics: true, redirect: (BuildContext context, GoRouterState state) async { const allowedWithoutToken = [ '/login', '/verify', '/mailVerify', '/pinPage', '/splash', ]; // Always work with the matched path (ignores query params). final location = state.matchedLocation; final hasToken = await TokenService.hasValidToken(); final isGuestRoute = allowedWithoutToken.contains(location); if (hasToken && isGuestRoute) { // If a logged-in user tries to access a guest route, redirect to home return '/home'; } if (!hasToken && !isGuestRoute) { // If a guest user tries to access a protected route, redirect to login return '/login'; } return null; // No redirect needed }, routes: [ if (!kIsWeb) GoRoute( path: '/splash', builder: (context, state) => const SplashScreen(), ), GoRoute( path: '/login', builder: (context, state) => const login(), ), GoRoute( path: '/mailVerify', builder: (context, state) { final data = state.extra as Map; final type = data['type'] as String; final value = data['value'] as String; return MyEmailVerify(type: type, value: value); }, ), // Legacy Firebase-phone OTP route is commented out in verify.dart, // so we do not expose /verify from GoRouter anymore. GoRoute( path: '/home', builder: (context, state) => Home(), ), GoRoute( path: '/pinSettingPage', builder: (context, state) => pinSettingPage(), ), GoRoute( path: '/pinPage', builder: (context, state) => pinPage(), ), GoRoute( path: '/changePin', builder: (context, state) => changePin(), ), GoRoute( path: '/claimprocess', builder: (context, state) => claimprocess(), ), GoRoute( path: '/policies', builder: (context, state) { final arguments = state.extra as Map?; // optional args return policies(arguments: arguments); }, ), GoRoute( path: '/claims', builder: (context, state) { final int tabIndex = state.extra as int? ?? 0; return claims(initialTab: tabIndex); }, ), GoRoute( path: '/profile', builder: (context, state) => profile(), ), GoRoute( path: '/help', builder: (context, state) => help(), ), GoRoute( path: '/wellness', builder: (context, state) => wellness(), ), GoRoute( path: '/privacypolicy', builder: (context, state) => privacypolicy(), ), GoRoute( path: '/termsofuse', builder: (context, state) => termsofuse(), ), GoRoute( path: '/generalExclusionsDeductibles', builder: (context, state) => generalExclusionsDeductibles(), ), GoRoute( path: '/planclaimsform', builder: (context, state) { final details = state.extra as Map?; return planclaimsform(details: details); }, ), GoRoute( path: '/retailClaimForm', builder: (context, state) { final details = state.extra as Map?; return retailClaimForm(details: details); }, ), GoRoute( path: '/raisedTicketHistory', builder: (context, state) => raisedTicketHistory(), ), GoRoute( path: '/tickettracklist/:ticketID', builder: (context, state) { final ticketID = state.pathParameters['ticketID']!; return tickettracklist(ticketID: ticketID); }, ), GoRoute( path: '/empDetails', builder: (context, state) => empDetails(), ), GoRoute( path: '/faqs', builder: (context, state) => faqs(), ), GoRoute( path: '/addOnsDetails', builder: (context, state) => addOnsDetails(), ), GoRoute( path: '/empReviewDetails', builder: (context, state) => empReviewDetails(), ), GoRoute( path: '/tickets', builder: (context, state) => tickets(), ), // GoRoute( // path: '/chatbot', // builder: (context, state) => chatbot(), // ), GoRoute( path: '/wellnessWebView', builder: (context, state) { final url = state.extra as String; return WellnessWebView(url: url); }, ), ], ); } } // // // // // class AppRouter { // // static GoRouter createRouter() { // // return GoRouter( // // initialLocation: kIsWeb ? null : '/splash', // 👈 null means use browser URL // // debugLogDiagnostics: true, // // redirect: (context, state) async { // // const allowedWithoutToken = [ // // '/splash', // // '/pinPage', // // '/mailVerify', // // '/verify', // // '/login', // // ]; // // // // final location = state.matchedLocation; // // // // // ✅ allow these without token // // if (allowedWithoutToken.contains(location)) { // // return null; // // } // // // // // ✅ Restore session on refresh (web & mobile) // // await SessionManager().restoreSession(); // // final hasToken = await TokenService.hasValidToken(); // // // // if (!hasToken) { // // await SessionManager().clear(); // // return '/login'; // // } // // // // // ✅ Mobile pin logic // // if (!kIsWeb) { // // final prefs = await SharedPreferences.getInstance(); // // if (prefs.containsKey('is_mpin_skipped')) { // // final isMpinSkipped = prefs.getString('is_mpin_skipped'); // // if (isMpinSkipped == '0' && location != '/pinPage') { // // return '/pinPage'; // // } // // } // // } // // // // return null; // stay on same page // // }, // // // // routes: [ // // if (!kIsWeb) // // GoRoute( // // path: '/splash', // // builder: (context, state) => SplashScreen(), // // ), // // GoRoute( // // path: '/login', // // builder: (context, state) => login(), // // ), // // GoRoute( // // path: '/mailVerify', // // builder: (context, state) { // // final email = state.extra as String; // // return MyEmailVerify(email: email); // // }, // // ), // // GoRoute( // // path: '/verify', // // builder: (context, state) { // // final args = state.extra as Map; // // return MyVerify( // // verificationId: args['verificationId'] as String, // // mobileNumber: args['mobileNumber'] as String, // // resendToken: args['resendToken'], // // onResendCode: args['onResendCode'] as Function(String, int?), // // ); // // }, // // ), // // GoRoute( // // path: '/mailVerify', // // builder: (context, state) => MyVerify( // // verificationId: '', // // mobileNumber: '', // // resendToken: null, // // onResendCode: (String, int) {}, // // ), // // ), // // GoRoute( // // path: '/home', // // builder: (context, state) => Home(), // // ), // // GoRoute( // // path: '/pinSettingPage', // // builder: (context, state) => pinSettingPage(), // // ), // // GoRoute( // // path: '/pinPage', // // builder: (context, state) => pinPage(), // // ), // // GoRoute( // // path: '/changePin', // // builder: (context, state) => changePin(), // // ), // // GoRoute( // // path: '/claimprocess', // // builder: (context, state) => claimprocess(), // // ), // // GoRoute( // // path: '/policies', // // builder: (context, state) => policies(), // // ), // // GoRoute( // // path: '/claims', // // builder: (context, state) => claims(), // // ), // // GoRoute( // // path: '/profile', // // builder: (context, state) => profile(), // // ), // // GoRoute( // // path: '/help', // // builder: (context, state) => help(), // // ), // // GoRoute( // // path: '/wellness', // // builder: (context, state) => wellness(), // // ), // // GoRoute( // // path: '/planclaimsform', // // builder: (context, state) => planclaimsform(), // // ), // // GoRoute( // // path: '/privacypolicy', // // builder: (context, state) => privacypolicy(), // // ), // // GoRoute( // // path: '/termsofuse', // // builder: (context, state) => termsofuse(), // // ), // // GoRoute( // // path: '/generalExclusionsDeductibles', // // builder: (context, state) => generalExclusionsDeductibles(), // // ), // // GoRoute( // // path: '/chatbot()', // // builder: (context, state) => chatbot(), // // ), // // GoRoute( // // path: '/chatbot()', // // builder: (context, state) => chatbot(), // // ), // // GoRoute( // // path: '/tickettracklist', // // builder: (context, state) => tickettracklist( // // ticketID: "", // // ), // // ), // // GoRoute( // // path: '/empDetails()', // // builder: (context, state) => empDetails(), // // ), // // GoRoute( // // path: '/addOnsDetails()', // // builder: (context, state) => addOnsDetails(), // // ), // // GoRoute( // // path: '/empReviewDetails()', // // builder: (context, state) => empReviewDetails(), // // ), // // GoRoute( // // path: '/tickets()', // // builder: (context, state) => tickets(), // // ), // // GoRoute( // // path: '/raisedTicketHistory()', // // builder: (context, state) => raisedTicketHistory(), // // ), // // ], // // ); // // } // // } // //