/* eslint-disable no-useless-escape */ /* eslint-disable no-param-reassign */ /* eslint-disable prettier/prettier */ /* eslint-disable no-console */ import { useRouter } from "next/navigation"; import type { ForwardedRef } from "react"; import { forwardRef, useImperativeHandle, useRef, useState } from "react"; import { useBoolean } from "usehooks-ts"; import type { FormHandles } from "@/components/form/form"; import { useLocale } from "@/hooks/useLocale"; import { getEnvs } from "@/libs/environment/env"; import { storageManager } from "@/libs/storage-manager"; import { useDomasterpassBooking, useGetMasterpass3dPaymentStatusMutation, useGetMpToken, useMasterpassBookingMutation, useSetMasterpass3dPaymentStatusMutation, } from "@/services/eva-booking/payment/payment.service"; import { useInitiateManageRecurringPaymentMutation } from "@/services/masterpass/initiate-manage-recurring-payment/initiate-manage-recurring-payment.service"; import { useRemotePurchaseOtherMutation } from "@/services/masterpass/remote-purchase-other/remote-purchase-other.service"; import { useResendOtpMutation } from "@/services/masterpass/resend-otp/resend-otp.service"; import { useValidateTransactionMutation } from "@/services/masterpass/validate-transaction/validate-transaction.service"; import { useMasterpassStore } from "@/store/masterpass-store/use-masterpass-store"; import { usePayment } from "../../hotel/payment/hooks/use-hotel-payment"; import { Masterpass3DModal } from "./components/masterpass-3d-modal"; import { MasterpassBookingModal } from "./components/masterpass-booking-modal"; import { MasterpassErrorModal } from "./components/masterpass-error-modal"; import { MasterpassLogin } from "./components/masterpass-login"; import { MasterpassOtpModal } from "./components/masterpass-otp-modal"; import { MasterpassSignUpNow } from "./components/masterpass-sign-up-now"; import { useMasterpassErrorModal } from "./hooks/use-masterpass-error-modal"; export interface MasterpassHandles extends FormHandles {} const Masterpass = (_props: any, ref: ForwardedRef) => { const envs = getEnvs(); const { t } = useLocale(); const formRef = useRef(null); const { masterpassState, setMasterpassData } = useMasterpassStore(); const { paymentState } = usePayment(); const openMasterpassModal = useBoolean(false); const openOtp = useBoolean(false); const openBookingModal = useBoolean(false); const { modalOpenMasterpassModal, openMasterpassErrorModal, closeMasterpassErrorModal, errorMessage, setErrorMessage, } = useMasterpassErrorModal(); const loading = useBoolean(false); const loadingOtp = useBoolean(false); const [masterpassModalUrl, setMasterpassModalUrl] = useState(""); const [validateTransactionToken, setValidateTransactionToken] = useState(""); const [payToken, setPayToken] = useState(""); const router = useRouter(); const bookMutation = useMasterpassBookingMutation({ onSuccess(data) { if (data.success) { if (data.result.bookingCode) { router.push( `/booking-success?code=${encodeURIComponent( data.result.bookingCode, )}`, ); } else { openBookingModal.setFalse(); setErrorMessage( "Kredi kartından ödeme alınamadı. (Masterpass)Basarisiz işlem, Genel banka hatası oluştu Dilerseniz Kredi Kartı ile Ödeme seçeneğiyle rezervasyonunuzu kaldığınız yerden tamamlayabilirsiniz.

Destek almak için 444 0 644 arayabilir veya Canlı Destek ile yardım isteyebilirsiniz. Yetkililerimiz size en kısa zamanda dönüş yapacaktır.", ); openMasterpassErrorModal(); } } else { openBookingModal.setFalse(); setErrorMessage( "Kredi kartından ödeme alınamadı. (Masterpass)Basarisiz işlem, Genel banka hatası oluştu Dilerseniz Kredi Kartı ile Ödeme seçeneğiyle rezervasyonunuzu kaldığınız yerden tamamlayabilirsiniz.

Destek almak için 444 0 644 arayabilir veya Canlı Destek ile yardım isteyebilirsiniz. Yetkililerimiz size en kısa zamanda dönüş yapacaktır.", ); openMasterpassErrorModal(); } }, }); const doMasterpassBookingService = useDomasterpassBooking({ onSuccess(data) { if (data.data.success) { if (data.data.result.requestStatus) { bookMutation.mutate({ BaseCartProductRequest: { cartId: paymentState.payload.cartId!, searchId: paymentState.payload.searchId!, transactionKey: data.data.result.transactionKey!, }, }); } } else { openBookingModal.setFalse(); setErrorMessage( "Kredi kartından ödeme alınamadı. (Masterpass)Basarisiz işlem, Genel banka hatası oluştu Dilerseniz Kredi Kartı ile Ödeme seçeneğiyle rezervasyonunuzu kaldığınız yerden tamamlayabilirsiniz.

Destek almak için 444 0 644 arayabilir veya Canlı Destek ile yardım isteyebilirsiniz. Yetkililerimiz size en kısa zamanda dönüş yapacaktır.", ); openMasterpassErrorModal(); } }, }); const amountPriceConvert = (price: any): number => { if (price.match(/\./g) !== null) { price = price.replace(".", ","); } if (price.match(/\,/g) !== null) { price = price.replace(/,([^,]*)$/, ".$1"); } price = Math.round(parseFloat(price) * 100); return parseFloat(price); }; const validateTransactionService = useValidateTransactionMutation({ onSuccess(data) { if (data.success) { openOtp.setFalse(); openBookingModal.setTrue(); doMasterpassBookingService.mutate({ cartId: paymentState.payload.cartId!, amount: masterpassState!.data!.payload.amount!, currency: "TRY", balanceAmount: masterpassState!.data!.payload.balanceAmount!, payToken, recurringPayToken: data.token, cardName: masterpassState!.data!.payload.selectedCard.Name!, cardUniqueId: masterpassState!.data!.payload.selectedCard.UniqueId!, installmentKey: masterpassState!.data!.payload.installmentKey!, phone: masterpassState!.data!.payload.masterpassUserData.msisdn!, customerEmail: masterpassState!.data!.payload.masterpassUserData.email!, masterPassengerName: masterpassState.data!.payload.masterpassUserData.name!, ecommerceAggrement: "1", kvkkAggrement: "", isOther: masterpassState.data!.payload!.masterpassOtherUser!, is3dPayment: true, }); } }, }); const initiateManageRecurringPaymentService = useInitiateManageRecurringPaymentMutation({ onSuccess: (data) => { if (data.success) { if (data.responseCode === "5001") { setValidateTransactionToken(data.token); loadingOtp.setFalse(); } else { openOtp.setFalse(); } } }, }); const getMasterpass3dPaymentStatus = useGetMasterpass3dPaymentStatusMutation({ onSuccess: (data) => { if (data.data.result === "Started" && openMasterpassModal.value) { setTimeout(() => { getMasterpass3dPaymentStatus.mutateAsync({ cartId: paymentState.payload.cartId!, }); }, 1000); } else if (data.data.result === "3dOtpSucceded") { openMasterpassModal.setFalse(); if ( masterpassState!.data!.payload.balanceAmount && masterpassState!.data!.payload.balanceAmount > 0 ) { openOtp.setTrue(); loadingOtp.setTrue(); initiateManageRecurringPaymentService.mutate({ productId: paymentState.payload.cartId!, amount: amountPriceConvert( masterpassState!.data!.payload.balanceAmount!.toString(), ), listAccountName: masterpassState!.data!.payload.selectedCard.Name!, token: masterpassState!.data!.payload.masterpassUserData.token!, msisdn: masterpassState!.data!.payload.masterpassUserData.msisdn!, referenceNo: masterpassState!.data!.payload.masterpassUserData .referenceNumber!, orderNo: masterpassState!.data!.payload.masterpassUserData .recurringOrderId!, }); } else { openMasterpassModal.setFalse(); openBookingModal.setTrue(); doMasterpassBookingService.mutate({ cartId: paymentState.payload.cartId!, amount: masterpassState!.data!.payload.amount!, currency: "TRY", balanceAmount: masterpassState!.data!.payload.balanceAmount!, payToken, recurringPayToken: null, cardName: masterpassState!.data!.payload.selectedCard.Name!, cardUniqueId: masterpassState!.data!.payload.selectedCard.UniqueId!, installmentKey: masterpassState!.data!.payload.installmentKey!, phone: masterpassState!.data!.payload.masterpassUserData.msisdn!, customerEmail: masterpassState!.data!.payload.masterpassUserData.email!, masterPassengerName: masterpassState.data!.payload.masterpassUserData.name!, ecommerceAggrement: "1", kvkkAggrement: "", isOther: masterpassState.data!.payload!.masterpassOtherUser!, is3dPayment: true, }); } } }, }); const setMasterpass3dPaymentStatus = useSetMasterpass3dPaymentStatusMutation({ onSuccess(data) { if (data.data.success) { getMasterpass3dPaymentStatus.mutateAsync({ cartId: paymentState.payload.cartId!, }); } }, }); const remotePurchaseOtherService = useRemotePurchaseOtherMutation({ onSuccess: (data) => { if (data.data.Result) { if ( data.data.Data.Body.Fault.Detail.ServiceFaultDetail.ResponseCode === "5010" ) { const returnUriApp = `${ envs.wlDisplayUrl }/api/payment/setmasterpass3dpaymentresult?cartid=${paymentState .payload.cartId!}&fcdscp=${storageManager.get("fcdscp").value}`; const url = `${ data.data.Data.Body.Fault.Detail.ServiceFaultDetail.Url3D }&returnUrl=${encodeURIComponent(returnUriApp)}`; setMasterpassModalUrl(url); setPayToken( data.data.Data.Body.Fault.Detail.ServiceFaultDetail.Token, ); setMasterpass3dPaymentStatus.mutate({ cartId: paymentState.payload.cartId!, status: "Started", }); loading.setFalse(); } else { openMasterpassModal.setFalse(); openBookingModal.setFalse(); setErrorMessage(t("Something went wrong!")); openMasterpassErrorModal(); } } }, }); const getMpTokenService = useGetMpToken({ onSuccess: (data) => { if (data.data.success) { openMasterpassModal.setTrue(); loading.setTrue(); setMasterpassData({ moduleName: "Hotel", payload: { ...masterpassState!.data!.payload, masterpassMpToken: data.data.result.token3D, }, }); remotePurchaseOtherService.mutate({ macroMerchantId: masterpassState!.data!.payload.macroMerchantId!, referenceNo: masterpassState!.data!.payload.masterpassUserData.referenceNumber!, installmentCount: masterpassState!.data!.payload.installmentCount!, listAccountName: masterpassState!.data!.payload.selectedCard.Name!, orderNo: masterpassState!.data!.payload.masterpassUserData.orderId!, token: data.data.result.token3D, msisdn: masterpassState!.data!.payload.masterpassUserData.msisdn!, amount: amountPriceConvert( masterpassState!.data!.payload.amount!.toString(), ), }); } }, }); const resendOtpMutation = useResendOtpMutation({ onSuccess: (data) => { if (data.success) { if (data.responseCode === "5001") { loading.setFalse(); setValidateTransactionToken(data.token); } } }, }); useImperativeHandle(ref, () => ({ submit: () => { if (masterpassState.data?.payload?.masterpassLoginState) { getMpTokenService.mutate({ cartId: paymentState.payload.cartId!, }); } else { formRef.current?.submit(); } }, onlyValidate: () => { formRef.current?.onlyValidate(); }, })); return (
{masterpassState.data?.payload?.masterpassLoginState ? ( ) : ( )} {openMasterpassModal.value && ( )} {openOtp.value && ( { loading.setTrue(); resendOtpMutation.mutate({ validationRefNo: validateTransactionToken, }); }} setValidationCode={(value) => { loading.setTrue(); validateTransactionService.mutate({ validationRefNo: validateTransactionToken, userId: masterpassState.data?.payload?.masterpassUserData.msisdn!, referenceNo: masterpassState.data?.payload.masterpassUserData .referenceNumber!, validationCode: value, }); }} /> )} {openBookingModal.value && } {modalOpenMasterpassModal && ( closeMasterpassErrorModal()} message={errorMessage} /> )}
); }; export default forwardRef(Masterpass);