import 'dart:async';
import 'dart:developer';
import 'dart:io';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/cache_consts.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart';
import 'package:hmg_patient_app_new/features/payfort/models/apple_pay_request_insert_model.dart';
import 'package:hmg_patient_app_new/features/payfort/payfort_view_model.dart';
import 'package:hmg_patient_app_new/features/paytabs/models/paytabs_transaction_response_model.dart';
import 'package:hmg_patient_app_new/features/paytabs/paytabs_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/in_app_browser/InAppBrowser.dart';
import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';
import 'package:smooth_corner/smooth_corner.dart';

class ErOnlineCheckinPaymentPage extends StatefulWidget {
  ErOnlineCheckinPaymentPage({super.key});

  @override
  State<ErOnlineCheckinPaymentPage> createState() => _ErOnlineCheckinPaymentPageState();
}

class _ErOnlineCheckinPaymentPageState extends State<ErOnlineCheckinPaymentPage> {
  late PayfortViewModel payfortViewModel;
  late EmergencyServicesViewModel emergencyServicesViewModel;
  late PayTabsViewModel paytabsViewModel;

  late AppState appState;

  MyInAppBrowser? browser;

  String selectedPaymentMethod = "";

  String transID = "";

  bool isShowTamara = false;

  String tamaraPaymentStatus = "";

  String tamaraOrderID = "";

