from appservices.common.util import *

web_hooks = Blueprint("web_hooks",__name__)

# @web_hooks.route("/razor_pay_captured",methods=["POST"])
# def razor_pay_captured():



# Replace with your Razorpay webhook secret
# RAZORPAY_WEBHOOK_SECRET = 'your_razorpay_webhook_secret'
# RAZORPAY_WEBHOOK_SECRET = '8BWqVZQ0JBiSdH5RAz6SBXCZ'
RAZORPAY_WEBHOOK_SECRET = 'HFzSIvCXNs4llP2YSS2Jf70Q'


import hmac
import hashlib

def verify_webhook_signature(payload, signature, secret):
    expected_signature = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(signature, expected_signature)

@web_hooks.route('/razor_pay_webhook', methods=['POST','GET'])
def razor_pay_webhook():
    payload = request.get_data()
    signature = request.headers.get('X-Razorpay-Signature')

    print(signature)
    print("(((((((((((((((((((signature)))))))))))))))))))")
    print(payload)
    print("((((((((((((payload))))))))))))")


    try:
        # Verify the webhook signature
        # client.utility.verify_webhook_signature(payload, signature, RAZORPAY_WEBHOOK_SECRET)
        is_signature_valid = verify_webhook_signature(payload, signature, RAZORPAY_WEBHOOK_SECRET)

        wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
        if is_signature_valid:
            if payload.get('event') == 'order.paid':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                transactionId = payload['payload']['payment']['entity']['id']
                transactionData = [payload.get('payload',[])]
                if wallet_queryset.status == 1:
                    pass
                elif wallet_queryset.status == 0:
                    wallet_queryset.update(
                        # amount = wallet_queryset.amount,
                        transactionId = transactionId,
                        transactionData = transactionData,
                        orderId = order_id,
                        status = 1,
                        )
                    #Updating the user wallet balance
                    actuallBalance = user_queryset.walletBalance
                    updateAmount = float(actuallBalance)+wallet_queryset.amount
                    user_queryset.update(walletBalance = updateAmount)
            elif payload.get('event') == 'payment.failed':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                transactionId = payload['payload']['payment']['entity']['id']
                transactionData = [payload.get('payload',[])]
                if wallet_queryset.status == 1:
                    wallet_queryset.update(
                        # amount = wallet_queryset.amount,
                        transactionId = transactionId,
                        transactionData = transactionData,
                        orderId = order_id,
                        status = 0,
                        )
                    #Updating the user wallet balance
                    actuallBalance = user_queryset.walletBalance
                    updateAmount = float(actuallBalance)-wallet_queryset.amount
                    user_queryset.update(walletBalance = updateAmount)

                elif wallet_queryset.status == 0:
                    pass

            elif payload.get('event') == 'refund.create':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                amount = payload['payload']['refund']['entity']['amount']
                amount=float(amount/100)
                initiated_timestamp = payload['payload']['refund']['entity']['created_at']
                initiated_date = datetime.datetime.fromtimestamp(initiated_timestamp)
                refund_data = {
                "amount":amount,
                "initiated_date":initiated_date,
                }
                wallet_queryset.update(
                    refundData = refund_data,
                    status = 3 #For refund initiate
                    )

            elif payload.get('event') == 'refund.processed':
                order_id = payload['payload']['payment']['entity']['order_id']
                wallet_queryset = WalletTransactions.objects(orderId=order_id).first()
                user_queryset = Users.objects(id=wallet_queryset.userId).first()

                amount = payload['payload']['refund']['entity']['amount']
                amount=float(amount/100)
                processed_timestamp = payload['payload']['refund']['entity']['created_at']
                processed_date = datetime.datetime.fromtimestamp(processed_timestamp)
                refund_data = wallet_queryset.refundData
                refund_data["processed_date"] = processed_date
                wallet_queryset.update(
                    refundData = refund_data,
                    status = 4 #For refund processed
                    )
                #Updating the user wallet balance
                actuallBalance = user_queryset.walletBalance
                updateAmount = float(actuallBalance)-wallet_queryset.amount
                user_queryset.update(walletBalance = updateAmount)

        else:
            raise ValueError('Invalid signature')

    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)}), 400


    # Handle the webhook event
    event = request.json
    # You can now process the 'event' object according to your requirements

    return jsonify({'status': 'success'})


