from appservices.common.util import *

payment_transactions = Blueprint("payment_transactions",__name__)


@payment_transactions.route("/view_user_payment_details",methods=["POST"])
def view_user_payment_details():
    data_status = {"responseStatus": 0, "result": ""}
    paymentLink = request.json.get("paymentLink","")
    payInType = request.json.get("payInType","") # "page","button","link","api"

    if paymentLink and (payInType in ["page","button","link","api"]):
        try:
            if payInType == "page":
                payment_page_queryset = Users.objects(merchantPaymentLink=paymentLink).first()
                if payment_page_queryset:
                    paymentPageDict = {}
                    paymentPageDict = {
                    "userId":str(payment_page_queryset.id),
                    "userName":payment_page_queryset.fullName,
                    "email":payment_page_queryset.email,
                    "phoneNumber":payment_page_queryset.phoneNumber,
                    "amount":0
                    }
                    data_status["userDetails"]=paymentPageDict
                else:
                    data_status["result"]="Invalid payment link!!"
                    return data_status
            elif payInType == "button":
                payment_button_queryset = PaymentButtons.objects(buttonLink=paymentLink).first()
                buttonLinkExpDate = payment_button_queryset.buttonLinkExpDate
                currentDate = datetime.datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)
                if buttonLinkExpDate < currentDate:
                    data_status["result"]="Payment button link has been expired!!"
                    return data_status

                if payment_button_queryset:
                    if payment_button_queryset.status == 1:
                        paymentButtonDict = {}
                        paymentButtonDict = {
                        "userId":str(payment_button_queryset.userId.id),
                        "userName":payment_button_queryset.userId.fullName,
                        "userEmail":payment_button_queryset.userId.email,
                        "userPhoneNumber":payment_button_queryset.userId.phoneNumber,
                        "buttonLink":payment_button_queryset.buttonLink,
                        "customerEmail":payment_button_queryset.email,
                        "customerMobileNumber":payment_button_queryset.mobileNumber,
                        "amount":payment_button_queryset.amount
                        }
                        data_status["userDetails"]=paymentButtonDict
                    else:
                        data_status["result"]="The payment link has been expired!!"
                        return data_status
                else:
                    data_status["result"]="Invalid payment link!!"
                    return data_status
            elif payInType == "link":
                payment_link_queryset = PaymentLinks.objects(paymentLink=paymentLink).first()
                linkExpDate = payment_link_queryset.linkExpDate
                currentDate = datetime.datetime.now().replace(hour=0,minute=0,second=0,microsecond=0)
                if linkExpDate < currentDate:
                    data_status["result"]="Payment link has been expired!!"
                    return data_status

                if payment_link_queryset:
                    if payment_link_queryset.status == 1:
                        paymentLinkDict = {}
                        paymentLinkDict = {
                        "userId":str(payment_link_queryset.userId.id),
                        "userName":payment_link_queryset.userId.fullName,
                        "userEmail":payment_link_queryset.userId.email,
                        "userPhoneNumber":payment_link_queryset.userId.phoneNumber,
                        "customerEmail":payment_link_queryset.email,
                        "customerMobileNumber":payment_link_queryset.mobileNumber,
                        "paymentLink":payment_link_queryset.paymentLink,
                        "amount":payment_link_queryset.amount
                        }
                        data_status["userDetails"]=paymentLinkDict
                    else:
                        data_status["result"]="The payment link has been expired!!"
                        return data_status
                else:
                    data_status["result"]="Invalid payment link!!"
                    return data_status

            data_status["responseStatus"] = 1
            data_status["result"] = "User payment details fetched successfully!"
            return data_status
        except Exception as e:
            app.logger.error(traceback.format_exc())
            data_status["result"] = "Unable to fetch user details!!"
            return data_status
    else:
        data_status["result"] = "Required fields are missing!!"
        return data_status


@payment_transactions.route("/add_funds",methods=["POST"])
@user_required
def add_funds():
  data_status = {"responseStatus": 0, "result": ""}
  userId = request.json.get("userId","")
  paymentGatewayId = request.json.get("paymentGatewayId","")
  paymentType = request.json.get("paymentType","")
  transactionId = request.json.get("transactionId","")
  transactionData = request.json.get("transactionData","")
  orderId = request.json.get("orderId","")
  customerEmail = request.json.get("customerEmail","")
  customerPhonenumber = request.json.get("customerPhonenumber","")
  agent = request.json.get("agent","")
  location = request.json.get("location","")
  platform = request.json.get("platform","")
  amount = request.json.get("amount",0)
  status = request.json.get("status")
  slabId = request.json.get("slabId","")
  paymentModeId = request.json.get("paymentModeId","")
  subPaymentModeId = request.json.get("subPaymentModeId","")

  if userId and paymentGatewayId and customerEmail and customerPhonenumber and location and platform and amount and status:
      try:
          user_queryset = Users.objects(id=userId,status__in=[1]).first()
          if status == 1:   
              actuallBalance = user_queryset.walletBalance
              updateAmount = float(actuallBalance)+float(amount)
              user_queryset.update(walletBalance = updateAmount)

              transactionData = [transactionData]

              # payment_mode_queryset = PaymentMode.objects().first()
              # sub_payment_mode_queryset = SubPaymentModes.objects().first()

              # slab_queryset = SetupChargeCommissions.objects(
              #   transactionAPIId=paymentGatewayId,
              #   paymentModeId=paymentModeId,
              #   subPaymentModeId=subPaymentModeId
              #   ).first()
              # if slab_queryset:
              #   slabId = str(slab_queryset.id)
              #   slabGst = float(slab_queryset.gst)/100
              #   slabTds = float(slab_queryset.tds)/100

              wallet_transaction_table = WalletTransactions(
                  userId = userId,
                  amount = amount,
                  paymentGatewayId = paymentGatewayId,
                  paymentType = paymentType,
                  creditType = "Credit",
                  transactionId = transactionId,
                  transactionData = transactionData,
                  orderId = orderId,
                  walletLog="Wallet Balance is added with the amount of " + str(int(amount)) + ".",
                  userType="user",
                  createdBy = None,
                  createdOn = datetime.datetime.now(),
                  location = location,
                  platform = platform,
                  agent = agent,
                  customerEmail = customerEmail,
                  customerPhonenumber = customerPhonenumber,
                  status = status
                  ).save()
              walletTransactionId = str(wallet_transaction_table.id)
          elif status == 0:
              transactionData = [transactionData]
              wallet_transaction_table = WalletTransactions(
                  userId = userId,
                  amount = amount,
                  paymentGatewayId = paymentGatewayId,
                  paymentType = paymentType,
                  creditType = "Credit",
                  transactionId = transactionId,
                  transactionData = transactionData,
                  orderId = orderId,
                  walletLog="Unable to add money.Transaction Failed!!",
                  userType="user",
                  createdBy = None,
                  createdOn = datetime.datetime.now(),
                  location = location,
                  platform = platform,
                  agent = agent,
                  customerEmail = customerEmail,
                  customerPhonenumber = customerPhonenumber,
                  status = status
                  ).save()
              walletTransactionId = str(wallet_transaction_table.id)

          data_status["responseStatus"] = 1
          data_status["walletTransactionId"] = walletTransactionId
          data_status["result"] = "Funds added to the wallet successfully!"
          return data_status
      except Exception as e:
          app.logger.error(traceback.format_exc())
          data_status["result"] = "An error occurred while processing the transaction!!"
          return data_status
  else:
      data_status["result"] = "Required fields are missing!!"
      return data_status


