from appservices.common.util import *
from appservices.common.form_schemas import *
admin_roles = Blueprint("admin_roles",__name__)



# Add role
@admin_roles.route("/add_role",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def add_role():
	data_status={"responseStatus":0,"result":""}
	try:
		if not session.get("adminId"):
			flash("session expired.Please login again.")
			data_status["responseStatus"]=4
			return data_status
		   
		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]

		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"), "rolesPermissions")
		form = AdminRoleForm()
		if "add" in permissionsList:

			role_permissions = fetch_staff_permissions(session.get("adminId"))
			if request.method == "GET":
				print("((((((((((((((((((((((((((((hiiiiiiiiiiiiiiiiiiiiiiiiii))))))))))))))))))))))))))))")
				# 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":
				if form.validate_on_submit():
					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")
					serviceChargePermissions = request.form.getlist("serviceChargePermissions")
					userPermissionsList = request.form.getlist("userPermissionsList")
					assignvirtualAccountPermissions = request.form.getlist("assignvirtualAccountPermissions")
					assignThirdpartyvirtualAccountPermissions = request.form.getlist("assignThirdpartyvirtualAccountPermissions")
					beneficiariesListPermissions = request.form.getlist("beneficiariesListPermissions")
					autoBeneficiariesListPermissions = request.form.getlist("autoBeneficiariesListPermissions")
					invalidBeneficiariesListPermissions = request.form.getlist("invalidBeneficiariesListPermissions")
					txnLimitSettingsPermissions = request.form.getlist("txnLimitSettingsPermissions")
					invoiceCompanyDetailsPermissions = request.form.getlist("invoiceCompanyDetailsPermissions")
					utilityTransactionReportPermissions = request.form.getlist("utilityTransactionReportPermissions")
					accountSummaryPermissions = request.form.getlist("accountSummaryPermissions")
					downlineListPermissions = request.form.getlist("downlineListPermissions")
					balanceReportPermissions = request.form.getlist("balanceReportPermissions")
					cummulativeReportPermissions = request.form.getlist("cummulativeReportPermissions")
					operatorIncomeReportPermissions = request.form.getlist("operatorIncomeReportPermissions")
					chargeBacksReportPermissions = request.form.getlist("chargeBacksReportPermissions")
					downloadpayoutReportPermissions = request.form.getlist("downloadpayoutReportPermissions")
					autoCollectReportPermissions = request.form.getlist("autoCollectReportPermissions")
					gstAndTdsReportPermissions = request.form.getlist("gstAndTdsReportPermissions")
					apiDocumentGuidePermissions = request.form.getlist("apiDocumentGuidePermissions")
					goldApiManagementPermissions = request.form.getlist("goldApiManagementPermissions")
					goldApiTransactionPermissions = request.form.getlist("goldApiTransactionPermissions")
					productsPermissions = request.form.getlist("productsPermissions")
					multipleAppSitesPermissions = request.form.getlist("multipleAppSitesPermissions")
					contactSetupPermissions = request.form.getlist("contactSetupPermissions")
					ticketCategoryPermissions = request.form.getlist("ticketCategoryPermissions")
					ticketSubCategoryPermissions = request.form.getlist("ticketSubCategoryPermissions")
					ticketChildCategoryPermissions = request.form.getlist("ticketChildCategoryPermissions")
					complaintListPermissions = request.form.getlist("complaintListPermissions")
					payinAvailableTimePermissions = request.form.getlist("payinAvailableTimePermissions")
					kycApiPermissions = request.form.getlist("kycApiPermissions")
					assignKycPermissions = request.form.getlist("assignKycPermissions")
					smsApiPermissions = request.form.getlist("smsApiPermissions")
					assignSmsPermissions = request.form.getlist("assignSmsPermissions")
					smsTemplatePermissions = request.form.getlist("smsTemplatePermissions")
					dynamicProfileSwitchPermissions = request.form.getlist("dynamicProfileSwitchPermissions")
					switchprofilePermissions = request.form.getlist("switchprofilePermissions")
					bulkprofileupdatePermissions = request.form.getlist("bulkprofileupdatePermissions")
					apiSetupchargeCommissionsPermissions = request.form.getlist("apiSetupchargeCommissionsPermissions")
					merchantWiseTransactionPermissions = request.form.getlist("merchantWiseTransactionPermissions")
					commissionStructurePermissions = request.form.getlist("commissionStructurePermissions")
					unSettlementCommissionPermissions = request.form.getlist("unSettlementCommissionPermissions")
					generateSettlementCommissionPermissions = request.form.getlist("generateSettlementCommissionPermissions")
					settlementCommissionPermissions = request.form.getlist("settlementCommissionPermissions")
					dashboardPermissions = request.form.getlist("dashboardPermissions")
					locationsPermissions = request.form.getlist("locationsPermissions")
					rolesPermissions = request.form.getlist("rolesPermissionsrolesPermissions")
					holidaydatesPermissions = request.form.getlist("holidaydatesPermissions")
					bankcodesPermissions = request.form.getlist("bankcodesPermissions")
					lockedMerchantPermissions = request.form.getlist("lockedMerchantPermissions")
					settlementPermissions = request.form.getlist("settlementPermissions")
					apiSecurityPermissions = request.form.getlist("apiSecurityPermissions")
					kycApiChargePermissions = request.form.getlist("kycApiChargePermissions")
					verificationChargePermissions = request.form.getlist("verificationChargePermissions")
					pgSettlementsPermission = request.form.getlist("pgSettlementsPermission")
					mobilePrepaidPermission = request.form.getlist("mobilePrepaidPermission")
					circlesMasterPermission = request.form.getlist("circlesMasterPermission")
					prepaidOperationPermission = request.form.getlist("prepaidOperationPermission")
					userwisePermission = request.form.getlist("userwisePermission")
					commissionTdsSetupPermission = request.form.getlist("commissionTdsSetupPermission")
					adminPayoutDownloadReportPermission = request.form.getlist("adminPayoutDownloadReportPermission")
					mobileApkVersionPermission = request.form.getlist("mobileApkVersionPermission")
					onDemandSettlementChargesPermission = request.form.getlist("onDemandSettlementChargesPermission")
					adminIpAddressPermission = request.form.getlist("adminIpAddressPermission")
					downloadInvoicesPermission = request.form.getlist("downloadInvoicesPermission")
					goldUserBalancePermission = request.form.getlist("goldUserBalancePermission")
					goldBuySuccessTransactionPermission = request.form.getlist("goldBuySuccessTransactionPermission")
					goldBuyPendingTransactionPermission = request.form.getlist("goldBuyPendingTransactionPermission")
					goldBuyPendingPaymentPermission = request.form.getlist("goldBuyPendingPaymentPermission")
					goldBuyFailedPermission = request.form.getlist("goldBuyFailedPermission")
					goldBuyPaymentFailedPermission = request.form.getlist("goldBuyPaymentFailedPermission")
					goldSellAllTransactionPermission = request.form.getlist("goldSellAllTransactionPermission")
					goldSellSuccessTransactionPermission = request.form.getlist("goldSellSuccessTransactionPermission")
					goldSellProcessTransactionPermission = request.form.getlist("goldSellProcessTransactionPermission")
					goldSellFailedTransactionPermission = request.form.getlist("goldSellFailedTransactionPermission")
					bankPendingPayoutTransactionPermission = request.form.getlist("bankPendingPayoutTransactionPermission")
					apiSetupChargeCommissionslistPermissions = request.form.getlist("apiSetupChargeCommissionslistPermissions")
					servicePaymentSetupChargeCommissionPermissions = request.form.getlist("servicePaymentSetupChargeCommissionPermissions")
					servicePaymentSetupChargeCommissionTableListPermissions = request.form.getlist("servicePaymentSetupChargeCommissionTableListPermissions")
					chargeBackPermissions = request.form.getlist("chargeBackPermissions")

					action = request.form.get("action", "").strip()
					data = request.form.to_dict()
					print(roleName,"((((((((((((((roleName))))))))))))))")

					otp_check_id = request.form.get("otpLogid", "")
					defaultVerificationId = request.form.get("defaultVerificationId", "")
					print("otp_check_id",otp_check_id)
					if not otp_check_id:
						flash("Invalid Request.", "danger")
						data_status['responseStatus']=4
						return data_status
						
					
					otpcheck_queryset = OtpChecks.objects(adminId=adminId,defaultVerificationField=defaultVerificationId, id=str(otp_check_id), status=1).first()

					if not otpcheck_queryset:
						flash("Invalid Request.", "danger")
						data_status['responseStatus']=4
						return data_status

					otpcheck_queryset.update(status=2)
					# 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","")
					#     otp_code = request.form.get("otpCode","")

					#     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", "")
					
					# otpcheck_queryset = OtpChecks.objects(adminId=adminId, 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!"})

					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!", "danger")
							data_status['responseStatus']=4
							return data_status
						   
						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,latitude,longitude) 
						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,
							serviceChargePermissions=serviceChargePermissions,
							userPermissionsList=userPermissionsList,
							assignvirtualAccountPermissions=assignvirtualAccountPermissions,
							assignThirdpartyvirtualAccountPermissions=assignThirdpartyvirtualAccountPermissions,
							beneficiariesListPermissions=beneficiariesListPermissions,
							autoBeneficiariesListPermissions=autoBeneficiariesListPermissions,
							invalidBeneficiariesListPermissions=invalidBeneficiariesListPermissions,
							txnLimitSettingsPermissions=txnLimitSettingsPermissions,
							invoiceCompanyDetailsPermissions=invoiceCompanyDetailsPermissions,
							utilityTransactionReportPermissions=utilityTransactionReportPermissions,
							accountSummaryPermissions=accountSummaryPermissions,
							downlineListPermissions=downlineListPermissions,
							balanceReportPermissions=balanceReportPermissions,
							cummulativeReportPermissions=cummulativeReportPermissions,
							operatorIncomeReportPermissions=operatorIncomeReportPermissions,
							chargeBacksReportPermissions=chargeBacksReportPermissions,
							downloadpayoutReportPermissions=downloadpayoutReportPermissions,
							autoCollectReportPermissions=autoCollectReportPermissions,
							gstAndTdsReportPermissions=gstAndTdsReportPermissions,
							apiDocumentGuidePermissions=apiDocumentGuidePermissions,
							goldApiManagementPermissions=goldApiManagementPermissions,
							goldApiTransactionPermissions=goldApiTransactionPermissions,
							productsPermissions=productsPermissions,
							multipleAppSitesPermissions=multipleAppSitesPermissions,
							contactSetupPermissions=contactSetupPermissions,
							ticketCategoryPermissions=ticketCategoryPermissions,
							ticketSubCategoryPermissions=ticketSubCategoryPermissions,
							ticketChildCategoryPermissions=ticketChildCategoryPermissions,
							complaintListPermissions=complaintListPermissions,
							payinAvailableTimePermissions=payinAvailableTimePermissions,
							kycApiPermissions=kycApiPermissions,
							assignKycPermissions=assignKycPermissions,
							smsApiPermissions=smsApiPermissions,
							assignSmsPermissions=assignSmsPermissions,
							smsTemplatePermissions=smsTemplatePermissions,
							dynamicProfileSwitchPermissions=dynamicProfileSwitchPermissions,
							switchprofilePermissions=switchprofilePermissions,
							bulkprofileupdatePermissions=bulkprofileupdatePermissions,
							apiSetupchargeCommissionsPermissions=apiSetupchargeCommissionsPermissions,
							merchantWiseTransactionPermissions=merchantWiseTransactionPermissions,
							commissionStructurePermissions=commissionStructurePermissions,
							unSettlementCommissionPermissions=unSettlementCommissionPermissions,
							generateSettlementCommissionPermissions=generateSettlementCommissionPermissions,
							settlementCommissionPermissions=settlementCommissionPermissions,
							dashboardPermissions=dashboardPermissions,
							locationsPermissions=locationsPermissions,
							rolesPermissions=rolesPermissions,
							holidaydatesPermissions=holidaydatesPermissions,
							bankcodesPermissions=bankcodesPermissions,
							lockedMerchantPermissions=lockedMerchantPermissions,
							settlementPermissions=settlementPermissions,
							apiSecurityPermissions=apiSecurityPermissions,
							kycApiChargePermissions=kycApiChargePermissions,
							verificationChargePermissions=verificationChargePermissions,
							pgSettlementsPermission=pgSettlementsPermission,
							mobilePrepaidPermission=mobilePrepaidPermission,
							circlesMasterPermission=circlesMasterPermission,
							prepaidOperationPermission=prepaidOperationPermission,
							userwisePermission=userwisePermission,
							commissionTdsSetupPermission=commissionTdsSetupPermission,
							adminPayoutDownloadReportPermission=adminPayoutDownloadReportPermission,
							mobileApkVersionPermission=mobileApkVersionPermission,
							onDemandSettlementChargesPermission=onDemandSettlementChargesPermission,
							adminIpAddressPermission=adminIpAddressPermission,
							downloadInvoicesPermission=downloadInvoicesPermission,
							goldUserBalancePermission=goldUserBalancePermission,
							goldBuySuccessTransactionPermission=goldBuySuccessTransactionPermission,
							goldBuyPendingTransactionPermission=goldBuyPendingTransactionPermission,
							goldBuyPendingPaymentPermission=goldBuyPendingPaymentPermission,
							goldBuyFailedPermission=goldBuyFailedPermission,
							goldBuyPaymentFailedPermission=goldBuyPaymentFailedPermission,
							goldSellAllTransactionPermission=goldSellAllTransactionPermission,
							goldSellSuccessTransactionPermission=goldSellSuccessTransactionPermission,
							goldSellProcessTransactionPermission=goldSellProcessTransactionPermission,
							goldSellFailedTransactionPermission=goldSellFailedTransactionPermission,
							bankPendingPayoutTransactionPermission=bankPendingPayoutTransactionPermission,
							apiSetupChargeCommissionslistPermissions=apiSetupChargeCommissionslistPermissions,
							servicePaymentSetupChargeCommissionPermissions=servicePaymentSetupChargeCommissionPermissions,
							servicePaymentSetupChargeCommissionTableListPermissions=servicePaymentSetupChargeCommissionTableListPermissions,
							chargeBackPermissions=chargeBackPermissions,
							createdOn=datetime.datetime.now(),
							status=1
							)
						save_role_table = role_table.save()
						flash("Role added successfully!", "success")
						data_status['responseStatus']=1
						return data_status
						# return redirect("view_all_roles")
					   
					else:
						data_status['responseStatus']=2
						data_status['result']="Required fields are missing!!"
						return data_status
				else:
					data_status['result']=form.errors
					return data_status
			else:
				data_status['responseStatus']=4
				return data_status 
					
		else:
			flash("The staff member does not have permission to create a Role.", "danger")
			data_status['responseStatus']=4
			return data_status
			
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to save role!", "danger")
		data_status['responseStatus']=4
		return data_status
		