@web_hooks.route('/moneyart_webhook', methods=['POST','GET'])
def moneyart_webhook(clientTxnRef,refId,Status,operatorRef):
    clientTxnRef = request.args.get('clientTxnRef')
    refId = request.args.get('refId')
    status = request.args.get('Status')
    operatorRef = request.args.get('operatorRef')

    print(clientTxnRef)
    print(refId)
    print(status)
    print(operatorRef)
    print("((((((((((((((((((((((((((((((((((((((((((((((moneyart_webhook))))))))))))))))))))))))))))))))))))))))))))))")

    try:
        transaction_queryset = Transactions.objects(transactionId=clientTxnRef,status__in=[1]).first()
        user_queryset = Users.objects(id=transaction_queryset.userId).first()
        # Success/Pending/Failure/Reversal

        if status == "Success":
            status = 1
            if transaction_queryset.status == 1: #Success
                pass
            elif transaction_queryset.status == 2: #Pending
                transaction_queryset.update(status=status)

            elif transaction_queryset.status == 0: #Failure
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )

                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                serviceName = transaction_queryset.serviceId.serviceName
                mobileNumber = transaction_queryset.mobileNumber
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount =amount,
                    paymentGatewayId = None,
                    creditType = "debit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = serviceName + " " + str(mobileNumber) + " is recharged with the amount of " + str(int(amount)) + ".",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)-float(amount)
                user_queryset.update(walletBalance = updateBalance)
        elif status == "Failure":
            status = 0
            if transaction_queryset.status == status: #wallet tranaction and transaction
                pass
            elif transaction_queryset.status in [1,2]: #Pending
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )

                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                serviceName = transaction_queryset.serviceId.serviceName
                mobileNumber = transaction_queryset.mobileNumber
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount = amount,
                    paymentGatewayId = None,
                    creditType = "credit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = str(int(amount)) + " Refunded successfully",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)+float(amount)
                user_queryset.update(walletBalance = updateBalance)

        elif status == "Pending":
            status = 2
            if transaction_queryset.status == 1:
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )
            elif transaction_queryset.status == 2:
                pass
            elif transaction_queryset.status == 0: #wallet tranaction and transaction
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )

                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                serviceName = transaction_queryset.serviceId.serviceName
                mobileNumber = transaction_queryset.mobileNumber
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount = amount,
                    paymentGatewayId = None,
                    creditType = "debit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = serviceName + " " + str(mobileNumber) + " is recharged with the amount of " + str(int(amount)) + ".",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)-float(amount)
                user_queryset.update(walletBalance = updateBalance)

        elif status == "Reversal":
            status = 3 #For refund
            if transaction_queryset.status == 0:
                pass
            elif transaction_queryset.status == 1 or transaction_queryset.status == 2:
                transaction_queryset.update(
                    status=status,
                    operatorRef = operatorReference,
                    )
                userId = str(transaction_queryset.userId.id)
                amount = transaction_queryset.amount
                paymentType = transaction_queryset.paymentType
                transactionId = clientTxnRef
                # orderId = request.json.get("orderId","")

                wallet_trasaction_table = WalletTransactions(
                    userId = userId,
                    amount = amount,
                    paymentGatewayId = None,
                    creditType = "credit",
                    transactionId = transactionId,
                    paymentType = paymentType,
                    settlementPayId = None,
                    walletLog = str(int(amount)) + " Refunded successfully",
                    userType = "user",
                    createdBy = None,
                    createdOn = datetime.datetime.now(),
                    status = 1,
                    ).save()
                # Updating the user wallet balance
                currentBalance = user_queryset.walletBalance
                updateBalance = float(currentBalance)+float(amount)
                user_queryset.update(walletBalance = updateBalance)

        return jsonify({'status': 'success'}) 


    except Exception as e:
        app.logger.error(traceback.format_exc())
        return jsonify({'status': 'error', 'message': str(e)}), 400


@web_hooks.route("/pay_in_webhook",methods=["POST"])
def pay_in_webhook():
    data_status = {"responseStatus":0,"result":""}
    orderId = request.json.get("orderId","")
    orderStatus = request.json.get("orderStatus","")
    status = request.json.get("status","")
    amount = request.json.get("amount","")
    transID = request.json.get("transID","")
    tdate = request.json.get("tdate","")
    billCurrency = request.json.get("billCurrency","")
    mop = request.json.get("mop","")
    response = request.json.get("response","")

    try:
        data_status["responseStatus"]=1
        return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        return data_status

