from appservices.common.util import *
from appservices.common.form_schemas import *





pg_settlements= Blueprint("pg_settlements",__name__)

@pg_settlements.route("/add_pg_settlements",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def add_pg_settlements():
    data_status={"responseStatus":0,"result":""}
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        latitude = request.form.get("latitude", "")
        longitude = request.form.get("longitude", "")
        csrf_token = request.form.get("csrf_token")
        print(csrf_token,"((((((((((((((csrf_token))))))))))))))")

        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = request.headers.get('User-Agent').split(";")
            browser = loginBrowseData[0]

        client_ip=0
        # Extracting client IP address
        if request.headers.getlist("X-Forwarded-For"): 
            client_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            client_ip = request.remote_addr

        actionDate=datetime.datetime.now()

        permissionsList = check_permissions(adminId,"pgSettlementsPermission")
        if "add" in permissionsList:
            if request.method == "POST":

                additionalChargeAmount=0
                gstChargeAmount=0
                uploadFilePath=""
                createdOn=""
                date_format = "%d-%m-%Y"
                data_to_process = [request.form]
                print("((((((((((data_to_process)))))))))))", data_to_process)

                fileUpload = request.files.get("pgSettlementFile","")
                print("(((file)))", fileUpload)

                fileForm = AddFilePGSettlements()
                form = AddPGSettlementsForm(request.form)

                if fileForm.validate_on_submit():
                    print()

                    if fileUpload:
                        # Read the file content based on the file type (CSV or Excel)
                        file_stream = BytesIO(fileUpload.read())
                        if fileUpload.filename.endswith('.csv'):
                            df = pd.read_csv(file_stream)
                        elif fileUpload.filename.endswith(('.xls', '.xlsx')):
                            df = pd.read_excel(file_stream, engine='openpyxl')
                        else:
                            flash("Unsupported File Type!")
                            return redirect(url_for("pg_settlements.get_pg_settlements"))

                        # Process file data by converting it to a list of dictionaries
                        data_to_process = []
                        for index, row in df.iterrows():
                            print("row",row)
                            txnSubCode = row.get("subCode")
                            transaction_queryset = TransactionAPI.objects(subCode=txnSubCode,status__nin=[2],transactionType="PaymentGateway").first()
                            if not transaction_queryset:
                                flash("Invalid Transaction Api Type!!")
                                return redirect(url_for("pg_settlements.get_pg_settlements"))
                            transactionAPIId = transaction_queryset.id
                            settlementAmount = row.get("settlementAmount","") #
                            additionalChargeType = row.get("additionalChargeType","") #
                            additionalChargeValue = row.get("additionalChargeValue","") #
                            gstChargeType = row.get("gstChargeType","")#
                            gstChargeValue = row.get("gstChargeValue","") #
                            settlementDateTime = row.get("settlementDateTime","").strftime('%Y-%m-%dT%H:%M') #

                            data_to_process.append(
                                {   "transactionAPIId":transactionAPIId,
                                    "settlementAmount": settlementAmount,
                                    "additionalChargeType": additionalChargeType,
                                    "additionalChargeValue": additionalChargeValue,
                                    "gstChargeType": gstChargeType,
                                    "gstChargeValue": gstChargeValue,
                                    "settlementDateTime": settlementDateTime,
                                    "gstChargeValue": gstChargeValue,
                                })
        
                elif form.validate_on_submit():
                    

                    transactionAPIId = request.form.get("transactionAPIId","") #
                    settlementAmount = request.form.get("settlementAmount","") #
                    additionalChargeType = request.form.get("additionalChargeType","") #
                    additionalChargeValue = request.form.get("additionalChargeValue","") #
                    gstChargeType = request.form.get("gstChargeType","")#
                    gstChargeValue = request.form.get("gstChargeValue","") #
                    settlementDateTime = request.form.get("settlementDateTime","") # 
                    print("(((((Elif )))))", data_to_process)
                    data_to_process.append(
                            {
                                "transactionAPIId": transactionAPIId,
                                "settlementAmount": settlementAmount,
                                "additionalChargeType": additionalChargeType,
                                "additionalChargeValue": additionalChargeValue,
                                "gstChargeType": gstChargeType,
                                "gstChargeValue": gstChargeValue,
                                "settlementDateTime": settlementDateTime,
                                "gstChargeValue": gstChargeValue,
                            })
                else:
                    if fileUpload:
                        data_status['result']=fileForm.errors
                    else: 
                        data_status["result"] = form.errors
                    return data_status
                
                print("++++++++++++++++++++++++++++",data_to_process)
                
                for each_rec in data_to_process:
                    
                    transctionAPIId = each_rec.get("transactionAPIId","") #
                    settlementAmount = each_rec.get("settlementAmount","") #
                    additionalChargeType = each_rec.get("additionalChargeType","") #
                    additionalChargeValue = each_rec.get("additionalChargeValue","") #
                    gstChargeType = each_rec.get("gstChargeType","")#
                    gstChargeValue = each_rec.get("gstChargeValue","") #
                    settlementDateTime = each_rec.get("settlementDateTime","") #
                    gstChargeValue = each_rec.get("gstChargeValue","") #

                    jsonData = request.form.to_dict(flat=True)
                    requestData = [jsonData]
                    updatedrequestData = [jsonData]

                    if additionalChargeType == "Percentage":
                        additionalChargeAmount = ( float(settlementAmount) / 100)* float(additionalChargeValue)
                    else:
                        additionalChargeAmount = float(additionalChargeValue)

                    if gstChargeType == "Percentage":
                        gstChargeAmount = ( float(settlementAmount) / 100)* float(gstChargeValue)
                    else:
                        gstChargeAmount = float(gstChargeValue)

                    # print("transactionAPIId",transactionAPIId)
                    # print("additionalChargeValue",additionalChargeValue)
                    # print("settlementAmount",settlementAmount)
                    # print("gstChargeValue",gstChargeValue)
                    # print("settlementDateTime",settlementDateTime)
                    
                    # if transactionAPIId and settlementAmount and additionalChargeValue and gstChargeValue and settlementDateTime: 

                    settlementDateTime = datetime.datetime.strptime(settlementDateTime, "%Y-%m-%dT%H:%M")
                    print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",additionalChargeType,additionalChargeType,)
                    try:
                        admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                        if admin_queryset:
                            message=admin_queryset.userName+" "+" PG Settlement saved successfully!"
                            save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_pg_settlements","create",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
                            
                        pg_settlements_table = PgSettlements(
                            adminId = adminId,
                            transactionAPIId = transactionAPIId,
                            settlementAmount = settlementAmount,
                            additionalChargeType = additionalChargeType,
                            additionalChargeValue = additionalChargeValue,
                            additionalChargeAmount = additionalChargeAmount,
                            gstChargeType =gstChargeType,
                            gstChargeValue = gstChargeValue,
                            gstChargeAmount = gstChargeAmount,
                            uploadFilePath = uploadFilePath,
                            settlementDateTime = settlementDateTime,
                            status = 1,
                            createdOn = datetime.datetime.now(),
                            )
                        save_table = pg_settlements_table.save()
                        print(save_table,"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
                    
                    except Exception as e:
                        flash("Unable to save PG settlements!!")
                        app.logger.error(traceback.format_exc())
                        data_status['responseStatus']=4
                        return data_status
                
                # else:
                #     data_status['result']=fileForm.errors
                #     return data_status
                # elif formData:
                #         # Extract form data and store in the list
                #     settlementAmount = formData.get("settlementAmount","") #
                #     additionalChargeType = formData.get("additionalChargeType","") #
                #     additionalChargeValue = formData.get("additionalChargeValue","") #
                #     gstChargeType = formData.get("gstChargeType","")#
                #     gstChargeValue = formData.get("gstChargeValue","") #
                #     settlementDateTime = formData.get("settlementDateTime","") #
                #     data_to_process = [data_to_process.append(
                #             {
                #                 "settlementAmount": settlementAmount,
                #                 "additionalChargeType": additionalChargeType,
                #                 "additionalChargeValue": additionalChargeValue,
                #                 "gstChargeType": gstChargeType,
                #                 "gstChargeValue": gstChargeValue,
                #                 "settlementDateTime": settlementDateTime,
                #                 "gstChargeValue": gstChargeValue,
                #             })]
                

                    # if settlementAmount and not is_valid_numeric(settlementAmount):
                    #     flash("settlement Amount must contain only numeric characters!")
                    #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                    # if additionalChargeValue and not is_valid_numeric(additionalChargeValue):
                    #     flash("settlement Amount must contain only numeric characters!")
                    #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                    # if gstChargeValue and not is_valid_txn_limit(gstChargeValue):
                    #     flash("Invalid Format - GST Charge Value!")
                    #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                    # print("additionalChargeType",additionalChargeType)
                    # print("gstChargeType",gstChargeType)
                    # typeValues = ["Percentage", "Amount"]
                    # if additionalChargeType not in typeValues or gstChargeType not in typeValues:
                    #     flash("Charge Type Must be Percentage or Amount!!")
                    #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                    # if not transactionAPIId or not settlementAmount or not additionalChargeValue or not gstChargeValue or not settlementDateTime:    
                    #     flash("Required fields are missing!!")
                    #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                    
                    

                    
                flash("PG settlements saved successfully!")
                data_status['responseStatus']=1
                return data_status
            else:
                return redirect(url_for("pg_settlements.get_pg_settlements"))        
        else:
            flash("The staff member does not have permission to create a PG settlements.", "danger")
           
            data_status['responseStatus']=4
            return data_status
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save PG settlement details!!"
        flash("Unable to save PG settlement details!!", "danger")
        data_status['responseStatus']=4
        return data_status

# @pg_settlements.route("/add_pg_settlements",methods=["POST","GET"])
# @adminid_access_token_required
# @csrf_protect
# def add_pg_settlements():
#     data_status={"responseStatus":0,"result":""}
#     try:
#         if not session.get("adminId"):
#             return redirect("admin_login")
#         adminId = session.get("adminId")
        
#         csrf_token = request.form.get("csrf_token")
#         print(csrf_token,"((((((((((((((csrf_token))))))))))))))")

#         loginBrowser = request.headers.get("Sec-Ch-Ua")
#         if loginBrowser:
#             loginBrowseData = loginBrowser.split(";")
#             browser = loginBrowseData[0]
#         else:
#             loginBrowseData = request.headers.get('User-Agent').split(";")
#             browser = loginBrowseData[0]

#         client_ip=0
#         # Extracting client IP address
#         if request.headers.getlist("X-Forwarded-For"): 
#             client_ip = request.headers.getlist("X-Forwarded-For")[0]
#         else:
#             client_ip = request.remote_addr

#         actionDate=datetime.datetime.now()

#         permissionsList = check_permissions(adminId,"pgSettlementsPermission")
#         if "add" in permissionsList:
#             if request.method == "POST":

#                 additionalChargeAmount=0
#                 gstChargeAmount=0
#                 uploadFilePath=""
#                 createdOn=""
#                 date_format = "%d-%m-%Y"
#                 data_to_process = [request.form]
#                 # print(formData,"asdasdasdasdasd")

#                 fileUpload = request.files.get("pgSettlementFile","")
#                 if fileUpload:
#                     # Read the file content based on the file type (CSV or Excel)
#                     file_stream = BytesIO(fileUpload.read())
#                     if fileUpload.filename.endswith('.csv'):
#                         df = pd.read_csv(file_stream)
#                     elif fileUpload.filename.endswith(('.xls', '.xlsx')):
#                         df = pd.read_excel(file_stream, engine='openpyxl')
#                     else:
#                         flash("Unsupported File Type!")
#                         return redirect(url_for("pg_settlements.get_pg_settlements"))

#                     # Process file data by converting it to a list of dictionaries
#                     data_to_process = []
#                     for index, row in df.iterrows():
#                         print("row",row)
#                         txnSubCode = row.get("subCode")
#                         transaction_queryset = TransactionAPI.objects(subCode=txnSubCode,status__nin=[2],transactionType="PaymentGateway").first()
#                         if not transaction_queryset:
#                             flash("Invalid Transaction Api Type!!")
#                             return redirect(url_for("pg_settlements.get_pg_settlements"))
#                         transactionAPIId = transaction_queryset.id
#                         settlementAmount = row.get("settlementAmount","") #
#                         additionalChargeType = row.get("additionalChargeType","") #
#                         additionalChargeValue = row.get("additionalChargeValue","") #
#                         gstChargeType = row.get("gstChargeType","")#
#                         gstChargeValue = row.get("gstChargeValue","") #
#                         settlementDateTime = row.get("settlementDateTime","").strftime('%Y-%m-%dT%H:%M') #

#                         data_to_process.append(
#                             {   "transactionAPIId":transactionAPIId,
#                                 "settlementAmount": settlementAmount,
#                                 "additionalChargeType": additionalChargeType,
#                                 "additionalChargeValue": additionalChargeValue,
#                                 "gstChargeType": gstChargeType,
#                                 "gstChargeValue": gstChargeValue,
#                                 "settlementDateTime": settlementDateTime,
#                                 "gstChargeValue": gstChargeValue,
#                             })

#                 # elif formData:
#                 #         # Extract form data and store in the list
#                 #     settlementAmount = formData.get("settlementAmount","") #
#                 #     additionalChargeType = formData.get("additionalChargeType","") #
#                 #     additionalChargeValue = formData.get("additionalChargeValue","") #
#                 #     gstChargeType = formData.get("gstChargeType","")#
#                 #     gstChargeValue = formData.get("gstChargeValue","") #
#                 #     settlementDateTime = formData.get("settlementDateTime","") #
#                 #     data_to_process = [data_to_process.append(
#                 #             {
#                 #                 "settlementAmount": settlementAmount,
#                 #                 "additionalChargeType": additionalChargeType,
#                 #                 "additionalChargeValue": additionalChargeValue,
#                 #                 "gstChargeType": gstChargeType,
#                 #                 "gstChargeValue": gstChargeValue,
#                 #                 "settlementDateTime": settlementDateTime,
#                 #                 "gstChargeValue": gstChargeValue,
#                 #             })]
#                 for each_rec in data_to_process:
                    
#                     transactionAPIId = each_rec.get("transactionAPIId","") #
#                     settlementAmount = each_rec.get("settlementAmount","") #
#                     additionalChargeType = each_rec.get("additionalChargeType","") #
#                     additionalChargeValue = each_rec.get("additionalChargeValue","") #
#                     gstChargeType = each_rec.get("gstChargeType","")#
#                     gstChargeValue = each_rec.get("gstChargeValue","") #
#                     settlementDateTime = each_rec.get("settlementDateTime","") #
#                     gstChargeValue = each_rec.get("gstChargeValue","") #

#                     # if settlementAmount and not is_valid_numeric(settlementAmount):
#                     #     flash("settlement Amount must contain only numeric characters!")
#                     #     return redirect(url_for("pg_settlements.get_pg_settlements"))

#                     # if additionalChargeValue and not is_valid_numeric(additionalChargeValue):
#                     #     flash("settlement Amount must contain only numeric characters!")
#                     #     return redirect(url_for("pg_settlements.get_pg_settlements"))

#                     # if gstChargeValue and not is_valid_txn_limit(gstChargeValue):
#                     #     flash("Invalid Format - GST Charge Value!")
#                     #     return redirect(url_for("pg_settlements.get_pg_settlements"))

#                     print("additionalChargeType",additionalChargeType)
#                     print("gstChargeType",gstChargeType)
#                     typeValues = ["Percentage", "Amount"]
#                     if additionalChargeType not in typeValues or gstChargeType not in typeValues:
#                         flash("Charge Type Must be Percentage or Amount!!")
#                         return redirect(url_for("pg_settlements.get_pg_settlements"))

#                     if not transactionAPIId or not settlementAmount or not additionalChargeValue or not gstChargeValue or not settlementDateTime:    
#                         flash("Required fields are missing!!")
#                         return redirect(url_for("pg_settlements.get_pg_settlements"))

#                     jsonData = request.form.to_dict(flat=True)
#                     requestData = [jsonData]
#                     updatedrequestData = [jsonData]

#                     if additionalChargeType == "Percentage":
#                         additionalChargeAmount = ( float(settlementAmount) / 100)* float(additionalChargeValue)
#                     else:
#                         additionalChargeAmount = float(additionalChargeValue)

#                     if gstChargeType == "Percentage":
#                         gstChargeAmount = ( float(settlementAmount) / 100)* float(gstChargeValue)
#                     else:
#                         gstChargeAmount = float(gstChargeValue)

#                     print("transactionAPIId",transactionAPIId)
#                     print("additionalChargeValue",additionalChargeValue)
#                     print("settlementAmount",settlementAmount)
#                     print("gstChargeValue",gstChargeValue)
#                     print("settlementDateTime",settlementDateTime)
                    
#                     # if transactionAPIId and settlementAmount and additionalChargeValue and gstChargeValue and settlementDateTime: 

#                     settlementDateTime = datetime.datetime.strptime(settlementDateTime, "%Y-%m-%dT%H:%M")
#                     print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",additionalChargeType,additionalChargeType,)
#                     try:
#                         admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
#                         if admin_queryset:
#                             message=admin_queryset.userName+" "+ "" +" PG Settlement saved successfully!"
#                             save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_pg_settlements","create",actionDate,client_ip,browser,message,requestData,updatedrequestData) 
                            
#                         pg_settlements_table = PgSettlements(
#                             adminId = adminId,
#                             transactionAPIId = transactionAPIId,
#                             settlementAmount = settlementAmount,
#                             additionalChargeType = additionalChargeType,
#                             additionalChargeValue = additionalChargeValue,
#                             additionalChargeAmount = additionalChargeAmount,
#                             gstChargeType =gstChargeType,
#                             gstChargeValue = gstChargeValue,
#                             gstChargeAmount = gstChargeAmount,
#                             uploadFilePath = uploadFilePath,
#                             settlementDateTime = settlementDateTime,
#                             status = 1,
#                             createdOn = datetime.datetime.now(),
#                             )
#                         save_table = pg_settlements_table.save()
#                         print(save_table,"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")

                    
#                     except Exception as e:
#                         flash("Unable to save PG settlements!!")
#                         app.logger.error(traceback.format_exc())
#                         return redirect(url_for("pg_settlements.get_pg_settlements"))
                    
#                 flash("PG settlements saved successfully!")
#                 return redirect(url_for("pg_settlements.get_pg_settlements"))
#         else:
#             flash("Staff member does not have Permission to create PG settlements!!")
#             return redirect(url_for("pg_settlements.get_pg_settlements"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to save PG settlement details!!"
#         return render_template("super_admin_templates/pg_settlements.html",error=error)

@pg_settlements.route("/get_pg_settlements",methods=["POST","GET"])
@adminid_access_token_required
def get_pg_settlements():
    if not session.get("adminId"):
        return redirect("admin_login")
    pgSettlementsList = []
    transactionApisList=[]
    pagination =  ""
    search_element=""
    redirectval=""
    snoCount=0
    PgSettlementPage=None
    fileForm=AddFilePGSettlements()
    print("(((((((((((((((((pgSettlementsList)))))))))))))))))")
    adminId = session.get("adminId")
    permissionsList = check_permissions(session.get("adminId"),"pgSettlementsPermission")
    print(permissionsList,"((((((((((((permissionsList))))))))))))")
    if "view" in permissionsList:
        try:
            redirectTo = request.args.get("redirectTo","")
            if redirectTo:
                redirectval = redirectTo
            else:
                redirectval = ""
            search_element = request.form.get("search_element","")


            PgSettlementPage = request.args.get(get_page_parameter("PgSettlementPage"), type=int, default=1)


            per_page = 20
            start = (PgSettlementPage - 1) * per_page

            total_count=0
            filters = Q(status__in=[0, 1])

            if search_element and search_element.strip():
                filters &= Q(siteTitle__icontains=search_element.strip())
            
            total_count = PgSettlements.objects(filters).count()

            pg_settlements_queryset=(
                PgSettlements.objects(filters)
                .only("id","transactionAPIId","settlementAmount","additionalChargeType","additionalChargeValue","additionalChargeAmount","gstChargeType","gstChargeValue","gstChargeAmount","uploadFilePath","settlementDateTime","status","createdOn")
                .order_by("-id")
                .skip(start)
                .limit(per_page)
            )

            snoCount = start

            for each_pg in pg_settlements_queryset:
                # Safely round float fields to 2 decimal places
                add_value = round(float(each_pg.additionalChargeValue or 0), 2)
                add_amount = round(float(each_pg.additionalChargeAmount or 0), 2)
                gst_value = round(float(each_pg.gstChargeValue or 0), 2)
                gst_amount = round(float(each_pg.gstChargeAmount or 0), 2)

                # Manually build the dictionary
                pg_dict = {
                    "id": str(each_pg.id),  # cast ObjectId to string
                    "transactionAPIId": each_pg.transactionAPIId,
                    "settlementAmount": each_pg.settlementAmount,
                    "additionalChargeType": each_pg.additionalChargeType,
                    "additionalChargeValue": add_value,
                    "additionalChargeAmount": add_amount,
                    "gstChargeType": each_pg.gstChargeType,
                    "gstChargeValue": gst_value,
                    "gstChargeAmount": gst_amount,
                    "uploadFilePath": each_pg.uploadFilePath,
                    "settlementDateTime": each_pg.settlementDateTime,
                    "status": each_pg.status,
                    "createdOn": each_pg.createdOn,
                }

                pgSettlementsList.append(pg_dict)

            


            pg_queryset = TransactionAPI.objects(status__in=[0,1],transactionType="PaymentGateway").only("id","apiName").order_by("-id")

            transactionApisList = list(pg_queryset)

            pagination = Pagination(PgSettlementPage=PgSettlementPage, total=total_count, per_page=per_page, page_parameter ="PgSettlementPage", alignment="right", record_name="PgSettlement")

            # for each_pg in pg_queryset:
            #     pgDict = fetching_transaction_api_details(each_pg)
            #     transactionApisList.append(pgDict)

            # # print(transactionApisList,"transactionApisList")
            # print(search_element,"_____________________________________________")

            # pg_settlements_queryset = PgSettlements.objects(status__in=[0,1]).order_by("-createdOn")
            # # if search_element:
            # #     pg_settlements_queryset = pg_settlements_queryset.filter(Q(siteTitle__icontains=search_element))

            # print("pg_settlements_queryset",pg_settlements_queryset)
            # # Get the current page from the query parameters
            # page = request.args.get(get_page_parameter(), type=int, default=1)

            # per_page = 20  # Number of items per page

            # # Query the database for the current page's data
            # total_count = pg_settlements_queryset.count()

            # start = (page - 1) * per_page

            # end = min(start + per_page, total_count)

            # total_pg_settlements = pg_settlements_queryset[start:end]
            
            # snoCount = start
            # for each_pg_settlements in total_pg_settlements:
            #     snoCount +=1
                
                
            #     pgSettlementDict = {
            #     "id": str(each_pg_settlements.id),
            #     "transactionAPIId":str(each_pg_settlements.transactionAPIId.id),
            #     "transactionAPIName":each_pg_settlements.transactionAPIId.apiName,
            #     "settlementAmount":each_pg_settlements.settlementAmount,
            #     "additionalChargeType":each_pg_settlements.additionalChargeType,
            #     "additionalChargeValue":each_pg_settlements.additionalChargeValue,
            #     "additionalChargeAmount":each_pg_settlements.additionalChargeAmount,
            #     "gstChargeType":each_pg_settlements.gstChargeType,
            #     "gstChargeValue":each_pg_settlements.gstChargeValue,
            #     "gstChargeAmount":each_pg_settlements.gstChargeAmount,
            #     "settlementDateTime":each_pg_settlements.settlementDateTime.strftime('%Y-%m-%d %H:%M:%S'),
            #     "status":each_pg_settlements.status,
            #     "createdOn":each_pg_settlements.createdOn.strftime('%Y-%m-%d %H:%M:%S'),
            #     }

            #     if each_pg_settlements.status == 1:
            #         pgSettlementDict["actionText"]="Active"
            #     else:
            #         pgSettlementDict["actionText"]="Deactive"
                
            #     pgSettlementDict["snoCount"]=snoCount
            #     # if each_pg_settlements.status == 1:
            #     #     pgSettlementDict["actionText"]="Active"
            #     # else:
            #     #     pgSettlementDict["actionText"]="Deactive"
            #     pgSettlementsList.append(pgSettlementDict)
            # pagination = Pagination(page=page, total=total_count, per_page=per_page, alignment="right")

            return render_template("super_admin_templates/pg_settlements.html",
                pagination=pagination,
                pgSettlementsList=pgSettlementsList,
                redirectval=redirectval,
                search_element=search_element,
                snoCount = snoCount,
                transactionApisList=transactionApisList,
                PgSettlementPage=PgSettlementPage,
                fileForm=fileForm,
                )
            
        except Exception as e:
            app.logger.error(traceback.format_exc())
            error = "Unable to fetch PG settlements details!!"
            return render_template("super_admin_templates/pg_settlements.html", 
                error=error,
                pagination=pagination,
                pgSettlementsList=pgSettlementsList,
                redirectval=redirectval,
                search_element=search_element,
                snoCount = snoCount,
                transactionApisList=transactionApisList,
                PgSettlementPage=PgSettlementPage,
                fileForm=fileForm,
                )
    else:
        flash("The staff member does not have permission to view PG settlements", "danger")
        return redirect(url_for("admin.dashboard"))


@pg_settlements.route("/update_pg_settlement_status",methods=["POST","GET"])
@adminid_access_token_required
def update_pg_settlement_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")
    latitude = request.args.get("latitude", "")
    longitude = request.args.get("longitude", "")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get("User-Agent").split(";")
        browser = loginBrowseData[0]

    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"): 
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()

    jsonData = request.form.to_dict(flat=True)

    existing_record = ""
    updatedrequestData = [jsonData]

    PgSettlementPage = request.args.get("PgSettlementPage")
    search_element = request.args.get("search_element", "").strip()
    
    permissionsList = check_permissions(session.get("adminId"),"pgSettlementsPermission")
    if "edit" in permissionsList:
        site_id = request.args.get("site_id","")
        print(site_id,"((((((((((((((((((()))))))))))))))))))")
        if site_id:
            try:
                pg_queryset = PgSettlements.objects(id=site_id,status__nin=[2]).first()
                existing_record = pg_queryset.to_json()
                requestData = [existing_record]
                if pg_queryset:
                    if pg_queryset.status == 0:
                        pg_queryset.update(status=1)
                        flash("PG settlement activated successfully!")
                        message=pg_queryset.adminId.userName+" "+pg_queryset.transactionAPIId.apiName+"" +" PG settlement activated successfully!"
                    elif pg_queryset.status == 1:
                        pg_queryset.update(status=0)
                        flash("PG settlement deactivated successfully!")
                        message=pg_queryset.adminId.userName+" "+pg_queryset.transactionAPIId.apiName+""+" PG settlement deactivated successfully!"
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"pg_settlement_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
                    return redirect(url_for("pg_settlements.get_pg_settlements",search_element=search_element,PgSettlementPage=PgSettlementPage))
                else:
                    flash("Invaild id!!")
                    return redirect(url_for("pg_settlements.get_pg_settlements",search_element=search_element,PgSettlementPage=PgSettlementPage))
            except Exception as e:
                flash("Unable to Update PG Settlement Status!!!")
                app.logger.error(traceback.format_exc())
                return redirect(url_for("pg_settlements.get_pg_settlements",search_element=search_element,PgSettlementPage=PgSettlementPage))
        else:
            flash("Required fields are missing!")
            return redirect(url_for("pg_settlements.get_pg_settlements",search_element=search_element,PgSettlementPage=PgSettlementPage))
    else:
        flash("The staff member does not have permission to update PG settlement status.", "danger")
        return redirect(url_for("pg_settlements.get_pg_settlements",search_element=search_element,PgSettlementPage=PgSettlementPage))



#Update PG  settlement sites
@pg_settlements.route("/update_pg_settlement",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def update_pg_settlement():
    data_status={"responseStatus":0,"result":""}
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId") 
    
    csrf_token = request.form.get("csrf_token")
    print(csrf_token,"((((((((((((((csrf_token))))))))))))))")  
    latitude = request.form.get("latitude", "")
    longitude = request.form.get("longitude", "")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = request.headers.get('User-Agent').split(";")
        browser = loginBrowseData[0]

    existing_record = ""
    client_ip=0
    # Extracting client IP address
    if request.headers.getlist("X-Forwarded-For"): 
        client_ip = request.headers.getlist("X-Forwarded-For")[0]
    else:
        client_ip = request.remote_addr

    actionDate=datetime.datetime.now()

    try:
        permissionsList = check_permissions(session.get("adminId"),"pgSettlementsPermission")
        if "edit" in permissionsList:
            site_id = request.args.get("site_id","")
            if request.method == "POST":

                additionalChargeAmount=0
                gstChargeAmount=0
                uploadFilePath=""


                transactionAPIId = request.form.get("transactionAPIId","") #
                settlementAmount = request.form.get("settlementAmount","") #
                additionalChargeType = request.form.get("additionalChargeType","") #
                additionalChargeValue = request.form.get("additionalChargeValue","") #
                gstChargeType = request.form.get("gstChargeType","")#
                gstChargeValue = request.form.get("gstChargeValue","") #
                settlementDateTime = request.form.get("settlementDateTime","") #
                gstChargeValue = request.form.get("gstChargeValue","") #

                # if settlementAmount and not is_valid_numeric(settlementAmount):
                #     flash("settlement Amount must contain only numeric characters!")
                #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                # if additionalChargeValue and not is_valid_numeric(additionalChargeValue):
                #     flash("settlement Amount must contain only numeric characters!")
                #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                # if gstChargeValue and not is_valid_txn_limit(gstChargeValue):
                #     flash("Invalid Format - GST Charge Value!")
                #     return redirect(url_for("pg_settlements.get_pg_settlements"))

                
                jsonData = request.form.to_dict(flat=True)
                typeValues = ["Percentage", "Amount"]

                form = AddPGSettlementsForm(request.form,current_id=site_id)

                if form.validate_on_submit():
                    if additionalChargeType not in typeValues or gstChargeType not in typeValues:
                        flash("Charge Type Must be Percentage or Amount!!")
                        return redirect(url_for("pg_settlements.get_pg_settlements"))
                    
                    if additionalChargeType == "Percentage":
                        additionalChargeAmount = ( float(settlementAmount) / 100)* float(additionalChargeValue)
                    else:
                        additionalChargeAmount = float(additionalChargeValue)

                    if gstChargeType == "Percentage":
                        gstChargeAmount = ( float(settlementAmount) / 100)* float(gstChargeValue)
                    else:
                        gstChargeAmount = float(gstChargeValue)

                    # print("transactionAPIId",transactionAPIId)
                    # print("additionalChargeValue",additionalChargeValue)
                    # print("settlementAmount",settlementAmount)
                    # print("gstChargeValue",gstChargeValue)
                    # print("settlementDateTime",settlementDateTime)
                    

                    if transactionAPIId and settlementAmount and additionalChargeValue and gstChargeValue and settlementDateTime:

                        settlementDateTime = datetime.datetime.strptime(settlementDateTime, "%Y-%m-%dT%H:%M")

                        pg_settlement_queryset = PgSettlements.objects(id=site_id,status__in=[0,1]).first()
                        # existing_record = pg_settlement_queryset.to_json()
                        message=pg_settlement_queryset.adminId.userName+" "+pg_settlement_queryset.transactionAPIId.apiName+""+" PG settlements Updated successfully!"
                        requestData=[pg_settlement_queryset]
                        updatedrequestData=[jsonData]
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_pg_settlement","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 

                        if pg_settlement_queryset:
                            pg_settlement_queryset.update(
                                transactionAPIId = ObjectId(transactionAPIId),
                                settlementAmount = settlementAmount,
                                additionalChargeType = additionalChargeType,
                                additionalChargeValue = additionalChargeValue,
                                additionalChargeAmount = additionalChargeAmount,
                                gstChargeType =gstChargeType,
                                gstChargeValue = gstChargeValue,
                                gstChargeAmount = gstChargeAmount,
                                uploadFilePath = uploadFilePath,
                                settlementDateTime = settlementDateTime,
                                )
                            
                            flash("PG settlements Updated successfully!")
                            data_status["responseStatus"]=1
                            return data_status
                        else:
                            flash("Invaild id!!")
                            data_status["responseStatus"]=4
                            return data_status
                    else:
                        flash("Required fields are missing!!")
                        data_status["responseStatus"]=2
                        data_status["result"]="Required fields are missing."
                        return data_status

                else:
                    data_status['result']=form.errors
                    return data_status


                # if additionalChargeType not in typeValues or gstChargeType not in typeValues:
                #     flash("Charge Type Must be Percentage or Amount!!")
                #     return redirect(url_for("pg_settlements.get_pg_settlements"))
                
                # if additionalChargeType == "Percentage":
                #     additionalChargeAmount = ( float(settlementAmount) / 100)* float(additionalChargeValue)
                # else:
                #     additionalChargeAmount = float(additionalChargeValue)

                # if gstChargeType == "Percentage":
                #     gstChargeAmount = ( float(settlementAmount) / 100)* float(gstChargeValue)
                # else:
                #     gstChargeAmount = float(gstChargeValue)

                # print("transactionAPIId",transactionAPIId)
                # print("additionalChargeValue",additionalChargeValue)
                # print("settlementAmount",settlementAmount)
                # print("gstChargeValue",gstChargeValue)
                # print("settlementDateTime",settlementDateTime)
                

                # if transactionAPIId and settlementAmount and additionalChargeValue and gstChargeValue and settlementDateTime:

                #     settlementDateTime = datetime.datetime.strptime(settlementDateTime, "%Y-%m-%dT%H:%M")

                #     pg_settlement_queryset = PgSettlements.objects(id=site_id,status__in=[0,1]).first()
                #     # existing_record = pg_settlement_queryset.to_json()
                #     message=pg_settlement_queryset.adminId.userName+" "+""+" PG settlements Updated successfully!"
                #     requestData=[pg_settlement_queryset]
                #     updatedrequestData=[jsonData]
                #     save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_pg_settlement","update",actionDate,client_ip,browser,message,requestData,updatedrequestData) 

                #     if pg_settlement_queryset:
                #         pg_settlement_queryset.update(
                #             transactionAPIId = ObjectId(transactionAPIId),
                #             settlementAmount = settlementAmount,
                #             additionalChargeType = additionalChargeType,
                #             additionalChargeValue = additionalChargeValue,
                #             additionalChargeAmount = additionalChargeAmount,
                #             gstChargeType =gstChargeType,
                #             gstChargeValue = gstChargeValue,
                #             gstChargeAmount = gstChargeAmount,
                #             uploadFilePath = uploadFilePath,
                #             settlementDateTime = settlementDateTime,
                #             )
                        
                #         flash("PG settlements Updated successfully!")
                #         return redirect(url_for("pg_settlements.get_pg_settlements"))
                #     else:
                #         flash("Invaild id!!")
                #         return redirect(url_for("pg_settlements.get_pg_settlements"))
                # else:
                #     flash("Required fields are missing!!")
                #     return redirect(url_for("pg_settlements.get_pg_settlements"))
            else:
                return redirect(url_for("pg_settlements.get_pg_settlements"))
        else:
            flash("The staff member does not have permission to update PG settlements.", "danger")
            data_status['responseStatus']=4
            return data_status
    except Exception as e:
        flash("Unable to save PG settlement details!!")
        app.logger.error(traceback.format_exc())
        data_status['responseStatus']=4
        return data_status