# View all roles
@admin_roles.route("/view_all_roles",methods=["POST","GET"])
@adminid_access_token_required
def view_all_roles():
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId = session.get("adminId")
	rolesList=[]
	form = ""
	snoCount = 0
	Page = ""
	form = ""
	search_element = "" 
	pagination = None
	permissionsList = check_permissions(session.get("adminId"),"rolesPermissions")
	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"))

			form = AdminRoleFormSearch(request.args)
			search_element=request.args.get('search_element','')
			Page = request.args.get(get_page_parameter("Page"), type=int, default=1)
			per_page = 20
			start = (Page - 1) * per_page
			total_count = 0
		   
			filters = Q(status__in=[0, 1]) 
			if form.validate():
				if search_element:
					filters &= Q(roleName__icontains=search_element)
					
				total_count = Roles.objects(filters).count()

				roles_queryset = (
					Roles.objects(filters)
					.only("id", "roleName", "status")
					.order_by("-id")
					.skip(start)
					.limit(per_page)
				)
				
				rolesList = list(roles_queryset)
			else:
				rolesList=[]
			   

			snoCount = start
			pagination = Pagination(Page=Page, total=total_count, per_page=per_page,page_parameter ="Page", alignment="right", record_name="roles",href=f"?search_element={search_element}&Page={{0}}")

			# 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,
				snoCount = snoCount,
				Page = Page,
				form = form,
				)
		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,
				rolesList=rolesList,
				role_permissions = role_permissions,
				pagination=pagination,
				search_element = search_element,
				snoCount = snoCount,
				Page = Page,
				form = form,
				)
	else:
		flash("The staff member does not have permission to view Roles!", "danger")
		return redirect(url_for("admin.dashboard"))