@web_hooks.route("/payu_payment_response",methods=["POST"])
def payu_payment_response():
    data_status = {"responseStatus":0,"result":""}
    userId=""
    walletId=""
    agent=""
    try:
        # responseDict = ""
        responseDict = request.form.to_dict()
        # responseDict = request.json
        
        print("responseDict responseDictresponseDictresponseDict",responseDict)

        txn_id = responseDict.get("txnid")
        productinfo = responseDict.get("productinfo")

        wallet_txn_query_set = WalletTransactions.objects(pgOrderId=txn_id).first()
        walletId=str(wallet_txn_query_set.id)
        if not wallet_txn_query_set:
            print("wallet_txn_query_set error")
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
            return redirect(redirect_url)
        cardmasked = ""
        customerVpa = ""
        cardType = str(wallet_txn_query_set.cardType)
        jsonResponseDict = responseDict
        agent=str(wallet_txn_query_set.agent)
        payInPaymentGatewayId = wallet_txn_query_set.paymentGatewayId.id
        autoSettlement = wallet_txn_query_set.paymentGatewayId.autoSettlement
        status = wallet_txn_query_set.status
        userId = str(wallet_txn_query_set.userId.id)

        if agent=="web":
            redirect_url = f"{domain}user/#/vendorpayment/{userId}/{walletId}"
        else:
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)

        print("wallet_txn_query_set error2")
        merchant_queryset = Users.objects(id=userId,status=1).first()

        if jsonResponseDict and status == 3:
            print("in if and status ==== 3 ")
            # if wallet_txn_query_set.orderId != jsonResponseDict.get("txnid"):
            #     data_status["result"]="Invalid Request!!"
            #     return data_status

            if jsonResponseDict.get("error")=="E000":
                errorMessage = jsonResponseDict.get("field9")
            else:
                errorMessage = jsonResponseDict.get("Field9")
            bankName=""
            customerVpa=""
            statusCheckId=str(jsonResponseDict.get("mihpayid"))
            bankRefId=str(jsonResponseDict.get("bank_ref_num"))
            pgOrderId=str(jsonResponseDict.get("txnid")) #doubt
            paymentMode=str(jsonResponseDict.get("mode"))

            currency="INR"
            if jsonResponseDict.get("mode")=="UPI":
                customerVpa = jsonResponseDict.get("field1")

            elif jsonResponseDict.get("mode")=="CC":
                paymentMode="CREDIT CARD"
                if cardType=="":
                    cardType=jsonResponseDict.get("card_type")
                bankName=jsonResponseDict.get("issuing_bank")
                # customerVpa=jsonResponseDict.get("card_type")
                cardmasked=jsonResponseDict.get("cardnum")

            elif jsonResponseDict.get("mode")=="DC":
                paymentMode="DEBIT CARD"
                if cardType=="":
                    cardType=jsonResponseDict.get("card_type")
                cardmasked=jsonResponseDict.get("cardnum")

            elif jsonResponseDict.get("mode")=="NB":
                paymentMode="NET BANKING"
                customerVpa="" ## doubt no vpa in NB 
            # elif jsonResponseDict.get("mode")=="NEFT":
            #     cardmasked=""
            # elif jsonResponseDict.get("mode")=="AEPS":
            #     cardmasked=""
            # elif jsonResponseDict.get("mode")=="IMPS":
            #     cardmasked=""
            elif jsonResponseDict.get("mode")=="CASH": ### we dont have cash ?
                paymentMode="WALLET"
                customerVpa=""
            else:
                paymentMode="CREDIT CARD"
                customerVpa=""

            
            print(paymentMode,"((((((((((((((((paymentMode????????????))))))))))))))))")

            ################################################### Slab Calculation for Payin #########################################################################
            payment_mode_queryset = PaymentMode.objects(paymentMode=str(paymentMode)).first()
            paymentModeId=""
            subPaymentModeId=""
            if payment_mode_queryset:
                paymentModeId = str(payment_mode_queryset.id)
                if cardType!="":
                    subPaymentMode=cardType
                    sub_payment_mode_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,subPaymentModeType=str(subPaymentMode)).first()
                    if sub_payment_mode_queryset:
                        subPaymentModeId = str(sub_payment_mode_queryset.id)
                else:
                    subPaymentMode=paymentMode
                    sub_payment_mode_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,subPaymentModeType=str(subPaymentMode)).first()
                    if sub_payment_mode_queryset:
                        subPaymentModeId = str(sub_payment_mode_queryset.id)

                if subPaymentModeId=="":
                    subPaymentMode=paymentMode
                    sub_payment_mode_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,subPaymentModeType=str(subPaymentMode)).first()
                    if sub_payment_mode_queryset:
                        subPaymentModeId = str(sub_payment_mode_queryset.id)
                

            patternId = str(merchant_queryset.patternId.id)
            # patternId = ""

            amount = jsonResponseDict.get("amount")
           
            if amount is None:
                amount = 0
            else:
                amount = float(amount)

            if amount < 0:
                return redirect(redirect_url)

            slabId = None
            transactionAmount = amount
            commissionCharges={}
            if paymentModeId!="" and subPaymentModeId!="" and payInPaymentGatewayId!="" and patternId!="":

                print(amount,"amount For Payu response API")
                print(paymentModeId,"paymentModeId For Payu response API")
                print(subPaymentModeId,"subPaymentModeId For Payu response API")
                print(patternId,"patternId For Payu response API")
                commissionCharges = slab_calculation_for_payin_merchant(amount,paymentModeId,subPaymentModeId,patternId)

                if commissionCharges.get("slabId") == None:
                    slabId = None
                    transactionAmount = amount
                else:
                    slabId = commissionCharges.get("slabId")
                    transactionAmount = float(commissionCharges.get("transactionAmount"))
            print(slabId,"slabId For Payu response API")
            #######################################################################################################################################################
            print(commissionCharges,"((((((commissionCharges1))))))")
            transactionData = [jsonResponseDict]
            if jsonResponseDict.get("status") == "success":
                if float(wallet_txn_query_set.amount)==float(amount):
                    status=1
                else:
                    status = 6
                    errorMessage = "Insufficient amount credited!!"
                lorder_queryset = WalletTransactions.objects(id=str(walletId),status__nin=[5]).first()
               
                if lorder_queryset.status!=1 and status==1:
                    print(commissionCharges,"((((((commissionCharges2))))))")
                    print("((((((in lorder_queryset check ))))))",str(merchant_queryset.id),"((((float(transactionAmount)))))",float(transactionAmount),"(((((str(payInPaymentGatewayId))))))",str(payInPaymentGatewayId))
                    balanceResult=user_payin_balance_update(str(merchant_queryset.id),float(transactionAmount),"Credit",str(payInPaymentGatewayId))
                    if balanceResult.get('responseStatus')==0:
                        return redirect(redirect_url)
                    print("((((((before PayinBalanceLogs check ))))))")
                    payinbalancelogs_queryset=PayinBalanceLogs(
                        transactionAPIId=str(payInPaymentGatewayId),
                        userId=userId,
                        previousBalance=round_last_digits(float(balanceResult.get('transactionPreviousBalance'))),
                        currentBalance=round_last_digits(float(balanceResult.get('transactionCurrentBalance'))),
                        orderId=str(wallet_txn_query_set.orderId),
                        amount=round_last_digits(float(amount)),
                        grandTotal=round_last_digits(float(transactionAmount)),
                        transferType="Credit",
                        userType="user",
                        transactionId=str(wallet_txn_query_set.transactionId),
                        createdOn=datetime.datetime.now(),
                        status=1
                        ).save()
                    print("((((((before loader_queryset update check ))))))")
                    
                    lorder_queryset.update(status=status,payInResponseCallBackData=transactionData,responseCallBackTime=datetime.datetime.now(),pgOrderId=pgOrderId,bankRefId=str(bankRefId),customerVpa=customerVpa,currency=currency,errorMessage=errorMessage,grandTotal=round_last_digits(float(transactionAmount)),walletLog="Wallet Balance is added with the amount of " + str(amount) + ".",previousBalance=round_last_digits(float(balanceResult.get('userPreviousBalance'))),cardmasked=cardmasked,subPaymentModeId=ObjectId(subPaymentModeId),paymentModeId=ObjectId(paymentModeId),paymentType=paymentMode,bankName=bankName,productName=productinfo,currentBalance=round_last_digits(float(balanceResult.get('userCurrentBalance'))),commissionCharges=commissionCharges,statusCheckId=statusCheckId)
                    if autoSettlement==True:
                        try:
                            settlement_response=merchant_payin_auto_settlement(str(userId),str(walletId),str(payInPaymentGatewayId))
                            print(settlement_response,"settlement_response")
                            pass
                        except Exception as e:
                            pass
                    try:
                        merchantName = str(merchant_queryset.fullName)
                        trnsactionDate = datetime.datetime.now().astimezone(ist_timezone).strftime("%d-%m-%Y %I:%M %p")
                        mail_subject = "Load Funds for Graam Pay from Merchant " + merchantName + "."
                        sender_mail_query = SenderMails.objects(status=1,mailType="Payin Transactions Mail").first()
                        mail_data = {
                        "merchantName":merchantName,
                        "amount":formatINR("{:.2f}".format(float(amount))),
                        "transactionId":str(wallet_txn_query_set.transactionId),
                        "paymentMode":jsonResponseDict.get("mode"),
                        "cardNumber":cardmasked,
                        "orderId":str(wallet_txn_query_set.orderId),
                        "bankRefId":str(bankRefId),
                        "transactionDate":trnsactionDate,
                        }
                        if sender_mail_query:
                            sendermailsList = sender_mail_query.mailsList
                            recipients_list = sendermailsList
                            template_name = "emails/loadfunds.html"
                            
                            mailoutputData = send_asynchronous_email(mail_subject, recipients_list, template_name, mail_data)
                            
                            merchant_mail_subject = "Payment Transaction Alert From Graam Pay"
                            merchant_recipients_list = [merchant_queryset.email]

                            mailoutputData = send_asynchronous_email(merchant_mail_subject, merchant_recipients_list, template_name, mail_data)

                    except Exception as e:
                        app.logger.error(traceback.format_exc())
                        pass
                    try:
                        print(commissionCharges,"((((((commissionCharges3))))))")
                        if merchant_queryset.parentId and commissionCharges.get("slabId") != None:
                            print(commissionCharges,"((((((commissionCharges4))))))")
                            user_parent_payin_commission_details(str(merchant_queryset.parentId.id),amount,payInPaymentGatewayId,jsonResponseDict.get("txnid"),paymentModeId,subPaymentModeId,commissionCharges.get("chargeAmount"),commissionCharges.get("chargeValue"),commissionCharges.get("chargeType"),str(merchant_queryset.id),float(commissionCharges.get("gstAmount")),float(commissionCharges.get("tdsAmount")))
                    except Exception as e:
                        app.logger.error(traceback.format_exc())
                        pass
                else:
                    print(commissionCharges,"((((((commissionCharges5))))))")
                    lorder_queryset.update(status=status,payInResponseCallBackData=transactionData,responseCallBackTime=datetime.datetime.now(),pgOrderId=pgOrderId,bankRefId=bankRefId,customerVpa=customerVpa,currency=currency,errorMessage=errorMessage,cardmasked=cardmasked,subPaymentModeId=ObjectId(subPaymentModeId),paymentModeId=ObjectId(paymentModeId),paymentType=paymentMode,bankName=bankName,productName=productinfo,grandTotal=round_last_digits(float(transactionAmount)),walletLog="Wallet Balance is added with the amount of " + str(amount) + ".",commissionCharges=commissionCharges,statusCheckId=statusCheckId)
            else:
                print(commissionCharges,"((((((commissionCharges6))))))")
                wallet_txn_query_set.update(status=0,payInResponseCallBackData=transactionData,responseCallBackTime=datetime.datetime.now(),pgOrderId=pgOrderId,bankRefId=bankRefId,customerVpa=customerVpa,currency=currency,errorMessage=errorMessage,cardmasked=cardmasked,subPaymentModeId=ObjectId(subPaymentModeId),paymentModeId=ObjectId(paymentModeId),paymentType=paymentMode,bankName=bankName,productName=productinfo,grandTotal=round_last_digits(float(transactionAmount)),walletLog="Wallet Balance is added with the amount of " + str(amount) + ".",commissionCharges=commissionCharges,statusCheckId=statusCheckId)
        
        # return redirect(url_for('web_hooks.paymentresponsedata',walletId=str(walletId)))
        print("wallet_txn_query_set error3")
        return redirect(redirect_url)
        # return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        print("wallet_txn_query_set error4")
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=walletId)
        return redirect(redirect_url)