  @override
  void initState() {
    scheduleMicrotask(() {
      payfortViewModel.initPayfortViewModel();
      // payfortViewModel.getTamaraInstallmentsDetails().then((val) {
      //   if (emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax! >= payfortViewModel.getTamaraInstallmentsDetailsResponseModel!.minLimit!.amount! &&
      //       emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax! <= payfortViewModel.getTamaraInstallmentsDetailsResponseModel!.maxLimit!.amount!) {
      //     setState(() {
      //       isShowTamara = true;
      //     });
      //   }
      // });
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    appState = getIt.get<AppState>();
    payfortViewModel = Provider.of<PayfortViewModel>(context, listen: false);
    emergencyServicesViewModel = Provider.of<EmergencyServicesViewModel>(context, listen: false);
    paytabsViewModel = Provider.of<PayTabsViewModel>(context, listen: false);
    return Scaffold(
      backgroundColor: AppColors.bgScaffoldColor,
      body: Column(
        children: [
          Expanded(
            child: CollapsingListView(
              title: LocaleKeys.emergencyCheckIn.tr(context: context),
              child: SingleChildScrollView(
                child: Column(
                  children: [
                    SizedBox(height: 24.h),
                    Container(
                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                        color: AppColors.whiteColor,
                        borderRadius: 20.h,
                        hasShadow: false,
                      ),
                      child: Row(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Utils.buildImgWithAssets(icon: AppAssets.mada, width: 72.h, height: 25.h),
                              SizedBox(height: 16.h),
                              LocaleKeys.mada.tr(context: context).toText16(isBold: true),
                            ],
                          ),
                          SizedBox(width: 8.h),
                          const Spacer(),
                          Transform.flip(
                            flipX: appState.isArabic(),
                            child: Utils.buildSvgWithAssets(
                              icon: AppAssets.forward_arrow_icon,
                              iconColor: AppColors.blackColor,
                              width: 40.h,
                              height: 40.h,
                              fit: BoxFit.contain,
                            ),
                          ),
                        ],
                      ).paddingSymmetrical(16.h, 16.h),
                    ).paddingSymmetrical(24.h, 0.h).onPress(() {
                      selectedPaymentMethod = "MADA";
                      if (appState.isPaytabsEnabled) {
                        transID = Utils.getAdvancePaymentTransID(
                          emergencyServicesViewModel.selectedHospital!.iD,
                          appState.getAuthenticatedUser()!.patientId!,
                        );
                        paytabsViewModel.setPaymentConfiguration(
                          "ER Online Check-In Payment",
                          emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!,
                        );
                        paytabsViewModel.startCardPayment(
                            paymentOption: selectedPaymentMethod,
                            liveServiceID: "0",
                            isScheduleLiveCare: "0",
                            appointmentDate: "",
                            appointmentNo: "0",
                            doctorID: "0",
                            transactionID: transID,
                            amount: emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!.toString(),
                            fileNumber: appState.getAuthenticatedUser()!.patientId.toString(),
                            orderDescription: "ER Online Check-In Payment",
                            serviceID: ServiceTypeEnum.erOnlineCheckIn.getIdFromServiceEnum().toString(),
                            projectID: emergencyServicesViewModel.selectedHospital!.iD.toString(),
                            onSuccess: (PaytabsTransactionResponseModel transactionData) async {
                              if (emergencyServicesViewModel.isERBookAppointment) {
                            await emergencyServicesViewModel.ER_CreateAdvancePayment(
                                paymentMethodName: selectedPaymentMethod,
                                paymentReference: transactionData.transactionReference!,
                                onSuccess: (value) async {
                                  await emergencyServicesViewModel.addAdvanceNumberRequest(
                                      advanceNumber: value,
                                      paymentReference: transactionData.transactionReference!,
                                      appointmentNo: "0",
                                      onSuccess: (val) {
                                        emergencyServicesViewModel.setIsAdvanceERBalanceNeedToBeLoaded(true);
                                        LoaderBottomSheet.hideLoader();
                                        if (emergencyServicesViewModel.isERBookAppointment) {
                                          showCommonBottomSheetWithoutHeight(
                                            context,
                                            child: Utils.getSuccessWidget(loadingText: LocaleKeys.erAppointmentBookedSuccess.tr(context: context)),
                                            callBackFunc: () {
                                              Navigator.pushAndRemoveUntil(
                                                  context,
                                                  CustomPageRoute(
                                                    page: LandingNavigation(),
                                                  ),
                                                  (r) => false);
                                            },
                                            isFullScreen: false,
                                            isCloseButtonVisible: true,
                                          );
                                        } else {}
                                      });
                                });
                          } else {}
                        }, onError: (errMsg) {
                          showCommonBottomSheetWithoutHeight(
                            context,
                            child: Utils.getErrorWidget(loadingText: errMsg.toString()),
                            callBackFunc: () {},
                            isFullScreen: false,
                            isCloseButtonVisible: true,
                          );
                        });
                      } else {
                        openPaymentURL("mada");
                      }
                    }),
                    SizedBox(height: 16.h),
                    Container(
                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                        color: AppColors.whiteColor,
                        borderRadius: 20.h,
                        hasShadow: false,
                      ),
                      child: Row(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Row(
                                children: [
                                  Utils.buildImgWithAssets(icon: AppAssets.visa, width: 50.h, height: 50.h),
                                  SizedBox(width: 8.h),
                                  Utils.buildImgWithAssets(icon: AppAssets.mastercard, width: 40.h, height: 40.h),
                                ],
                              ),
                              SizedBox(height: 16.h),
                              LocaleKeys.visaOrMastercard.tr(context: context).toText16(isBold: true),
                            ],
                          ),
                          SizedBox(width: 8.h),
                          const Spacer(),
                          Transform.flip(
                            flipX: appState.isArabic(),
                            child: Utils.buildSvgWithAssets(
                              icon: AppAssets.forward_arrow_icon,
                              iconColor: AppColors.blackColor,
                              width: 40.h,
                              height: 40.h,
                              fit: BoxFit.contain,
                            ),
                          ),
                        ],
                      ).paddingSymmetrical(16.h, 16.h),
                    ).paddingSymmetrical(24.h, 0.h).onPress(() {
                      selectedPaymentMethod = "VISA";
                      if (appState.isPaytabsEnabled) {
                        transID = Utils.getAdvancePaymentTransID(
                          emergencyServicesViewModel.selectedHospital!.iD,
                          appState.getAuthenticatedUser()!.patientId!,
                        );
                        paytabsViewModel.setPaymentConfiguration(
                          "ER Online Check-In Payment",
                          emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!,
                        );
                        paytabsViewModel.startCardPayment(
                            paymentOption: selectedPaymentMethod,
                            liveServiceID: "0",
                            isScheduleLiveCare: "0",
                            appointmentDate: "",
                            appointmentNo: "0",
                            doctorID: "0",
                            transactionID: transID,
                            amount: emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!.toString(),
                            fileNumber: appState.getAuthenticatedUser()!.patientId.toString(),
                            orderDescription: "ER Online Check-In Payment",
                            serviceID: ServiceTypeEnum.erOnlineCheckIn.getIdFromServiceEnum().toString(),
                            projectID: emergencyServicesViewModel.selectedHospital!.iD.toString(),
                            onSuccess: (PaytabsTransactionResponseModel transactionData) async {
                              if (emergencyServicesViewModel.isERBookAppointment) {
                            await emergencyServicesViewModel.ER_CreateAdvancePayment(
                                paymentMethodName: selectedPaymentMethod,
                                paymentReference: transactionData.transactionReference!,
                                onSuccess: (value) async {
                                  await emergencyServicesViewModel.addAdvanceNumberRequest(
                                      advanceNumber: value,
                                      paymentReference: transactionData.transactionReference!,
                                      appointmentNo: "0",
                                      onSuccess: (val) {
                                        emergencyServicesViewModel.setIsAdvanceERBalanceNeedToBeLoaded(true);
                                        LoaderBottomSheet.hideLoader();
                                        if (emergencyServicesViewModel.isERBookAppointment) {
                                          showCommonBottomSheetWithoutHeight(
                                            context,
                                            child: Utils.getSuccessWidget(loadingText: LocaleKeys.erAppointmentBookedSuccess.tr(context: context)),
                                            callBackFunc: () {
                                              Navigator.pushAndRemoveUntil(
                                                  context,
                                                  CustomPageRoute(
                                                    page: LandingNavigation(),
                                                  ),
                                                  (r) => false);
                                            },
                                            isFullScreen: false,
                                            isCloseButtonVisible: true,
                                          );
                                        } else {}
                                      });
                                });
                          } else {}
                        }, onError: (errMsg) {
                          showCommonBottomSheetWithoutHeight(
                            context,
                            child: Utils.getErrorWidget(loadingText: errMsg.toString()),
                            callBackFunc: () {},
                            isFullScreen: false,
                            isCloseButtonVisible: true,
                          );
                        });
                      } else {
                        openPaymentURL("visa");
                      }
                    }),
                    SizedBox(height: 16.h),
                    isShowTamara
                        ? Container(
                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                              color: AppColors.whiteColor,
                              borderRadius: 20.h,
                              hasShadow: false,
                            ),
                            child: Row(
                              mainAxisSize: MainAxisSize.max,
                              children: [
                                Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    Utils.buildImgWithAssets(icon: AppAssets.tamaraEng, width: 72.h, height: 25.h),
                                    SizedBox(height: 16.h),
                                    LocaleKeys.tamara.tr(context: context).toText16(isBold: true),
                                  ],
                                ),
                                SizedBox(width: 8.h),
                                const Spacer(),
                                Transform.flip(
                                  flipX: appState.isArabic(),
                                  child: Utils.buildSvgWithAssets(
                                    icon: AppAssets.forward_arrow_icon,
                                    iconColor: AppColors.blackColor,
                                    width: 40.h,
                                    height: 40.h,
                                    fit: BoxFit.contain,
                                  ),
                                ),
                              ],
                            ).paddingSymmetrical(16.h, 16.h),
                          ).paddingSymmetrical(24.h, 0.h).onPress(() {
                            selectedPaymentMethod = "TAMARA";
                            openPaymentURL("tamara");
                          })
                        : SizedBox.shrink(),
                  ],
                ),
              ),
            ),
          ),
          Container(
            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
              color: AppColors.whiteColor,
              borderRadius: 24.h,
              hasShadow: false,
            ),
            child: Consumer<PayfortViewModel>(builder: (context, payfortVM, child) {
              //TODO: Need to add loading state & animation for Apple Pay Configuration
              return Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  (emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.isCash ?? true)
                      ? Container(
                    height: 50.h,
                    decoration: ShapeDecoration(
                      color: AppColors.secondaryLightRedBorderColor,
                      shape: SmoothRectangleBorder(
                        borderRadius: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)),
                        smoothness: 1,
                      ),
                    ),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                              LocaleKeys.insuranceExpiredOrInactive.tr(context: context).toText14(color: AppColors.primaryRedColor, isBold: true).paddingSymmetrical(24.h, 0.h),
                              CustomButton(
                          text: LocaleKeys.updateInsurance.tr(context: context),
                          onPressed: () {
                            Navigator.of(context).push(
                              CustomPageRoute(
                                page: InsuranceHomePage(),
                              ),
                            );
                          },
                          backgroundColor: AppColors.primaryRedColor,
                          borderColor: AppColors.secondaryLightRedBorderColor,
                          textColor: AppColors.whiteColor,
                          fontSize: 10,
                          isBold: true,
                          borderRadius: 8,
                          padding: EdgeInsets.fromLTRB(15, 0, 15, 0),
                          height: 30.h,
                        ).paddingSymmetrical(24.h, 0.h),
                      ],
                    ),
                  )
                      : const SizedBox(),
                  SizedBox(height: 24.h),
                  LocaleKeys.totalAmountToPay.tr(context: context).toText18(isBold: true).paddingSymmetrical(24.h, 0.h),
                  SizedBox(height: 17.h),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      LocaleKeys.amountBeforeTax.tr(context: context).toText14(isBold: true),
                      Utils.getPaymentAmountWithSymbol(emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShare.toString().toText16(isBold: true), AppColors.blackColor, 13,
                          isSaudiCurrency: true),
                    ],
                  ).paddingSymmetrical(24.h, 0.h),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      LocaleKeys.vat15.tr(context: context).toText14(isBold: true, color: AppColors.greyTextColor),
                      Utils.getPaymentAmountWithSymbol(
                          emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientTaxAmount.toString().toText14(isBold: true, color: AppColors.greyTextColor), AppColors.greyTextColor, 13,
                          isSaudiCurrency: true),
                    ],
                  ).paddingSymmetrical(24.h, 0.h),
                  SizedBox(height: 17.h),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      "".toText14(isBold: true),
                      Utils.getPaymentAmountWithSymbol(emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax.toString().toText24(isBold: true), AppColors.blackColor, 17,
                          isSaudiCurrency: true),
                    ],
                  ).paddingSymmetrical(24.h, 0.h),
                  Platform.isIOS
                      ? Utils.buildSvgWithAssets(
                    icon: AppAssets.apple_pay_button,
                    width: 200.h,
                    height: 80.h,
                    fit: BoxFit.contain,
                    applyThemeColor: false
                  ).paddingSymmetrical(24.h, 0.h).onPress(() {
                    if (Utils.havePrivilege(103)) {
                            startApplePay();
                          } else {
                            openPaymentURL("ApplePay");
                          }
                        })
                      : SizedBox(height: 12.h),
                  SizedBox(height: 12.h),
                ],
              );
            }),
          ),
        ],
      ),
    );
  }

  openPaymentURL(String paymentMethod) {
    browser = MyInAppBrowser(onExitCallback: onBrowserExit, onLoadStartCallback: onBrowserLoadStart, context: context);
    transID = Utils.getAdvancePaymentTransID(
      emergencyServicesViewModel.selectedHospital!.iD,
      appState.getAuthenticatedUser()!.patientId!,
    );

    //TODO: Need to pass dynamic params to the payment request instead of static values
    browser?.openPaymentBrowser(
        emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!,
        "ER Online Check-In Payment",
        transID,
        emergencyServicesViewModel.selectedHospital!.iD.toString(),
        "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com",
        selectedPaymentMethod,
        appState.getAuthenticatedUser()!.patientType.toString(),
        "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}",
        appState.getAuthenticatedUser()!.patientId.toString(),
        appState.getAuthenticatedUser()!,
        browser!,
        false,
        "3",
        "",
        context,
        null,
        0,
        10,
        0,
        "3");
  }

  startApplePay() async {
    LoaderBottomSheet.showLoader();
    transID = Utils.getAdvancePaymentTransID(
      emergencyServicesViewModel.selectedHospital!.iD,
      appState.getAuthenticatedUser()!.patientId!,
    );

    ApplePayInsertRequest applePayInsertRequest = ApplePayInsertRequest();

    await payfortViewModel.getPayfortConfigurations(serviceId: ServiceTypeEnum.erOnlineCheckIn.getIdFromServiceEnum(), projectId: emergencyServicesViewModel.selectedHospital!.iD);

    applePayInsertRequest.clientRequestID = transID;
    applePayInsertRequest.clinicID = 10;

    applePayInsertRequest.currency = appState.getAuthenticatedUser()!.outSa! == 0 ? "SAR" : "AED";
    applePayInsertRequest.customerEmail = "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com";
    applePayInsertRequest.customerID = appState.getAuthenticatedUser()!.patientId.toString();
    applePayInsertRequest.customerName = "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}";

    applePayInsertRequest.deviceToken = await Utils.getStringFromPrefs(CacheConst.pushToken);
    applePayInsertRequest.voipToken = await Utils.getStringFromPrefs(CacheConst.voipToken);
    applePayInsertRequest.doctorID = 0;
    applePayInsertRequest.projectID = emergencyServicesViewModel.selectedHospital!.iD.toString();
    applePayInsertRequest.serviceID = ServiceTypeEnum.erOnlineCheckIn.getIdFromServiceEnum().toString();
    applePayInsertRequest.channelID = 3;
    applePayInsertRequest.patientID = appState.getAuthenticatedUser()!.patientId.toString();
    applePayInsertRequest.patientTypeID = appState.getAuthenticatedUser()!.patientType;
    applePayInsertRequest.patientOutSA = appState.getAuthenticatedUser()!.outSa;
    applePayInsertRequest.appointmentDate = null;
    applePayInsertRequest.appointmentNo = 0;
    applePayInsertRequest.orderDescription = "ER Online Check-In Payment";
    applePayInsertRequest.liveServiceID = "0";
    applePayInsertRequest.latitude = "0.0";
    applePayInsertRequest.longitude = "0.0";
    applePayInsertRequest.amount = emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!.toString();
    applePayInsertRequest.isSchedule = "0";
    applePayInsertRequest.language = appState.isArabic() ? 'ar' : 'en';
    applePayInsertRequest.languageID = appState.isArabic() ? 1 : 2;
    applePayInsertRequest.userName = appState.getAuthenticatedUser()!.patientId;
    applePayInsertRequest.responseContinueURL = "http://hmg.com/Documents/success.html";
    applePayInsertRequest.backClickUrl = "http://hmg.com/Documents/success.html";
    applePayInsertRequest.paymentOption = "ApplePay";

    applePayInsertRequest.isMobSDK = true;
    applePayInsertRequest.merchantReference = transID;
    applePayInsertRequest.merchantIdentifier = payfortViewModel.payfortProjectDetailsRespModel!.merchantIdentifier;
    applePayInsertRequest.commandType = "PURCHASE";
    applePayInsertRequest.signature = payfortViewModel.payfortProjectDetailsRespModel!.signature;
    applePayInsertRequest.accessCode = payfortViewModel.payfortProjectDetailsRespModel!.accessCode;
    applePayInsertRequest.shaRequestPhrase = payfortViewModel.payfortProjectDetailsRespModel!.shaRequest;
    applePayInsertRequest.shaResponsePhrase = payfortViewModel.payfortProjectDetailsRespModel!.shaResponse;
    applePayInsertRequest.returnURL = "";

    //TODO: Need to pass dynamic params to the Apple Pay instead of static values
    await payfortViewModel.applePayRequestInsert(applePayInsertRequest: applePayInsertRequest).then((value) {
      if (appState.isPaytabsEnabled) {
        selectedPaymentMethod = "VISA";
        LoaderBottomSheet.hideLoader();
        paytabsViewModel.setPaymentConfiguration(
          "ER Online Check-In Payment",
          emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!,
        );
        paytabsViewModel.startApplePayPayment(onSuccess: (PaytabsTransactionResponseModel transactionData) async {
          LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingPaymentStatusPleaseWait.tr(context: context));
          if (emergencyServicesViewModel.isERBookAppointment) {
            await emergencyServicesViewModel.ER_CreateAdvancePayment(
                paymentMethodName: selectedPaymentMethod,
                paymentReference: transactionData.transactionReference!,
                onSuccess: (value) async {
                  await emergencyServicesViewModel.addAdvanceNumberRequest(
                      advanceNumber: value,
                      paymentReference: transactionData.transactionReference!,
                      appointmentNo: "0",
                      onSuccess: (val) {
                        emergencyServicesViewModel.setIsAdvanceERBalanceNeedToBeLoaded(true);
                        LoaderBottomSheet.hideLoader();
                        if (emergencyServicesViewModel.isERBookAppointment) {
                          showCommonBottomSheetWithoutHeight(
                            context,
                            child: Utils.getSuccessWidget(loadingText: LocaleKeys.erAppointmentBookedSuccess.tr(context: context)),
                            callBackFunc: () {
                              Navigator.pushAndRemoveUntil(
                                  context,
                                  CustomPageRoute(
                                    page: LandingNavigation(),
                                  ),
                                  (r) => false);
                            },
                            isFullScreen: false,
                            isCloseButtonVisible: true,
                          );
                        } else {}
                      });
                });
          } else {}
        }, onError: (err) {
          showCommonBottomSheetWithoutHeight(
            context,
            child: Utils.getErrorWidget(loadingText: err.toString()),
            callBackFunc: () {},
            isFullScreen: false,
            isCloseButtonVisible: true,
          );
        });
      } else {
        payfortViewModel.paymentWithApplePay(
          customerName: "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}",
          // customerEmail: projectViewModel.authenticatedUserObject.user.emailAddress,
          customerEmail: "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com",
          orderDescription: "ER Online Check-In Payment",
          orderAmount: double.parse(emergencyServicesViewModel.erOnlineCheckInPaymentDetailsResponse.patientShareWithTax!.toString()),
          merchantReference: transID,
          merchantIdentifier: payfortViewModel.payfortProjectDetailsRespModel!.merchantIdentifier,
          applePayAccessCode: payfortViewModel.payfortProjectDetailsRespModel!.accessCode,
          applePayShaRequestPhrase: payfortViewModel.payfortProjectDetailsRespModel!.shaRequest,
          currency: appState.getAuthenticatedUser()!.outSa! == 0 ? "SAR" : "AED",
          onFailed: (failureResult) async {
            LoaderBottomSheet.hideLoader();
            log("failureResult: ${failureResult.message.toString()}");
            showCommonBottomSheetWithoutHeight(
              context,
              child: Utils.getErrorWidget(loadingText: failureResult.message.toString()),
              callBackFunc: () {},
              isFullScreen: false,
              isCloseButtonVisible: true,
            );
          },
          onSucceeded: (successResult) async {
            LoaderBottomSheet.hideLoader();
            log("successResult: ${successResult.responseMessage.toString()}");
            selectedPaymentMethod = successResult.paymentOption ?? "VISA";
            checkPaymentStatus();
          },
        );
      }
    });
  }

  void checkPaymentStatus() async {
    LoaderBottomSheet.showLoader(loadingText: LocaleKeys.checkingPaymentStatusPleaseWait.tr(context: context));
    await payfortViewModel.checkPaymentStatus(
        transactionID: transID,
        onSuccess: (apiResponse) async {
          print(apiResponse.data);
          if (payfortViewModel.payfortCheckPaymentStatusResponseModel!.responseMessage!.toLowerCase() == "success") {
            if (emergencyServicesViewModel.isERBookAppointment) {
              await emergencyServicesViewModel.ER_CreateAdvancePayment(
                  paymentMethodName: selectedPaymentMethod,
                  paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!,
                  onSuccess: (value) async {
                    await emergencyServicesViewModel.addAdvanceNumberRequest(
                        advanceNumber: value,
                        paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!,
                        appointmentNo: "0",
                        onSuccess: (val) {
                          emergencyServicesViewModel.setIsAdvanceERBalanceNeedToBeLoaded(true);
                          LoaderBottomSheet.hideLoader();
                          if (emergencyServicesViewModel.isERBookAppointment) {
                            showCommonBottomSheetWithoutHeight(
                              context,
                              child: Utils.getSuccessWidget(loadingText: LocaleKeys.erAppointmentBookedSuccess.tr(context: context)),
                              callBackFunc: () {
                                Navigator.pushAndRemoveUntil(
                                    context,
                                    CustomPageRoute(
                                      page: LandingNavigation(),
                                    ),
                                    (r) => false);
                              },
                              isFullScreen: false,
                              isCloseButtonVisible: true,
                            );
                          } else {}
                        });
                  });
            } else {}
          } else {
            LoaderBottomSheet.hideLoader();
            showCommonBottomSheetWithoutHeight(
              context,
              child: Utils.getErrorWidget(loadingText: LocaleKeys.paymentFailedPleaseTryAgain.tr(context: context)),
              callBackFunc: () {
                // Navigator.pushAndRemoveUntil(
                //     context,
                //     CustomPageRoute(
                //       page: LandingNavigation(),
                //     ),
                //     (r) => false);
              },
              isFullScreen: false,
              isCloseButtonVisible: true,
            );
          }
        });
  }

  onBrowserLoadStart(String url) {
    print("onBrowserLoadStart");
    print(url);

    if (selectedPaymentMethod == "tamara") {
      if (Platform.isAndroid) {
        Uri uri = new Uri.dataFromString(url);
        tamaraPaymentStatus = uri.queryParameters['status']!;
        tamaraOrderID = uri.queryParameters['AuthorizePaymentId']!;
      } else {
        Uri uri = new Uri.dataFromString(url);
        tamaraPaymentStatus = uri.queryParameters['paymentStatus']!;
        tamaraOrderID = uri.queryParameters['orderId']!;
      }
    }

    // if(selectedPaymentMethod != "TAMARA") {
    MyInAppBrowser.successURLS.forEach((element) {
      if (url.contains(element)) {
        browser?.close();
        MyInAppBrowser.isPaymentDone = true;
        return;
      }
    });
    // }

    // if(selectedPaymentMethod != "TAMARA") {
    MyInAppBrowser.errorURLS.forEach((element) {
      if (url.contains(element)) {
        browser?.close();
        MyInAppBrowser.isPaymentDone = false;
        return;
      }
    });
    // }
  }

  onBrowserExit(bool isPaymentMade) async {
    checkPaymentStatus();
  }
}