# Single view role
@admin_roles.route("/single_view_role",methods=["POST","GET"])
@adminid_access_token_required
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"])
@adminid_access_token_required
def role_update_status():
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId=session.get("adminId")

	Page=request.args.get("Page")
	search_element=request.args.get("search_element")
	redirectTo=url_for("admin_roles.view_all_roles",Page=Page,search_element=search_element)
	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]
	permissionsList = check_permissions(session.get("adminId"),"rolesPermissions")
	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!', "success")
						message=admin_queryset.userName+" "+role_queryset.roleName+" Role activated successfully!"
					else:
						role_queryset.update(status=0)
						flash('Role deactivated successfully!', "success")
						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,latitude,longitude)
					return redirect(redirectTo)
					
				else:
					flash("Invaild id!!", "danger")
					return redirect(redirectTo)
			except Exception as e:
				app.logger.error(traceback.format_exc())
				return redirect(redirectTo)
			   
		else:
			flash("Required fields are missing!!", "danger")
			return redirect(redirectTo)
			
	else:
		flash("The staff member does not have permission to update Roles status.", "danger")
		return redirect(redirectTo)
		

# Update role
@admin_roles.route("/update_role",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def update_role():
	data_status={"responseStatus":0,"result":""}
	try:
		if not session.get("adminId"):
			flash("session Expired.Please login again.")
			data_status["responseStatus"]=4
			return data_status
			
		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()
		role_permissions = fetch_staff_permissions(session.get("adminId"))
		permissionsList = check_permissions(session.get("adminId"),"rolesPermissions")
		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")
				serviceChargePermissions = request.form.getlist("serviceChargePermissions")
				userPermissionsList = request.form.getlist("userPermissionsList")
				assignvirtualAccountPermissions = request.form.getlist("assignvirtualAccountPermissions")
				assignThirdpartyvirtualAccountPermissions = request.form.getlist("assignThirdpartyvirtualAccountPermissions")
				beneficiariesListPermissions = request.form.getlist("beneficiariesListPermissions")
				autoBeneficiariesListPermissions = request.form.getlist("autoBeneficiariesListPermissions")
				invalidBeneficiariesListPermissions = request.form.getlist("invalidBeneficiariesListPermissions")
				txnLimitSettingsPermissions = request.form.getlist("txnLimitSettingsPermissions")
				invoiceCompanyDetailsPermissions = request.form.getlist("invoiceCompanyDetailsPermissions")
				utilityTransactionReportPermissions = request.form.getlist("utilityTransactionReportPermissions")
				accountSummaryPermissions = request.form.getlist("accountSummaryPermissions")
				downlineListPermissions = request.form.getlist("downlineListPermissions")
				balanceReportPermissions = request.form.getlist("balanceReportPermissions")
				cummulativeReportPermissions = request.form.getlist("cummulativeReportPermissions")
				operatorIncomeReportPermissions = request.form.getlist("operatorIncomeReportPermissions")
				chargeBacksReportPermissions = request.form.getlist("chargeBacksReportPermissions")
				downloadpayoutReportPermissions = request.form.getlist("downloadpayoutReportPermissions")
				autoCollectReportPermissions = request.form.getlist("autoCollectReportPermissions")
				gstAndTdsReportPermissions = request.form.getlist("gstAndTdsReportPermissions")
				apiDocumentGuidePermissions = request.form.getlist("apiDocumentGuidePermissions")
				goldApiManagementPermissions = request.form.getlist("goldApiManagementPermissions")
				goldApiTransactionPermissions = request.form.getlist("goldApiTransactionPermissions")
				productsPermissions = request.form.getlist("productsPermissions")
				multipleAppSitesPermissions = request.form.getlist("multipleAppSitesPermissions")
				contactSetupPermissions = request.form.getlist("contactSetupPermissions")
				ticketCategoryPermissions = request.form.getlist("ticketCategoryPermissions")
				ticketSubCategoryPermissions = request.form.getlist("ticketSubCategoryPermissions")
				ticketChildCategoryPermissions = request.form.getlist("ticketChildCategoryPermissions")
				complaintListPermissions = request.form.getlist("complaintListPermissions")
				payinAvailableTimePermissions = request.form.getlist("payinAvailableTimePermissions")
				kycApiPermissions = request.form.getlist("kycApiPermissions")
				assignKycPermissions = request.form.getlist("assignKycPermissions")
				smsApiPermissions = request.form.getlist("smsApiPermissions")
				assignSmsPermissions = request.form.getlist("assignSmsPermissions")
				smsTemplatePermissions = request.form.getlist("smsTemplatePermissions")
				dynamicProfileSwitchPermissions = request.form.getlist("dynamicProfileSwitchPermissions")
				switchprofilePermissions = request.form.getlist("switchprofilePermissions")
				bulkprofileupdatePermissions = request.form.getlist("bulkprofileupdatePermissions")
				apiSetupchargeCommissionsPermissions = request.form.getlist("apiSetupchargeCommissionsPermissions")
				merchantWiseTransactionPermissions = request.form.getlist("merchantWiseTransactionPermissions")
				commissionStructurePermissions = request.form.getlist("commissionStructurePermissions")
				unSettlementCommissionPermissions = request.form.getlist("unSettlementCommissionPermissions")
				generateSettlementCommissionPermissions = request.form.getlist("generateSettlementCommissionPermissions")
				settlementCommissionPermissions = request.form.getlist("settlementCommissionPermissions")
				dashboardPermissions = request.form.getlist("dashboardPermissions")
				locationsPermissions = request.form.getlist("locationsPermissions")
				rolesPermissions = request.form.getlist("rolesPermissions")
				holidaydatesPermissions = request.form.getlist("holidaydatesPermissions")
				bankcodesPermissions = request.form.getlist("bankcodesPermissions")
				lockedMerchantPermissions = request.form.getlist("lockedMerchantPermissions")
				settlementPermissions = request.form.getlist("settlementPermissions")
				apiSecurityPermissions = request.form.getlist("apiSecurityPermissions")
				kycApiChargePermissions = request.form.getlist("kycApiChargePermissions")
				verificationChargePermissions = request.form.getlist("verificationChargePermissions")
				pgSettlementsPermission = request.form.getlist("pgSettlementsPermission")
				mobilePrepaidPermission = request.form.getlist("mobilePrepaidPermission")
				circlesMasterPermission = request.form.getlist("circlesMasterPermission")
				prepaidOperationPermission = request.form.getlist("prepaidOperationPermission")
				userwisePermission = request.form.getlist("userwisePermission")
				commissionTdsSetupPermission = request.form.getlist("commissionTdsSetupPermission")
				adminPayoutDownloadReportPermission = request.form.getlist("adminPayoutDownloadReportPermission")
				mobileApkVersionPermission = request.form.getlist("mobileApkVersionPermission")
				onDemandSettlementChargesPermission = request.form.getlist("onDemandSettlementChargesPermission")
				adminIpAddressPermission = request.form.getlist("adminIpAddressPermission")
				downloadInvoicesPermission = request.form.getlist("downloadInvoicesPermission")
				goldUserBalancePermission = request.form.getlist("goldUserBalancePermission")
				goldBuySuccessTransactionPermission = request.form.getlist("goldBuySuccessTransactionPermission")
				goldBuyPendingTransactionPermission = request.form.getlist("goldBuyPendingTransactionPermission")
				goldBuyPendingPaymentPermission = request.form.getlist("goldBuyPendingPaymentPermission")
				goldBuyFailedPermission = request.form.getlist("goldBuyFailedPermission")
				goldBuyPaymentFailedPermission = request.form.getlist("goldBuyPaymentFailedPermission")
				goldSellAllTransactionPermission = request.form.getlist("goldSellAllTransactionPermission")
				goldSellSuccessTransactionPermission = request.form.getlist("goldSellSuccessTransactionPermission")
				goldSellProcessTransactionPermission = request.form.getlist("goldSellProcessTransactionPermission")
				goldSellFailedTransactionPermission = request.form.getlist("goldSellFailedTransactionPermission")
				bankPendingPayoutTransactionPermission = request.form.getlist("bankPendingPayoutTransactionPermission")
				apiSetupChargeCommissionslistPermissions = request.form.getlist("apiSetupChargeCommissionslistPermissions")
				servicePaymentSetupChargeCommissionPermissions = request.form.getlist("servicePaymentSetupChargeCommissionPermissions")
				servicePaymentSetupChargeCommissionTableListPermissions = request.form.getlist("servicePaymentSetupChargeCommissionTableListPermissions")
				chargeBackPermissions = request.form.getlist("chargeBackPermissions")

				action = request.form.get("action", "").strip()
				data = request.form.to_dict()
				
				otp_check_id = request.form.get("otpLogid", "")
				defaultVerificationId = request.form.get("defaultVerificationId", "")

				print("otp_check_id",otp_check_id)
				if not otp_check_id:
					flash("Invalid Request.", "danger")
					data_status['responseStatus']=4
					return data_status
					
				
				otpcheck_queryset = OtpChecks.objects(adminId=adminId,defaultVerificationField=defaultVerificationId, id=str(otp_check_id), status=1).first()

				if not otpcheck_queryset:
					flash("Invalid Request.", "danger")
					data_status['responseStatus']=4
					return data_status

				otpcheck_queryset.update(status=2)
				  

				jsonData = request.form.to_dict(flat=True)
				form = AdminRoleForm(request.form, current_id=roleId)
				if form.validate_on_submit():

					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,latitude,longitude) 

					
					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,
						serviceChargePermissions=serviceChargePermissions,
						userPermissionsList=userPermissionsList,
						assignvirtualAccountPermissions=assignvirtualAccountPermissions,
						assignThirdpartyvirtualAccountPermissions=assignThirdpartyvirtualAccountPermissions,
						beneficiariesListPermissions=beneficiariesListPermissions,
						autoBeneficiariesListPermissions=autoBeneficiariesListPermissions,
						invalidBeneficiariesListPermissions=invalidBeneficiariesListPermissions,
						txnLimitSettingsPermissions=txnLimitSettingsPermissions,
						invoiceCompanyDetailsPermissions=invoiceCompanyDetailsPermissions,
						utilityTransactionReportPermissions=utilityTransactionReportPermissions,
						accountSummaryPermissions=accountSummaryPermissions,
						downlineListPermissions=downlineListPermissions,
						balanceReportPermissions=balanceReportPermissions,
						cummulativeReportPermissions=cummulativeReportPermissions,
						operatorIncomeReportPermissions=operatorIncomeReportPermissions,
						chargeBacksReportPermissions=chargeBacksReportPermissions,
						downloadpayoutReportPermissions=downloadpayoutReportPermissions,
						autoCollectReportPermissions=autoCollectReportPermissions,
						gstAndTdsReportPermissions=gstAndTdsReportPermissions,
						apiDocumentGuidePermissions=apiDocumentGuidePermissions,
						goldApiManagementPermissions=goldApiManagementPermissions,
						goldApiTransactionPermissions=goldApiTransactionPermissions,
						productsPermissions=productsPermissions,
						multipleAppSitesPermissions=multipleAppSitesPermissions,
						contactSetupPermissions=contactSetupPermissions,
						ticketCategoryPermissions=ticketCategoryPermissions,
						ticketSubCategoryPermissions=ticketSubCategoryPermissions,
						ticketChildCategoryPermissions=ticketChildCategoryPermissions,
						complaintListPermissions=complaintListPermissions,
						payinAvailableTimePermissions=payinAvailableTimePermissions,
						kycApiPermissions=kycApiPermissions,
						assignKycPermissions=assignKycPermissions,
						smsApiPermissions=smsApiPermissions,
						assignSmsPermissions=assignSmsPermissions,
						smsTemplatePermissions=smsTemplatePermissions,
						dynamicProfileSwitchPermissions=dynamicProfileSwitchPermissions,
						switchprofilePermissions=switchprofilePermissions,
						bulkprofileupdatePermissions=bulkprofileupdatePermissions,
						apiSetupchargeCommissionsPermissions=apiSetupchargeCommissionsPermissions,
						merchantWiseTransactionPermissions=merchantWiseTransactionPermissions,
						commissionStructurePermissions=commissionStructurePermissions,
						unSettlementCommissionPermissions=unSettlementCommissionPermissions,
						generateSettlementCommissionPermissions=generateSettlementCommissionPermissions,
						settlementCommissionPermissions=settlementCommissionPermissions,
						dashboardPermissions=dashboardPermissions,
						locationsPermissions=locationsPermissions,
						rolesPermissions=rolesPermissions,
						holidaydatesPermissions=holidaydatesPermissions,
						bankcodesPermissions=bankcodesPermissions,
						lockedMerchantPermissions=lockedMerchantPermissions,
						settlementPermissions=settlementPermissions,
						apiSecurityPermissions=apiSecurityPermissions,
						kycApiChargePermissions=kycApiChargePermissions,
						verificationChargePermissions=verificationChargePermissions,
						pgSettlementsPermission=pgSettlementsPermission,
						mobilePrepaidPermission=mobilePrepaidPermission,
						circlesMasterPermission=circlesMasterPermission,
						prepaidOperationPermission=prepaidOperationPermission,
						userwisePermission=userwisePermission,
						commissionTdsSetupPermission=commissionTdsSetupPermission,
						adminPayoutDownloadReportPermission=adminPayoutDownloadReportPermission,
						mobileApkVersionPermission=mobileApkVersionPermission,
						onDemandSettlementChargesPermission=onDemandSettlementChargesPermission,
						adminIpAddressPermission=adminIpAddressPermission,
						downloadInvoicesPermission=downloadInvoicesPermission,
						goldUserBalancePermission=goldUserBalancePermission,
						goldBuySuccessTransactionPermission=goldBuySuccessTransactionPermission,
						goldBuyPendingTransactionPermission=goldBuyPendingTransactionPermission,
						goldBuyPendingPaymentPermission=goldBuyPendingPaymentPermission,
						goldBuyFailedPermission=goldBuyFailedPermission,
						goldBuyPaymentFailedPermission=goldBuyPaymentFailedPermission,
						goldSellAllTransactionPermission=goldSellAllTransactionPermission,
						goldSellSuccessTransactionPermission=goldSellSuccessTransactionPermission,
						goldSellProcessTransactionPermission=goldSellProcessTransactionPermission,
						goldSellFailedTransactionPermission=goldSellFailedTransactionPermission,
						bankPendingPayoutTransactionPermission=bankPendingPayoutTransactionPermission,
						apiSetupChargeCommissionslistPermissions=apiSetupChargeCommissionslistPermissions,
						servicePaymentSetupChargeCommissionPermissions=servicePaymentSetupChargeCommissionPermissions,
						servicePaymentSetupChargeCommissionTableListPermissions=servicePaymentSetupChargeCommissionTableListPermissions,
						chargeBackPermissions=chargeBackPermissions,
						)
					flash('Role updated successfully!', "success")
					data_status["responseStatus"]=1
					return data_status
				else:
					data_status['result']=form.errors
					return data_status
			else:
				data_status['responseStatus']=4
				return data_status
		else:
			flash("The staff member does not have permission to update Roles.", "danger")
			data_status["responseStatus"]=4
			return data_status
		   
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to update role!!", "danger")
		data_status["responseStatus"]=4
		return data_status
		