@web_hooks.route("/paymentresponsedata/<walletId>",methods=["POST","GET"])
def paymentresponsedata(walletId):
    try:
        return render_template("frontend/paymentresponse.html",walletId=walletId)
    except Exception as e:
        app.logger.error(traceback.format_exc())
        return render_template("frontend/paymentresponse.html",walletId="")


@web_hooks.route("/paymentreturnsuccessurl/<transactionId>", methods=["POST","GET"])
def paymentreturnsuccessurl(transactionId):
    print("(((((((lyra return page)))))))")
    return render_template("frontend/lyrareturnpage.html")


@web_hooks.route("/lyrareturnurl", methods=["POST"])
def lyrareturnurl():
    transactionId=""
    try:
        print(request.form,"lyrareturnurl request.form")
        resultdata = {"responseStatus":0,"result":"Pending"}
        pgOrderId=request.form.get('vads_order_id')
        charge_status=request.form.get('vads_charge_status')
        userId=""
        
        order_queryset = WalletTransactions.objects(pgOrderId=pgOrderId,status__nin=[5]).first()
        if order_queryset:
            transactionId=str(order_queryset.id)
            userId=str(order_queryset.userId.id)
            agent=str(order_queryset.agent)
            if agent=="web":
                redirect_url = f"{domain}user/#/vendorpayment/{userId}/{transactionId}"
            else:
                redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
            return redirect(redirect_url)
        else:
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
            return redirect(redirect_url)
    except Exception as e:
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
        return redirect(redirect_url)

