from appservices.common.util import *

admin_roles = Blueprint("admin_roles",__name__)

# Add role
@admin_roles.route("/add_role",methods=["POST","GET"])
def add_role():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId = session.get("adminId")

        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = userAgent.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()
        role_permissions = fetch_staff_permissions(session.get("adminId"))
        if request.method == "GET":
            # return render_template("super_admin_templates/add_role.html")
            return render_template("super_admin_templates/add_role.html",role_permissions=role_permissions)
        if request.method == "POST":
            roleName = request.form.get("roleName","")
            bankPermissions = request.form.getlist("bankPermissions")
            paymentMasterPermissions = request.form.getlist("paymentMasterPermissions")
            subpaymentmodePermissions = request.form.getlist("subpaymentmodePermissions")
            merchantCategoriesPermissions = request.form.getlist("merchantCategoriesPermissions")
            merchantSubCategoriesPermissions = request.form.getlist("merchantSubCategoriesPermissions")
            networksPermissions = request.form.getlist("networksPermissions")
            bankBinsPermissions = request.form.getlist("bankBinsPermissions")
            patternPermissions = request.form.getlist("patternPermissions")
            chargeCommissionsPermissions = request.form.getlist("chargeCommissionsPermissions")
            userManagementPermissions = request.form.getlist("userManagementPermissions")
            pendingKYCUsersPermissions = request.form.getlist("pendingKYCUsersPermissions")
            affiliatesPermissions = request.form.getlist("affiliatesPermissions")
            blockedMerchantPermissions = request.form.getlist("blockedMerchantPermissions")
            subAdminPermissions = request.form.getlist("subAdminPermissions")
            subAdminRightsPermissions = request.form.getlist("subAdminRightsPermissions")
            apiGatewaysPermissions = request.form.getlist("apiGatewaysPermissions")
            virtualAccountPermissions = request.form.getlist("virtualAccountPermissions")
            whitelistPendingPermissions = request.form.getlist("whitelistPendingPermissions")
            whitelistAccountHistoryPermissions = request.form.getlist("whitelistAccountHistoryPermissions")
            refundReportPermissions = request.form.getlist("refundReportPermissions")
            pendingTransactionPermissions = request.form.getlist("pendingTransactionPermissions")
            updateTransactionPermissions = request.form.getlist("updateTransactionPermissions")
            bankHolidaysPermissions = request.form.getlist("bankHolidaysPermissions")
            kycEntityTypesPermissions = request.form.getlist("kycEntityTypesPermissions")
            allTransactionsPermissions = request.form.getlist("allTransactionsPermissions")
            successTransactionsPermissions = request.form.getlist("successTransactionsPermissions")
            pendingTransactionsPermissions = request.form.getlist("pendingTransactionsPermissions")
            fundSourcesPermissions = request.form.getlist("fundSourcesPermissions")
            transactionRouterPermissions = request.form.getlist("transactionRouterPermissions")
            velocityRuleEnginePermissions = request.form.getlist("velocityRuleEnginePermissions")
            paymentLinkPermissions = request.form.getlist("paymentLinkPermissions")
            paymentButtonPermissions = request.form.getlist("paymentButtonPermissions")
            paymentPagePermissions = request.form.getlist("paymentPagePermissions")
            payinSettlementPermissions = request.form.getlist("payinSettlementPermissions")
            payoutSettlementPermissions = request.form.getlist("payoutSettlementPermissions")
            creditDebitSettlementPermissions = request.form.getlist("creditDebitSettlementPermissions")
            payoutTransactionReportPermissions = request.form.getlist("payoutTransactionReportPermissions")
            payinTransactionReportPermissions = request.form.getlist("payinTransactionReportPermissions")
            reconcilationTransactionReportPermissions = request.form.getlist("reconcilationTransactionReportPermissions")
            downloadPgReportPermissions = request.form.getlist("downloadPgReportPermissions")
            payoutLedgerReportPermissions = request.form.getlist("payoutLedgerReportPermissions")
            payinLedgerReportPermissions = request.form.getlist("payinLedgerReportPermissions")
            autocollectLedgerReportPermissions = request.form.getlist("autocollectLedgerReportPermissions")
            masterDisputesPermissions = request.form.getlist("masterDisputesPermissions")
            creditToWalletPermissions = request.form.getlist("creditToWalletPermissions")
            debitFromWalletPermissions = request.form.getlist("debitFromWalletPermissions")
            virtualAdminBalancePermissions = request.form.getlist("virtualAdminBalancePermissions")
            smslogsPermissions = request.form.getlist("smslogsPermissions")
            merchantLogsPermissions = request.form.getlist("merchantLogsPermissions")
            adminOtpLogsPermissions = request.form.getlist("adminOtpLogsPermissions")
            apiLogsPermissions = request.form.getlist("apiLogsPermissions")
            clientPermissions = request.form.getlist("clientPermissions")
            adminLogsPermissions = request.form.getlist("adminLogsPermissions")
            categoriesPermissions = request.form.getlist("categoriesPermissions")
            servicesPermissions = request.form.getlist("servicesPermissions")
            subservicesPermissions = request.form.getlist("subservicesPermissions")
            operatorPermissions = request.form.getlist("operatorPermissions")
            operatorupdatePermissions = request.form.getlist("operatorupdatePermissions")
            operatorparameterPermissions = request.form.getlist("operatorparameterPermissions")
            operatorgroupingPermissions = request.form.getlist("operatorgroupingPermissions")
            subparameterPermissions = request.form.getlist("subparameterPermissions")
            subparametergroupingPermissions = request.form.getlist("subparametergroupingPermissions")
            taxmasterPermissions = request.form.getlist("taxmasterPermissions")
            userCommissionsListPermissions = request.form.getlist("userCommissionsListPermissions")
            documentsPermissions = request.form.getlist("documentsPermissions")
            staffPermissions = request.form.getlist("staffPermissions")
            rolePermissions = request.form.getlist("rolePermissions")
            bannersPermissions = request.form.getlist("bannersPermissions")
            businessDocumentsPermissions = request.form.getlist("businessDocumentsPermissions")
            commissionReportsPermissions = request.form.getlist("commissionReportsPermissions")
            payinTransactionsPermissions = request.form.getlist("payinTransactionsPermissions")
            payinsuccessTransactionsPermissions = request.form.getlist("payinsuccessTransactionsPermissions")
            payinpendingTransactionsPermissions = request.form.getlist("payinpendingTransactionsPermissions")
            payinInitiatedTransactionsPermissions = request.form.getlist("payinInitiatedTransactionsPermissions")
            autoCollectTransactionReportPermissions = request.form.getlist("autoCollectTransactionReportPermissions")
            thirdPartyIntegrationPermissions = request.form.getlist("thirdPartyIntegrationPermissions")
            jsonData = request.form.to_dict(flat=True)
            existing_record = ""
            requestData = [jsonData]
            updatedrequestData = []
            if roleName:
                check_unique = Roles.objects(roleName__iexact=roleName,status=1).first()
                if check_unique:
                    flash("Role name already in use!")
                    return redirect("view_all_roles")
                admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                if admin_queryset:
                    message=admin_queryset.userName+" "+roleName+" Role created successfully!"
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_role","create",actionDate,client_ip,browser,message,requestData,updatedrequestData) 
                role_table = Roles(
                    roleName=roleName,
                    bankPermissions=bankPermissions,
                    paymentMasterPermissions=paymentMasterPermissions,
                    subpaymentmodePermissions=subpaymentmodePermissions,
                    merchantCategoriesPermissions=merchantCategoriesPermissions,
                    merchantSubCategoriesPermissions=merchantSubCategoriesPermissions,
                    networksPermissions=networksPermissions,
                    bankBinsPermissions=bankBinsPermissions,
                    patternPermissions=patternPermissions,
                    chargeCommissionsPermissions=chargeCommissionsPermissions,
                    userManagementPermissions=userManagementPermissions,
                    pendingKYCUsersPermissions=pendingKYCUsersPermissions,
                    affiliatesPermissions=affiliatesPermissions,
                    blockedMerchantPermissions=blockedMerchantPermissions,
                    subAdminPermissions=subAdminPermissions,
                    subAdminRightsPermissions=subAdminRightsPermissions,
                    apiGatewaysPermissions=apiGatewaysPermissions,
                    virtualAccountPermissions=virtualAccountPermissions,
                    whitelistPendingPermissions=whitelistPendingPermissions,
                    whitelistAccountHistoryPermissions=whitelistAccountHistoryPermissions,
                    refundReportPermissions=refundReportPermissions,
                    pendingTransactionPermissions=pendingTransactionPermissions,
                    updateTransactionPermissions=updateTransactionPermissions,
                    bankHolidaysPermissions=bankHolidaysPermissions,
                    kycEntityTypesPermissions=kycEntityTypesPermissions,
                    allTransactionsPermissions=allTransactionsPermissions,
                    successTransactionsPermissions=successTransactionsPermissions,
                    pendingTransactionsPermissions=pendingTransactionsPermissions,
                    fundSourcesPermissions=fundSourcesPermissions,
                    velocityRuleEnginePermissions=velocityRuleEnginePermissions,
                    transactionRouterPermissions=transactionRouterPermissions,
                    paymentLinkPermissions=paymentLinkPermissions,
                    paymentButtonPermissions=paymentButtonPermissions,
                    paymentPagePermissions=paymentPagePermissions,
                    payinSettlementPermissions=payinSettlementPermissions,
                    payoutSettlementPermissions=payoutSettlementPermissions,
                    creditDebitSettlementPermissions=creditDebitSettlementPermissions,
                    payoutTransactionReportPermissions=payoutTransactionReportPermissions,
                    payinTransactionReportPermissions=payinTransactionReportPermissions,
                    reconcilationTransactionReportPermissions=reconcilationTransactionReportPermissions,
                    downloadPgReportPermissions=downloadPgReportPermissions,
                    payoutLedgerReportPermissions=payoutLedgerReportPermissions,
                    payinLedgerReportPermissions=payinLedgerReportPermissions,
                    autocollectLedgerReportPermissions=autocollectLedgerReportPermissions,
                    masterDisputesPermissions=masterDisputesPermissions,
                    creditToWalletPermissions=creditToWalletPermissions,
                    debitFromWalletPermissions=debitFromWalletPermissions,
                    virtualAdminBalancePermissions=virtualAdminBalancePermissions,
                    smslogsPermissions=smslogsPermissions,
                    merchantLogsPermissions=merchantLogsPermissions,
                    adminOtpLogsPermissions=adminOtpLogsPermissions,
                    apiLogsPermissions=apiLogsPermissions,
                    clientPermissions=clientPermissions,
                    adminLogsPermissions=adminLogsPermissions,
                    categoriesPermissions=categoriesPermissions,
                    servicesPermissions=servicesPermissions,
                    subservicesPermissions=subservicesPermissions,
                    operatorPermissions=operatorPermissions,
                    operatorupdatePermissions=operatorupdatePermissions,
                    operatorparameterPermissions=operatorparameterPermissions,
                    operatorgroupingPermissions=operatorgroupingPermissions,
                    subparameterPermissions=subparameterPermissions,
                    subparametergroupingPermissions=subparametergroupingPermissions,
                    taxmasterPermissions=taxmasterPermissions,
                    userCommissionsListPermissions=userCommissionsListPermissions,
                    documentsPermissions=documentsPermissions,
                    staffPermissions=staffPermissions,
                    rolePermissions=rolePermissions,
                    bannersPermissions=bannersPermissions,
                    businessDocumentsPermissions=businessDocumentsPermissions,
                    commissionReportsPermissions=commissionReportsPermissions,
                    payinTransactionsPermissions=payinTransactionsPermissions,
                    payinsuccessTransactionsPermissions=payinsuccessTransactionsPermissions,
                    payinpendingTransactionsPermissions=payinpendingTransactionsPermissions,
                    payinInitiatedTransactionsPermissions=payinInitiatedTransactionsPermissions,
                    autoCollectTransactionReportPermissions=autoCollectTransactionReportPermissions,
                    thirdPartyIntegrationPermissions=thirdPartyIntegrationPermissions,
                    createdOn=datetime.datetime.now(),
                    status=1
                    )
                save_role_table = role_table.save()
                flash("Role added successfully!")
                return redirect("view_all_roles")
            else:
                flash("Required fields are missing!!")
                return redirect("view_all_roles")
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to add role!!"
        return render_template("super_admin_templates/add_role.html",error=error)