# 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 = 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"),"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") 




@admin_roles.route("/delete_role", methods=["POST", "GET"])
@adminid_access_token_required
@csrf_protect
def delete_role():
	try:
		if not session.get("adminId"):
			return redirect("admin_login")

		adminId = session.get("adminId")

		Page=request.args.get("Page")
		search_element=request.args.get("search_element")
		redirectTo=url_for("admin_roles.view_all_roles",Page=Page,search_element=search_element)

		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") or request.headers.get('User-Agent')
		browser = loginBrowser.split(";")[0] if loginBrowser else "Unknown"

		# Extracting client IP address
		client_ip = request.headers.getlist("X-Forwarded-For")[0] if request.headers.getlist("X-Forwarded-For") else request.remote_addr

		actionDate = datetime.datetime.now()
		action = request.form.get("action", "").strip()
		data = request.form.to_dict()

		permissionsList = check_permissions(session.get("adminId"), "rolesPermissions")

		if "delete" in permissionsList:
			otp_check_id = request.form.get("otpLogid", "")
			defaultVerificationId = request.form.get("defaultVerificationId", "")
			print("otp_check_id",otp_check_id)
			if not otp_check_id:
				flash("Invalid Request.", "danger")
				return redirect(redirectTo)
			
			otpcheck_queryset = OtpChecks.objects(defaultVerificationField=defaultVerificationId,id=str(otp_check_id), status=1).first()

			if not otpcheck_queryset:
				flash("Invalid Request.", "danger")
				return redirect(redirectTo)

			otpcheck_queryset.update(status=2)  # Mark OTP as used
			
			jsonData = request.form.to_dict(flat=True)
			existing_record = ""
			updatedrequestData = [jsonData]
			# Step 4: Proceed with Role Deletion after OTP Verification
			
			# if request.method == "GET":
			roleId = request.args.get("roleId")
			role_queryset = Roles.objects(id=roleId).first()

			if not role_queryset:
				flash("Invalid role ID!","danger")
				return redirect(redirectTo)

			existing_record = role_queryset.to_json()
			requestData = [existing_record]

			role_queryset.update(status=2)  # Soft delete
			flash('Role deleted successfully!', "success")

			admin_queryset = SuperAdmin.objects(id=adminId, status=1).first()
			message = f"{admin_queryset.userName} {role_queryset.roleName} Role deleted successfully!"
			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,latitude,longitude)
			return redirect(redirectTo)
			
		else:
			flash("The staff member does not have permission to delete Roles.", "danger")
			return redirect(redirectTo)

	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to delete role!", "danger")
		return redirect(redirectTo)

		







