from appservices.common.util import *

kyc_apis = Blueprint("kyc_apis",__name__)


# Add KYC API


def fetching_kyc_api_details(kyc_apis_queryset):
    kyc_api_dict = {}
    try:
        kyc_api_dict={
        "id":str(kyc_apis_queryset.id),
        "apiName":kyc_apis_queryset.apiName,
        "code":kyc_apis_queryset.code,
        }
        if kyc_apis_queryset.paramsList:
            kyc_api_dict["paramsList"] = kyc_apis_queryset.paramsList
        else:
            kyc_api_dict["paramsList"] = ""

        if kyc_apis_queryset.status==1:
            kyc_api_dict["actionText"] = "Active"
        else:
            kyc_api_dict["actionText"] = "Deactive"

        if kyc_apis_queryset.createdOn:
            kyc_api_dict["createdOn"] = kyc_apis_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            kyc_api_dict["createdOn"] = ""

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return kyc_api_dict


# View All KYC API's
@kyc_apis.route("/kyc_apis_list",methods=["POST","GET"])

def kyc_apis_list():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")
    # permissionsList = check_permissions(adminId,"apiGatewaysPermissions")
    # if "view" in permissionsList:    
    kycAPIList =[]
    assignKycList = []
    addAssignKycAPIList=[]
    try:
        redirectTo = request.args.get('redirectTo','')
        if redirectTo:
            redirectval = redirectTo
        else:
            redirectval = "KycApis"

        search = False  
        search_element = request.args.get('search_element','')
        if not search_element:
            search_element = request.form.get("search_element","")
        if search_element:
            search = True

        # page = request.args.get(get_page_parameter(), type=int, default=1)
        # page_start,page_end=fetch_limit_length_based_on_page_index(page,10)
        # pagination = Pagination(
        #     page=page,
        #     record_name='api_master',
        #     per_page=10,
        #     alignment="right"
        #     )

         ######### kyc Api ############

        kyc_apis_queryset = kycApis.objects(status__in=[0,1]).order_by("-id").all()
        if search_element:
            kyc_apis_queryset = kyc_apis_queryset.filter(Q(apiName__icontains=search_element))
        #length = transaction_apis_queryset.count()
        #transaction_apis_queryset=transaction_apis_queryset[page_start:page_end]

        for each_kyc_api in kyc_apis_queryset:
            kyc_api_dict = fetching_kyc_api_details(each_kyc_api)
            kycAPIList.append(kyc_api_dict)
        
            check_assign_query_set = AssignKyc.objects(kycApiId=ObjectId(each_kyc_api.id),status__in=[0,1]).order_by("-id").all()
            if not check_assign_query_set:
                addAssignKycAPIList.append(kyc_api_dict)

          ######### Assign kyc ############
        assign_kyc_queryset = AssignKyc.objects(status__in=[0,1]).order_by("-id").all()
        if search_element:
            assign_kyc_queryset = assign_kyc_queryset.filter(Q(apiName__icontains=search_element))

        for each_assign_kyc in assign_kyc_queryset:
            assign_kyc_dict = fetching_assign_kyc_details(each_assign_kyc)
            assignKycList.append(assign_kyc_dict)
    

        return render_template("super_admin_templates/kyc_apis_list.html",
            search_element=search_element,
            kycAPIList=kycAPIList,
            assignKycList=assignKycList,
            addAssignKycAPIList=addAssignKycAPIList,
            #pagination=pagination,
            redirectval = redirectval
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch kyc api details!!"
        return render_template("super_admin_templates/kyc_apis_list.html",
            search_element=search_element,
            kycAPIList=kycAPIList,
            assignKycList=assignKycList,
            addAssignKycAPIList=addAssignKycAPIList,
            #pagination=pagination,
            redirectval = redirectval
            )
    # else:
    #     flash("Staff member does not have given view api permissions!!")
    #     return render_template("super_admin_templates/api_master_list.html")


@kyc_apis.route("/add_kyc_api",methods=["POST","GET"])

def add_kyc_api():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")

        loginBrowser = request.headers.get("Sec-Ch-Ua")
        userAgent=""
        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()
        
        if request.method == "POST":
            action = request.form.get("action", "HI").strip()
            data = request.form.to_dict()
            # Step 1: Handle OTP Generation
            if action == "generate":
                mail_type = data.get("mailType", "").strip()
                print(mail_type,"((((((((((((((((mail_type))))))))))))))))")
                if not mail_type:
                    return jsonify({"responseStatus": 0, "result": "mailType is required!"}), 400


                return jsonify(generate_otp_helper(mail_type))

            # tep 2: Handle OTP Verification
            elif action == "verify":
                otp_check_id = request.form.get("otpCheckId","SAI")
                otp_code = request.form.get("otpCode","K")

                print(otp_check_id,"((((((((OTP CHECK ID????????????))))))))")
                print(otp_code,"((((((((OTP CODE????????????))))))))")

                if not otp_check_id or not otp_code:
                    return jsonify({"responseStatus": 0, "result": "Required fields are missing!"})

                return jsonify(verify_otp_helper(otp_check_id, otp_code))

            elif action == "update":
                otp_check_id = request.form.get("otpCheckId", "")
                otp_record = OtpChecks.objects(id=otp_check_id, status=1).first()
                admin_id = request.form.get("adminId", "")
               
                otpcheck_queryset = OtpChecks.objects(adminId=str(admin_id), id=str(otp_check_id), status=1).first()

                if not otpcheck_queryset:
                    return jsonify({"responseStatus": 0, "result": "Invalid Request."})
                # Update OTP status to 2 after verification
                otpcheck_queryset.update(status=2)
                return jsonify({"responseStatus": 1, "result": "OTP status successfully updated!"})

            apiName = request.form.get("apiName","")
            code = request.form.get("code","")
           # paramsList = request.form.getlist("paramsList[]")
            inputKeyField = request.form.getlist("inputKeyField[]")
            inputValueField = request.form.getlist("inputValueField[]")

            jsonData = request.form.to_dict(flat=True)
            requestData = [jsonData]
            updatedrequestData = [jsonData]

            if len(inputKeyField) == len(inputValueField):
                # Create a list of dictionaries
                paramsList = [{'key': key, 'value': value} for key, value in zip(inputKeyField, inputValueField)]
            else:
                flash("Please give selected params values")
                return redirect(url_for("kyc_apis.kyc_apis_list"))

            if apiName:
                try:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if admin_queryset:
                        message=admin_queryset.userName+" "+apiName+" Kyc Api created successfully!"
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_kyc_api","create",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    kyc_apis_table = kycApis(
                        adminId = adminId,
                        apiName = apiName,
                        code = code,
                        paramsList = paramsList,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = kyc_apis_table.save()
                    kycApiId = str(save_table.id)

                    flash("Kyc Api added successfully!")
                    return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))

                except Exception as e:
                    flash("Unable to save Kyc Api!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))

                except Exception as e:
                    flash("Unable to save Kyc Api!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save Kyc Api!!"
        return render_template("super_admin_templates/kyc_apis_list.html",error=error)


# Update KYC api
@kyc_apis.route("/update_kyc_apis",methods=["POST","GET"])

def update_kyc_apis():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")    
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    userAgent=""
    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(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    try:
        kycApiId = request.args.get("kycApiId","")
        if request.method == "POST":
            action = request.form.get("action", "HI").strip()
            data = request.form.to_dict()
            # Step 1: Handle OTP Generation
            if action == "generate":
                mail_type = data.get("mailType", "").strip()
                print(mail_type,"((((((((((((((((mail_type))))))))))))))))")
                if not mail_type:
                    return jsonify({"responseStatus": 0, "result": "mailType is required!"}), 400


                return jsonify(generate_otp_helper(mail_type))

            # tep 2: Handle OTP Verification
            elif action == "verify":
                otp_check_id = request.form.get("otpCheckId","SAI")
                otp_code = request.form.get("otpCode","K")

                print(otp_check_id,"((((((((OTP CHECK ID????????????))))))))")
                print(otp_code,"((((((((OTP CODE????????????))))))))")

                if not otp_check_id or not otp_code:
                    return jsonify({"responseStatus": 0, "result": "Required fields are missing!"})

                return jsonify(verify_otp_helper(otp_check_id, otp_code))

            elif action == "update":
                otp_check_id = request.form.get("otpCheckId", "")
                otp_record = OtpChecks.objects(id=otp_check_id, status=1).first()
                admin_id = request.form.get("adminId", "")
               
                otpcheck_queryset = OtpChecks.objects(adminId=str(admin_id), id=str(otp_check_id), status=1).first()

                if not otpcheck_queryset:
                    return jsonify({"responseStatus": 0, "result": "Invalid Request."})
                # Update OTP status to 2 after verification
                otpcheck_queryset.update(status=2)
                return jsonify({"responseStatus": 1, "result": "OTP status successfully updated!"})
            apiName = request.form.get("apiName","")
            code = request.form.get("code","")
            #paramsList = request.form.getlist("paramsList[]")
            inputKeyField = request.form.getlist("inputKeyField[]")
            inputValueField = request.form.getlist("inputValueField[]")

            jsonData = request.form.to_dict(flat=True)

            if len(inputKeyField) == len(inputValueField):
                # Create a list of dictionaries
                paramsList = [{'key': key, 'value': value} for key, value in zip(inputKeyField, inputValueField)]
            else:
                flash("Please give selected params values")
                return redirect(url_for("kyc_apis.kyc_apis_list"))

            kyc_api_queryset = kycApis.objects(id=kycApiId,status__nin=[2]).first()
            existing_record = kyc_api_queryset.to_json()

            message=kyc_api_queryset.adminId.userName+" "+apiName+" KYC API updated successfully!"
            requestData=[existing_record]
            updatedrequestData=[jsonData]
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_kyc_apis","update",actionDate,client_ip,browser,message,requestData,updatedrequestData) 

            if kyc_api_queryset:
                kyc_api_queryset.update(
                    apiName = apiName,
                    code = code,
                    paramsList = paramsList,
                    )


                flash(" KYC API updated successfully!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update Kyc api!!"
        return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
    # else:
    #     flash("Staff member does not have given update api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))


# Update KYC api status
@kyc_apis.route("/update_kyc_api_status",methods=["POST","GET"])
def update_kyc_api_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    userAgent=""
    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()

    jsonData = request.form.to_dict(flat=True)

    requestData = [existing_record]
    updatedrequestData = [jsonData]
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    kycApiId = request.args.get("kycApiId","")
    if kycApiId:
        try:
            kyc_api_queryset = kycApis.objects(id=kycApiId,status__nin=[2]).first()
            existing_record = kyc_api_queryset.to_json()      
            
            if kyc_api_queryset:
                if kyc_api_queryset.status == 0:
                    kyc_api_queryset.update(status=1)
                    flash("Kyc API activated successfully!")
                    message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API activated successfully!"
                elif kyc_api_queryset.status == 1:
                    kyc_api_queryset.update(status=0)
                    flash("kyc API deactivated successfully!")
                    message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API deactivated successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_kyc_api_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
    else:
        return redirect(url_for("kyc_apis.kyc_apis_list"))
    # else:
    #     flash("Staff member does not have given update status api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))

# Delete kYC API
# @kyc_apis.route("/delete_kyc_api",methods=["GET"])
# def delete_kyc_api():
#     try:
#         existing_record=""
#         if not session.get("adminId"):
#             return redirect("admin_login")
#         adminId=session.get("adminId")
#         loginBrowser = request.headers.get("Sec-Ch-Ua")
#         userAgent=""
#         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)

#         requestData = [existing_record]
#         updatedrequestData = [jsonData]
#         if request.method == "GET":
#             kycApiId = request.args.get("kycApiId","")
#             kyc_api_queryset = kycApis.objects(id=kycApiId,status__in=[0,1]).first()
#             existing_record = kyc_api_queryset.to_json()
#             kyc_api_queryset.update(status=2)
#             flash("kyc API deleted successfully!")
#             message=kyc_api_queryset.adminId.userName+" "+kyc_api_queryset.apiName+" Kyc API deleted successfully!"
#             save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_kyc_api","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
#             return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         flash("Unable to delete kyc api!!")
#         return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="KycApis"))



@kyc_apis.route("/delete_kyc_api", methods=["POST"])
def delete_kyc_api():
    try:
        if not session.get("adminId"):
            return redirect(url_for("admin_login"))

        data = request.form.to_dict()
        print("🔹 Received Data:", data)  # Debugging: Log received data

        action = data.get("action", "").strip()

        # Step 1: Generate OTP
        if action == "generate":
            mail_type = data.get("mailType", "").strip()
            if not mail_type:
                return jsonify({"responseStatus": 0, "result": "mailType is required!"}), 400
            return jsonify(generate_otp_helper(mail_type))

        # Step 2: Verify OTP & Delete Record
        elif action == "verify":
            otp_check_id = data.get("otpCheckId", "").strip()
            otp_code = data.get("otpCode", "").strip()
            kycApiId = data.get("kycApiId", "").strip()

            print(f"🔹 Verifying OTP with otpCheckId: {otp_check_id}, otpCode: {otp_code}, kycApiId: {kycApiId}")

            if not otp_check_id or not otp_code or not kycApiId:
                return jsonify({"responseStatus": 0, "result": "Missing required fields!"})

            # Verify OTP
            otp_response = verify_otp_helper(otp_check_id, otp_code)
            if otp_response["responseStatus"] == 1:
                kyc_api_queryset = kycApis.objects(id=kycApiId, status__in=[0, 1]).first()
                
                if not kyc_api_queryset:
                    return jsonify({"responseStatus": 0, "result": "KYC API not found!"})

                kyc_api_queryset.delete()  #Hard delete
                return jsonify({"responseStatus": 1, "result": "KYC API deleted successfully!"})
            
            return jsonify(otp_response)

    except Exception as e:
        traceback.print_exc()
        return jsonify({"responseStatus": 0, "result": f"Error: {str(e)}"})


############## ASSIGN kyc ##############

def fetching_assign_kyc_details(assign_kyc_queryset):
    assign_kyc_dict = {}
    try:
        assign_kyc_dict={
        "id":str(assign_kyc_queryset.id),
        "kycApiId":str(assign_kyc_queryset.kycApiId.id),
        "apiName":assign_kyc_queryset.kycApiId.apiName,
        # "documentNameList":assign_kyc_queryset.documentNameList,
        }
        if assign_kyc_queryset.documentNameList:
            assign_kyc_dict["documentNameList"]=[str(each_documentname) for each_documentname in assign_kyc_queryset.documentNameList]
            assign_kyc_dict["documentName"] = ', '.join(assign_kyc_dict["documentNameList"])
        else:
            assign_kyc_dict["documentNameList"]=[]
            


        if assign_kyc_queryset.status==1:
            assign_kyc_dict["actionText"] = "Active"
        else:
            assign_kyc_dict["actionText"] = "Deactive"

        if assign_kyc_queryset.createdOn:
            assign_kyc_dict["createdOn"] = assign_kyc_queryset.createdOn.strftime("%m-%d-%Y")
        else:
            assign_kyc_dict["createdOn"] = ""

    except Exception as e:
        app.logger.error(traceback.format_exc())
    return assign_kyc_dict


@kyc_apis.route("/add_assign_kyc_api",methods=["POST","GET"])

def add_assign_kyc_api():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        userAgent=""
        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()
        
        if request.method == "POST":
            kycApiId = request.form.get("kycApiId","")
            documentNameList = request.form.getlist("documentNameList")

            jsonData = request.form.to_dict(flat=True)
            requestData = [jsonData]
            updatedrequestData = [jsonData]

            if kycApiId:
                try:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if admin_queryset:
                        message=admin_queryset.userName+" Assign Kyc created successfully!"
                        save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_assign_kyc_api","create",actionDate,client_ip,browser,message,requestData,updatedrequestData) 
                    assign_kyc_table = AssignKyc(
                        adminId = adminId,
                        kycApiId = ObjectId(kycApiId),
                        documentNameList = documentNameList,
                        createdOn = datetime.datetime.now(),
                        status = 1,
                        )
                    save_table = assign_kyc_table.save()
                    AssignKycId = str(save_table.id)
                    # if isActive == None:
                    #     save_table.update(isActive=False)
                    # else:
                    #     save_table.update(isActive=True)

                    flash(" Assign Kyc added successfully!")
                    return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))

                except Exception as e:
                    flash("Unable to save  Assign Kyc!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))

                except Exception as e:
                    flash("Unable to save  Assign Kyc!!")
                    app.logger.error(traceback.format_exc())
                    return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
            else:
                flash("Required fields are missing!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
        else:
                flash("Required fields are missing!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to save  Assign Kyc!!"
        return render_template("super_admin_templates/kyc_apis_list.html",error=error)


# Update transaction api
@kyc_apis.route("/update_assign_kyc",methods=["POST","GET"])

def update_assign_kyc():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")    
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    userAgent=""
    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()
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    try:
        AssignKycId = request.args.get("AssignKycId","")
        if request.method == "POST":
            # kycApiId = request.form.get("kycApiId","")
            documentNameList = request.form.getlist("documentNameList")
            jsonData = request.form.to_dict(flat=True)


            assign_kycs_queryset = AssignKyc.objects(id=AssignKycId,status__nin=[2]).first()
            existing_record = assign_kycs_queryset.to_json()

            message=assign_kycs_queryset.adminId.userName+" Assign KYC updated successfully!"
            requestData=[existing_record]
            updatedrequestData=[jsonData]
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_kyc","update",actionDate,client_ip,browser,message,requestData,updatedrequestData) 
            if assign_kycs_queryset:
                assign_kycs_queryset.update(
                    # documentNameList = documentNameList,
                    documentNameList=[str(each_documentname) for each_documentname in documentNameList]
                    )

                flash("Assign KYC updated successfully!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update Assign Kyc!!"
        return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
    # else:
    #     flash("Staff member does not have given update api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))




# Update transaction api status
@kyc_apis.route("/update_assign_kyc_status",methods=["POST","GET"])
def update_assign_kyc_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    userAgent=""
    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]
    # permissionsList = check_permissions(session.get("adminId"),"apiGatewaysPermissions")
    # if "edit" in permissionsList:
    AssignKycId = request.args.get("AssignKycId","")
    if AssignKycId:
        try:
            assign_kyc_queryset = AssignKyc.objects(id=AssignKycId,status__nin=[2]).first()
            existing_record = assign_kyc_queryset.to_json()
            requestData = [existing_record]
            if assign_kyc_queryset:
                if assign_kyc_queryset.status == 0:
                    assign_kyc_queryset.update(status=1)
                    flash(" Assign Kyc activated successfully!")
                    message=assign_kyc_queryset.adminId.userName+" Assign Kyc activated successfully!"
                elif assign_kyc_queryset.status == 1:
                    assign_kyc_queryset.update(status=0)
                    flash("Assign Kyc deactivated successfully!")
                    message=assign_kyc_queryset.adminId.userName+" Assign Kyc deactivated successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_assign_kyc_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
            else:
                flash("Invaild id!!")
                return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
        except Exception as e:
            app.logger.error(traceback.format_exc())
            return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
    else:
        return redirect(url_for("kyc_apis.kyc_apis_list"))
    # else:
    #     flash("Staff member does not have given update status api permissions!!")
    #     return redirect(url_for("api_master.api_masters_list",redirectTo="Transaction"))

# Delete Transaction API
@kyc_apis.route("/delete_assign_kyc",methods=["GET"])
def delete_assign_kyc():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        userAgent=""
        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]
        if request.method == "GET":
            AssignKycId = request.args.get("AssignKycId","")
            assign_kyc_queryset = AssignKyc.objects(id=AssignKycId,status__in=[0,1]).first()
            existing_record = assign_kyc_queryset.to_json()
            requestData = [existing_record]
            assign_kyc_queryset.update(status=2)
            flash("Assign Kyc deleted successfully!")
            message=assign_kyc_queryset.adminId.userName+" Assign Kyc deleted successfully!"
            save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_assign_kyc","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
            return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))
    except Exception as e:
        app.logger.error(traceback.format_exc())
        flash("Unable to delete Assign Kyc!!")
        return redirect(url_for("kyc_apis.kyc_apis_list",redirectTo="AssignKyc"))