@web_hooks.route("/campuslinkpro_returnurl", methods=["GET","POST"])
def campuslinkpro_returnurl():
    transactionId=""
    try:
        print("campuslinkpro_returnurl request.form")
        resultdata = {"responseStatus":0,"result":"Pending"}
        userId=""
        pgOrderId = request.args.get("pgOrderId")
        
        order_queryset = WalletTransactions.objects(pgOrderId=pgOrderId,status__nin=[5]).first()
        print("campuslinkpro_returnurl pgOrderId",pgOrderId)
        if order_queryset:
            transactionId=str(order_queryset.id)
            userId=str(order_queryset.userId.id)
            agent=str(order_queryset.agent)
            transaction_id=str(order_queryset.transactionId)
            bank_ref_id=str(order_queryset.bankRefId)
            user_order_id=str(order_queryset.orderId)
            print("campuslinkpro_returnurl transactionId",transactionId)
            if agent=="web":
                redirect_url = f"{domain}user/#/vendorpayment/{userId}/{transactionId}"
                return redirect(redirect_url)
            elif agent=="mobile":
                redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
                return redirect(redirect_url)
            else:
                print("((((((((((userOrderId))))))))))",user_order_id)
                api_request_queryset = ApiRequestData.objects(userOrderId=user_order_id).first()
                if api_request_queryset:
                    requestData=api_request_queryset.requestData[0]
                    requestData['status']=""
                    requestData['transaction_id']=transaction_id
                    requestData['bank_reference_number']=bank_ref_id
                    webhook_queryset = WebHooks.objects(webhookType="payment_gateway",userId=userId,status=1).first()
                    if webhook_queryset:
                        webhookURL = webhook_queryset.webhookLink
                        if webhookURL:
                            headers = {'Content-Type': 'application/json'}
                            #payload = "responseStatus=1"+"&result="+errorMessage+"&responseBody="+requestData
                            payload = {
                            "responseStatus":1,
                            "result":"",
                            "responseBody":requestData
                            }
                            print(webhookURL,"*****webhookURL****")
                            print(payload,"*****payload****")
                            respnseData = requests.post(webhookURL, json=payload, headers=headers)
                            print("*****webhook payin success response****")
                            redirect_url = webhookURL
                    ##### where to redirect or what to return after post call for agent == api
                    
                    return redirect(redirect_url)
        else:
            redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
            return redirect(redirect_url)
    except Exception as e:
        app.logger.error(traceback.format_exc())
        redirect_url=url_for("web_hooks.paymentreturnsuccessurl",transactionId=transactionId)
        return redirect(redirect_url)
    