from appservices.common.util import *



def create_campuslinkpro_payment_link(get_base_url,api_key,secret_key,graampay_check,pgOrderId,description,amount,currency,name,phone,email,payInPaymentGatewayId,client_ip,apiType,userId):
    print("(((((((((((((((((((((((((((((create_campuslinkpro_payment_link)))))))))))))))))))))))))))))")
    try:
        paymentgatewayresponseDict = {}
        headers = {
            "accept": "application/json",
            "content-type": "application/json",
            "Api-Key" : api_key
        }
        url = get_base_url+"/getintentpaymenturl"

        request_data = {
          "api_key": api_key,
          "pgOrderId": pgOrderId,
          "description": description,
          "amount": amount,
          "currency": currency,
          "name": name,
          "phone": phone,
          "email": email,
          "graampay_check": graampay_check,
        }
        
        encryption_key = bytes(secret_key, 'utf-8')
        responseEncrypt = encrypt(request_data,encryption_key)
        encryption_data = responseEncrypt.get('encryption_data')
        iv = responseEncrypt.get('iv')

        encryptDict = {
        "encryption_data":encryption_data,
        "iv":iv
        }

        requestData=[request_data]
        print(url,"((((((((((((url))))))))))))")
        print(headers,"((((((((((((headers))))))))))))")
        print(requestData,"((((((((((((requestData))))))))))))")
        print(encryptDict,"((((((((((((encryptDict))))))))))))")
        save_link_api_log_table = save_api_logs_data(userId,"payin","create_campuslinkpro_payment_link",url,payInPaymentGatewayId,requestData,client_ip,apiType)

        try:
            print(requestData,"(((((((((((((Campuslink pro Payin TXT request data )))))))))))))")
            response = requests.post(url,json=encryptDict, headers=headers)
            print(response,"(((((((((((((Campuslink pro Payin TXT RESPONSE)))))))))))))")
            responseData = json.loads(response.text)
            print(responseData,"(((((((((((((Campuslink pro Payin TXT RESPONSE)))))))))))))")
        except Exception as e:
            app.logger.error(traceback.format_exc())
            paymentgatewayresponseDict["responseStatus"]=0
            paymentgatewayresponseDict['result']="Our banking partner server is down please try after sometime!!"
            return paymentgatewayresponseDict

        save_link_api_log_table.update(responseData=[responseData],responseDate=datetime.datetime.now())
        transactionData = [responseData] 

        pgOrderId=''
        payment_request_id=''
        upi_intent_url=''
        messages=""
        paymentChannel=""

        if responseData:
            if responseData.get("responseStatus") == 1:
                responseBody = responseData.get("responseBody")
                print(responseBody,"(((((((((((((GRAAMPAY CAMPUSLINK PRO PAYIN)))))))))))))")
                pgOrderId = responseBody.get("pgOrderId")
                statusCheckId = responseBody.get("statusCheckId")
                payment_request_id = responseBody.get("payment_request_id")
                upi_intent_url = responseBody.get("upi_intent_url")
                paymentChannel = responseBody.get("paymentChannel")
                messages = responseBody.get("messages")

                if responseBody.get("status") == "SUCCESS":
                    transactionstatus=1
                    status="SUCCESS"
                elif responseBody.get("status") == "FAILED":
                    transactionstatus=0
                    status="FAILED"
                elif responseBody.get("status") == "REVERSAL":
                    transactionstatus=4
                    status="REVERSAL"
                else:
                    transactionstatus=2
                    status="PROCESSING"

                paymentgatewayresponseDict={
                "responseStatus": 1,
                "pgOrderId": pgOrderId,
                "payment_request_id": payment_request_id,
                "statusCheckId": statusCheckId,
                "upi_intent_url": upi_intent_url,
                "paymentChannel": "Campuslinkpro",
                "transactionData":transactionData,
                "result": "Success"
                }
                return paymentgatewayresponseDict
            else:
                paymentgatewayresponseDict["responseStatus"]=0
                paymentgatewayresponseDict['result']=responseData.get("result")
                return paymentgatewayresponseDict
        else:
            paymentgatewayresponseDict["responseStatus"]=0
            paymentgatewayresponseDict['result']="Our banking partner server is down please try after sometime!!"
            return paymentgatewayresponseDict
    except Exception as e:
        app.logger.error(traceback.format_exc())
        paymentgatewayresponseDict["responseStatus"]=0
        paymentgatewayresponseDict['result']="Our banking partner server is down please try after sometime!!"
        return paymentgatewayresponseDict


def campuslinkpro_status(get_base_url,api_key,secret_key,pgOrderId,transactionDate,graampay_check):
    paymentgatewayresponseDict = {}
    try:
        
        request_body = {
            "order_id": pgOrderId,
            "transactionDate": transactionDate,
            "graampay_check": graampay_check
        }
        print(request_body, "(((((((((((GRAAMPAY STG CAMPS)))))))))))")

        
        headers = {
            "accept": "application/json",
            "content-type": "application/json",
            "Api-Key": api_key
        }
        url = get_base_url + "/getpayinpaymentstatus"

        try:
            response = requests.post(url, json=request_body, headers=headers)
            responseData = response.json()  
            print(responseData, "(((((((((((((GRAAMPAY Campuslink pro status Payin TXT RESPONSE)))))))))))))")
        except Exception as e:
            app.logger.error(traceback.format_exc())
            paymentgatewayresponseDict["responseStatus"] = 0
            paymentgatewayresponseDict['result'] = "Our banking partner server is down, please try after sometime!!"
            return paymentgatewayresponseDict

        
        responseData = responseData.get('result', {}).get('responseData', [])
        bankRefNo = ""

        if responseData and isinstance(responseData, list) and len(responseData) > 0:
            
            paymentMethod = responseData[0].get("paymentMethod", {})
            paymentTransaction = paymentMethod.get("paymentTransaction", {})

            status_code = paymentTransaction.get("statusCode", None)
            status_message = paymentTransaction.get("statusMessage", None)
            amount = paymentTransaction.get("amount", None)
            

            print("Status Code:", status_code)
            print("Status Message:", status_message)
            print("Amount:", amount)
            
        else:
            print("No data available in responseData.")

        # transactionData = [responseData]

        # status_code = responseData.get("paymentMethod", {}).get("paymentTransaction", {}).get("statusCode")
        # status_message = responseData.get("paymentMethod", {}).get("paymentTransaction", {}).get("statusMessage")
        # amount = responseData.get("paymentMethod", {}).get("paymentTransaction", {}).get("amount")

        
        if responseData:
            paymentStatus = 3
            status = "pending"
            if status_code == "0300":
                paymentStatus = 1
                status = "success"
            elif status_code == "9999":
                status = "failed"
                paymentStatus = 0
            else:
                paymentStatus = 3
                status = "pending"

            paymentgatewayresponseDict = {
                "responseStatus": 1,
                "paymentStatus": paymentStatus,
                "status": status,
                "currency": "",
                "bankRefNo": bankRefNo,
                'payment_mode': "",
                'response_code': "",
                'orderAmount': amount,
                "transactionData": responseData,  
                "message": status_message,  
            }
            return paymentgatewayresponseDict
        else:
           
            paymentgatewayresponseDict = {
                "responseStatus": 0,
                "status": "failed",
                "message": "failed"
            }
            return paymentgatewayresponseDict
    except Exception as e:
        app.logger.error(traceback.format_exc())
        paymentgatewayresponseDict["responseStatus"] = 0
        paymentgatewayresponseDict["result"] = "Our banking partner server is down, please try after some time!!"
        return paymentgatewayresponseDict