# View all roles
@admin_roles.route("/view_all_roles",methods=["POST","GET"])
def view_all_roles():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId = session.get("adminId")
    rolesList=[]
    permissionsList = check_permissions(session.get("adminId"),"rolePermissions")
    print(permissionsList,"((((((((permissionsList))))))))")
    # if "view" in permissionsList:
    try:
        search = False  
        search_element = request.args.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,20)

        role_permissions = fetch_staff_permissions(session.get("adminId"))
        roles_queryset=Roles.objects(status__in=[0,1]).order_by("-id").all()

        if search_element:
            roles_queryset = roles_queryset.filter(roleName__icontains=search_element)

        length = roles_queryset.count()
        roles_queryset=roles_queryset[page_start:page_end].order_by("-id")

        for each_role in roles_queryset:
            role_dict = fetching_role_details(each_role)
            rolesList.append(role_dict)

        pagination = Pagination(
            page=page, 
            total=length, 
            found=length,
            # search=search,
            record_name='roles',
            per_page=20,
            alignment="right"
            )

        # return render_template("super_admin_templates/roles_list.html",rolesList=rolesList)
        return render_template("super_admin_templates/roles_list.html",
            rolesList=rolesList,
            role_permissions = role_permissions,
            pagination=pagination,
            search_element = search_element
            )
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error="Unable to fetch roles list!"
        return render_template("super_admin_templates/roles_list.html",error=error)
    # else:
    #     flash("Staff member does not have given view role permissions!!")
    #     return redirect(url_for("admin.dashboard"))

# Single view role
@admin_roles.route("/single_view_role",methods=["POST","GET"])
def single_view_role():
    if not session.get("adminId"):
        return redirect("admin_login")
    try:
        role_permissions = fetch_staff_permissions(session.get("adminId"))
        roleId = request.args.get("roleId","")
        role_queryset = Roles.objects(id=roleId,status__in=[1,0]).first()
        role_dict = fetching_role_details(role_queryset)
        return render_template("super_admin_templates/single_view_role.html",role_dict=role_dict,role_permissions=role_permissions)
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to fetch role details!!"
        return render_template("super_admin_templates/single_view_role.html",error=error)

# Role status update
@admin_roles.route("/role_update_status",methods=["GET"])
def role_update_status():
    if not session.get("adminId"):
        return redirect("admin_login")
    adminId=session.get("adminId")
    loginBrowser = request.headers.get("Sec-Ch-Ua")
    if loginBrowser:
        loginBrowseData = loginBrowser.split(";")
        browser = loginBrowseData[0]
    else:
        loginBrowseData = userAgent.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"),"rolePermissions")
    if "edit" in permissionsList:
        roleId=request.args.get("roleId","")
        if roleId:
            try:
                role_queryset = Roles.objects(id__iexact=roleId,status__nin=[2]).first()
                existing_record = role_queryset.to_json()
                requestData = [existing_record]
                if role_queryset:
                    admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                    if role_queryset.status == 0:
                        role_queryset.update(status=1)
                        flash('Role activated successfully!')
                        message=admin_queryset.userName+" "+role_queryset.roleName+" Role activated successfully!"
                    else:
                        role_queryset.update(status=0)
                        flash('Role deactivated successfully!')
                        message=admin_queryset.userName+" "+role_queryset.roleName+" Role deactivated successfully!"
                    save_admin_log_table = save_admin_logs_data(adminId,None,None,"role_update_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                    return redirect("view_all_roles")
                else:
                    return redirect("view_all_roles")
            except Exception as e:
                app.logger.error(traceback.format_exc())
                return redirect("view_all_roles")
        else:
            return redirect("view_all_roles")
    else:
        flash("Staff member does not have given update role status permissions!!")
        return redirect("view_all_roles")

# Update role
@admin_roles.route("/update_role",methods=["POST","GET"])
def update_role():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")    
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = userAgent.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()
        role_permissions = fetch_staff_permissions(session.get("adminId"))
        permissionsList = check_permissions(session.get("adminId"),"rolePermissions")
        # if "edit" in permissionsList:
        if request.method == "GET":
            rolesList =[]
            roleId = request.args.get("roleId")
            role_queryset = Roles.objects(id=roleId).first()
            role_dict = fetching_role_details(role_queryset)
            return render_template("super_admin_templates/update_role.html",role_dict = role_dict,role_permissions=role_permissions)
        elif request.method == "POST":
                roleId = request.form.get("roleId","")
                roleName = request.form.get("roleName","")
                bankPermissions = request.form.getlist("bankPermissions")
                paymentMasterPermissions = request.form.getlist("paymentMasterPermissions")
                subpaymentmodePermissions = request.form.getlist("subpaymentmodePermissions")
                merchantCategoriesPermissions = request.form.getlist("merchantCategoriesPermissions")
                merchantSubCategoriesPermissions = request.form.getlist("merchantSubCategoriesPermissions")
                networksPermissions = request.form.getlist("networksPermissions")
                bankBinsPermissions = request.form.getlist("bankBinsPermissions")
                patternPermissions = request.form.getlist("patternPermissions")
                chargeCommissionsPermissions = request.form.getlist("chargeCommissionsPermissions")
                userManagementPermissions = request.form.getlist("userManagementPermissions")
                pendingKYCUsersPermissions = request.form.getlist("pendingKYCUsersPermissions")
                affiliatesPermissions = request.form.getlist("affiliatesPermissions")
                blockedMerchantPermissions = request.form.getlist("blockedMerchantPermissions")
                subAdminPermissions = request.form.getlist("subAdminPermissions")
                subAdminRightsPermissions = request.form.getlist("subAdminRightsPermissions")
                apiGatewaysPermissions = request.form.getlist("apiGatewaysPermissions")
                virtualAccountPermissions = request.form.getlist("virtualAccountPermissions")
                whitelistPendingPermissions = request.form.getlist("whitelistPendingPermissions")
                whitelistAccountHistoryPermissions = request.form.getlist("whitelistAccountHistoryPermissions")
                refundReportPermissions = request.form.getlist("refundReportPermissions")
                pendingTransactionPermissions = request.form.getlist("pendingTransactionPermissions")
                updateTransactionPermissions = request.form.getlist("updateTransactionPermissions")
                bankHolidaysPermissions = request.form.getlist("bankHolidaysPermissions")
                kycEntityTypesPermissions = request.form.getlist("kycEntityTypesPermissions")
                allTransactionsPermissions = request.form.getlist("allTransactionsPermissions")
                successTransactionsPermissions = request.form.getlist("successTransactionsPermissions")
                pendingTransactionsPermissions = request.form.getlist("pendingTransactionsPermissions")
                fundSourcesPermissions = request.form.getlist("fundSourcesPermissions")
                transactionRouterPermissions = request.form.getlist("transactionRouterPermissions")
                velocityRuleEnginePermissions = request.form.getlist("velocityRuleEnginePermissions")
                paymentLinkPermissions = request.form.getlist("paymentLinkPermissions")
                paymentButtonPermissions = request.form.getlist("paymentButtonPermissions")
                paymentPagePermissions = request.form.getlist("paymentPagePermissions")
                payinSettlementPermissions = request.form.getlist("payinSettlementPermissions")
                payoutSettlementPermissions = request.form.getlist("payoutSettlementPermissions")
                creditDebitSettlementPermissions = request.form.getlist("creditDebitSettlementPermissions")
                payoutTransactionReportPermissions = request.form.getlist("payoutTransactionReportPermissions")
                payinTransactionReportPermissions = request.form.getlist("payinTransactionReportPermissions")
                reconcilationTransactionReportPermissions = request.form.getlist("reconcilationTransactionReportPermissions")
                downloadPgReportPermissions = request.form.getlist("downloadPgReportPermissions")
                payoutLedgerReportPermissions = request.form.getlist("payoutLedgerReportPermissions")
                payinLedgerReportPermissions = request.form.getlist("payinLedgerReportPermissions")
                autocollectLedgerReportPermissions = request.form.getlist("autocollectLedgerReportPermissions")
                masterDisputesPermissions = request.form.getlist("masterDisputesPermissions")
                creditToWalletPermissions = request.form.getlist("creditToWalletPermissions")
                debitFromWalletPermissions = request.form.getlist("debitFromWalletPermissions")
                virtualAdminBalancePermissions = request.form.getlist("virtualAdminBalancePermissions")
                smslogsPermissions = request.form.getlist("smslogsPermissions")
                merchantLogsPermissions = request.form.getlist("merchantLogsPermissions")
                adminOtpLogsPermissions = request.form.getlist("adminOtpLogsPermissions")
                apiLogsPermissions = request.form.getlist("apiLogsPermissions")
                clientPermissions = request.form.getlist("clientPermissions")
                adminLogsPermissions = request.form.getlist("adminLogsPermissions")
                categoriesPermissions = request.form.getlist("categoriesPermissions")
                servicesPermissions = request.form.getlist("servicesPermissions")
                subservicesPermissions = request.form.getlist("subservicesPermissions")
                operatorPermissions = request.form.getlist("operatorPermissions")
                operatorupdatePermissions = request.form.getlist("operatorupdatePermissions")
                operatorparameterPermissions = request.form.getlist("operatorparameterPermissions")
                operatorgroupingPermissions = request.form.getlist("operatorgroupingPermissions")
                subparameterPermissions = request.form.getlist("subparameterPermissions")
                subparametergroupingPermissions = request.form.getlist("subparametergroupingPermissions")
                taxmasterPermissions = request.form.getlist("taxmasterPermissions")
                userCommissionsListPermissions = request.form.getlist("userCommissionsListPermissions")
                documentsPermissions = request.form.getlist("documentsPermissions")
                staffPermissions = request.form.getlist("staffPermissions")
                rolePermissions = request.form.getlist("rolePermissions")
                bannersPermissions = request.form.getlist("bannersPermissions")
                businessDocumentsPermissions = request.form.getlist("businessDocumentsPermissions")
                commissionReportsPermissions = request.form.getlist("commissionReportsPermissions")
                payinTransactionsPermissions = request.form.getlist("payinTransactionsPermissions")
                payinsuccessTransactionsPermissions = request.form.getlist("payinsuccessTransactionsPermissions")
                payinpendingTransactionsPermissions = request.form.getlist("payinpendingTransactionsPermissions")
                payinInitiatedTransactionsPermissions = request.form.getlist("payinInitiatedTransactionsPermissions")
                autoCollectTransactionReportPermissions = request.form.getlist("autoCollectTransactionReportPermissions")
                thirdPartyIntegrationPermissions = request.form.getlist("thirdPartyIntegrationPermissions")

                jsonData = request.form.to_dict(flat=True)

                role_queryset = Roles.objects(id=roleId).first()
                existing_record = role_queryset.to_json()

                admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()

                message=admin_queryset.userName+" "+roleName+" Role updated successfully!"
                requestData=[existing_record]
                updatedrequestData=[jsonData]
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_role","update",actionDate,client_ip,browser,message,requestData,updatedrequestData) 

                role_queryset.update(
                    roleName=roleName,
                    bankPermissions=bankPermissions,
                    paymentMasterPermissions=paymentMasterPermissions,
                    subpaymentmodePermissions=subpaymentmodePermissions,
                    merchantCategoriesPermissions=merchantCategoriesPermissions,
                    merchantSubCategoriesPermissions=merchantSubCategoriesPermissions,
                    networksPermissions=networksPermissions,
                    bankBinsPermissions=bankBinsPermissions,
                    patternPermissions=patternPermissions,
                    chargeCommissionsPermissions=chargeCommissionsPermissions,
                    userManagementPermissions=userManagementPermissions,
                    pendingKYCUsersPermissions=pendingKYCUsersPermissions,
                    affiliatesPermissions=affiliatesPermissions,
                    blockedMerchantPermissions=blockedMerchantPermissions,
                    subAdminPermissions=subAdminPermissions,
                    subAdminRightsPermissions=subAdminRightsPermissions,
                    apiGatewaysPermissions=apiGatewaysPermissions,
                    virtualAccountPermissions=virtualAccountPermissions,
                    whitelistPendingPermissions=whitelistPendingPermissions,
                    whitelistAccountHistoryPermissions=whitelistAccountHistoryPermissions,
                    refundReportPermissions=refundReportPermissions,
                    pendingTransactionPermissions=pendingTransactionPermissions,
                    updateTransactionPermissions=updateTransactionPermissions,
                    bankHolidaysPermissions=bankHolidaysPermissions,
                    kycEntityTypesPermissions=kycEntityTypesPermissions,
                    allTransactionsPermissions=allTransactionsPermissions,
                    successTransactionsPermissions=successTransactionsPermissions,
                    pendingTransactionsPermissions=pendingTransactionsPermissions,
                    transactionRouterPermissions=transactionRouterPermissions,
                    velocityRuleEnginePermissions=velocityRuleEnginePermissions,
                    paymentLinkPermissions=paymentLinkPermissions,
                    paymentButtonPermissions=paymentButtonPermissions,
                    paymentPagePermissions=paymentPagePermissions,
                    fundSourcesPermissions=fundSourcesPermissions,
                    payinSettlementPermissions=payinSettlementPermissions,
                    payoutSettlementPermissions=payoutSettlementPermissions,
                    creditDebitSettlementPermissions=creditDebitSettlementPermissions,
                    payoutTransactionReportPermissions=payoutTransactionReportPermissions,
                    payinTransactionReportPermissions=payinTransactionReportPermissions,
                    reconcilationTransactionReportPermissions=reconcilationTransactionReportPermissions,
                    downloadPgReportPermissions=downloadPgReportPermissions,
                    payoutLedgerReportPermissions=payoutLedgerReportPermissions,
                    payinLedgerReportPermissions=payinLedgerReportPermissions,
                    autocollectLedgerReportPermissions=autocollectLedgerReportPermissions,
                    masterDisputesPermissions=masterDisputesPermissions,
                    creditToWalletPermissions=creditToWalletPermissions,
                    debitFromWalletPermissions=debitFromWalletPermissions,
                    virtualAdminBalancePermissions=virtualAdminBalancePermissions,
                    smslogsPermissions=smslogsPermissions,
                    merchantLogsPermissions=merchantLogsPermissions,
                    adminOtpLogsPermissions=adminOtpLogsPermissions,
                    apiLogsPermissions=apiLogsPermissions,
                    clientPermissions=clientPermissions,
                    adminLogsPermissions=adminLogsPermissions,
                    categoriesPermissions=categoriesPermissions,
                    servicesPermissions=servicesPermissions,
                    subservicesPermissions=subservicesPermissions,
                    operatorPermissions=operatorPermissions,
                    operatorupdatePermissions=operatorupdatePermissions,
                    operatorparameterPermissions=operatorparameterPermissions,
                    operatorgroupingPermissions=operatorgroupingPermissions,
                    subparameterPermissions=subparameterPermissions,
                    subparametergroupingPermissions=subparametergroupingPermissions,
                    taxmasterPermissions=taxmasterPermissions,
                    userCommissionsListPermissions=userCommissionsListPermissions,
                    documentsPermissions=documentsPermissions,
                    staffPermissions=staffPermissions,
                    rolePermissions=rolePermissions,
                    bannersPermissions=bannersPermissions,
                    businessDocumentsPermissions=businessDocumentsPermissions,
                    commissionReportsPermissions=commissionReportsPermissions,
                    payinTransactionsPermissions=payinTransactionsPermissions,
                    payinsuccessTransactionsPermissions=payinsuccessTransactionsPermissions,
                    payinpendingTransactionsPermissions=payinpendingTransactionsPermissions,
                    payinInitiatedTransactionsPermissions=payinInitiatedTransactionsPermissions,
                    autoCollectTransactionReportPermissions=autoCollectTransactionReportPermissions,
                    thirdPartyIntegrationPermissions=thirdPartyIntegrationPermissions,
                    )
                flash('Role updated successfully!')
                return redirect("view_all_roles")
        # else:
        #     flash("Staff member does not have given update role permissions!!")
        #     return redirect("view_all_roles")
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to update role!!"
        return redirect("view_all_roles")

# Delete role
@admin_roles.route("/delete_role",methods=["GET"])
def delete_role():
    try:
        if not session.get("adminId"):
            return redirect("admin_login")
        adminId=session.get("adminId")
        loginBrowser = request.headers.get("Sec-Ch-Ua")
        if loginBrowser:
            loginBrowseData = loginBrowser.split(";")
            browser = loginBrowseData[0]
        else:
            loginBrowseData = userAgent.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"),"rolePermissions")
        if "delete" in permissionsList:
            if request.method == "GET":
                roleId = request.args.get("roleId")
                role_queryset = Roles.objects(id=roleId).first()
                existing_record = role_queryset.to_json()
                requestData = [existing_record]
                role_queryset.update(status=2)
                flash('Role deleted successfully!')
                admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
                message=admin_queryset.userName+" "+role_queryset.roleName+" Role deleted successfully!"
                save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_role","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData)
                return redirect("view_all_roles")
        else:
            flash("Staff member does not have given delete role permissions!!")
            return redirect("view_all_roles")
    except Exception as e:
        app.logger.error(traceback.format_exc())
        error = "Unable to delete role!!"
        flash("Unable to delete role!!")
        return redirect("view_all_roles") 