from appservices.common.util import *
from appservices.common.form_schemas import *

multiple_app_sites= Blueprint("multiple_app_sites",__name__)


def validate_api_setup_charges_table(
	transactionApiIdList,
	statusList
):
	row_count = len(transactionApiIdList)
	errors = {}

	# Check all list lengths
	# for lst in [transactionApiIdList, statusList]:
	# 	if len(lst) != row_count:
	# 		return False, {"form": "All lists must be the same length."}

	for i in range(row_count-1):
		row = i + 1
		apiName = transactionApiIdList[i].strip()
		status = statusList[i].strip()

		payin_enable_queryset = TransactionAPI.objects(transactionType="PaymentGateway").only('id')

		payinList = [str(doc.id) for doc in payin_enable_queryset]

		if not apiName:
			errors[f"transactionApiId{row}"] = f"apiName is required"
		elif apiName not in payinList:
			errors[f"transactionApiId{row}"] = f"apiName is invalid"

		if status not in ["Active", "Deactive"]:
			errors[f"status{row}"] = f" status must be 'Active' or 'Deactive'"
			
		# for label, value in [
		# 	("apiName", transactionApiIdList[i]),
		# 	("status", statusList[i]),
		# ]:
		# 	try:
		# 		value
		# 	except ValueError:
		# 		errors[f"{label}{row}"] = f"{label} must be a number"
				
	if errors:
		return False, errors

	return True, {}






@multiple_app_sites.route("/add_multiple_app_sites",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def add_multiple_app_sites():
	data_status={"responseStatus":0,"result":""}
	try:
		if not session.get("adminId"):
			return redirect("admin_login")
		adminId = session.get("adminId")
		
		csrf_token = request.form.get("csrf_token")
		print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
		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(adminId,"multipleAppSitesPermissions")
		if "add" in permissionsList:
			if request.method == "POST":
				siteTitle = request.form.get("siteTitle","")
				siteCode = request.form.get("siteCode","")
				siteUrl = request.form.get("siteUrl","")
				enableMerchantSettlement = request.form.get("enableMerchantSettlement")
				instantSettlementType = request.form.get("instantSettlementType",False)
				paylaterSettlementType = request.form.get("paylaterSettlementType",False)
				defaultSelect = request.form.get("defaultSelect")
				defaultSettlement = request.form.get("defaultSettlement")
				print(defaultSelect,'===defaultSelect====')
				print(defaultSettlement,'===defaultSettlement====')
				
				
				jsonData = request.form.to_dict(flat=True)
				requestData = [jsonData]
				updatedrequestData = [jsonData]
				form = MultipleAppSitesForm()
				if form.validate_on_submit():
				
					if siteTitle and siteCode: 
						# print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",siteTitle,siteCode,siteUrl,enableMerchantSettlement,settlementTypesList)
						# print(settlementTypesList,"((((((((((((settlementTypesList))))))))))))")

						print(type(enableMerchantSettlement),"(((((((((((TYPE enableMerchantSettlement)))))))))))")
						print(enableMerchantSettlement,"(((((((((((enableMerchantSettlement)))))))))))")

						if enableMerchantSettlement == "on":
							enableMerchantSettlement = True
						else:
							enableMerchantSettlement = False
							
						if instantSettlementType=="True":
							instantSettlementType=True
						else:
							instantSettlementType=False
							
						if paylaterSettlementType=="True":
							paylaterSettlementType=True
						else:
							paylaterSettlementType=False

						if defaultSettlement=="True":
							defaultSettlement=True
						elif defaultSettlement == "False":
							defaultSettlement=False
						elif defaultSettlement == "":
							defaultSettlement=None

						print(defaultSelect,"((((((((defaultSelect))))))))")
						print(paylaterSettlementType,"((((((((paylaterSettlementType))))))))")
						print(instantSettlementType,"((((((((instantSettlementType))))))))")
						print(defaultSettlement,"((((((((defaultSettlement))))))))")
						print(type(defaultSettlement),"((((((((defaultSettlement type))))))))")

						try:
							admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
							if admin_queryset:
								message=admin_queryset.userName+" "+siteTitle+"  created successfully!"
								save_admin_log_table = save_admin_logs_data(adminId,None,None,"add_multiple_app_sites","create",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
								
							multiple_app_sites_table = MultipleAppSites(
								adminId=adminId,
								siteTitle = siteTitle,
								siteCode = siteCode,
								siteUrl = siteUrl,
								createdOn = datetime.datetime.now(),
								enableMerchantSettlement=enableMerchantSettlement,
								instantSettlementType=instantSettlementType,
								paylaterSettlementType=paylaterSettlementType,
								defaultSelect=defaultSelect,
								status = 1,
								)
							save_table = multiple_app_sites_table.save()
							print(save_table,"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
							save_table.update(defaultSettlement=defaultSettlement)

							flash("Multiple sites saved successfully!", "success")
							data_status['responseStatus']=1
							return data_status
							
						except Exception as e:
							flash("Unable to save multiple app sites sites!!", "danger")
							app.logger.error(traceback.format_exc())
							data_status['responseStatus']=4
							return data_status
							
					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 multiple app sites.", "danger")
			data_status['responseStatus']=4
			return data_status
			
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to save multiple app sites details!!", "danger")
		data_status['responseStatus']=4
		return data_status
		


@multiple_app_sites.route("/get_multiple_app_sites",methods=["POST","GET"])
@adminid_access_token_required
def get_multiple_app_sites():
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId = session.get("adminId")
	mutipleAppSitesList = []
	page = ""
	snoCount=0
	error = ""
	redirectval = ""
	pagination = None
	search_element=""
	print("(((((((((((((((((mutipleAppSitesList)))))))))))))))))")
	adminId = session.get("adminId")
	permissionsList = check_permissions(session.get("adminId"),"multipleAppSitesPermissions")
	form = MultipleAppSitesSearchForm(request.args)
	if "view" in permissionsList:
		try:
			redirectTo = request.args.get("redirectTo","")
			if redirectTo:
				redirectval = redirectTo
			else:
				redirectval = ""
			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(siteTitle__icontains=search_element)

				total_count = MultipleAppSites.objects(filters).count()

				multiple_app_sites_queryset = (
					MultipleAppSites.objects(filters)
					.only("id", "siteTitle", "siteCode", "siteUrl","enableMerchantSettlement","instantSettlementType","paylaterSettlementType","defaultSelect","defaultSettlement","createdOn", "status")
					.order_by("-id")
					.skip(start)
					.limit(per_page)
				)
				
				mutipleAppSitesList = list(multiple_app_sites_queryset)
			else:
				mutipleAppSitesList=[]
			   

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

			return render_template("super_admin_templates/multiple_app_sites.html",
				pagination=pagination,
				mutipleAppSitesList=mutipleAppSitesList,
				redirectval=redirectval,
				search_element=search_element,
				page=page,
				snoCount=snoCount,
				form=form
				)
			
		except Exception as e:
			app.logger.error(traceback.format_exc())
			error = "Unable to fetch multiple app services details!!"
			return render_template("super_admin_templates/multiple_app_sites.html", 
				error=error,
				pagination=pagination,
				mutipleAppSitesList=mutipleAppSitesList,
				search_element=search_element,
				page=page,
				snoCount=snoCount,
				form=form
				)
	else:
		flash("Staff member does not have given view multiple app sites permissions!!")
		return redirect(url_for("admin.dashboard"))
	#     # return render_template("super_admin_templates/multiple_app_sites.html")


@multiple_app_sites.route("/multiple_app_sites_status",methods=["POST","GET"])
@adminid_access_token_required
def multiple_app_sites_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("multiple_app_sites.get_multiple_app_sites",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"),"multipleAppSitesPermissions")
	if "edit" in permissionsList:
		site_id = request.args.get("site_id","")
		print(site_id,"((((((((((((((((((()))))))))))))))))))")
		if site_id:
			try:
				message=""
				multipleapp_queryset = MultipleAppSites.objects(id=site_id,status__nin=[2]).first()
				existing_record = multipleapp_queryset.to_json()
				requestData = [existing_record]
				if multipleapp_queryset:
					if multipleapp_queryset.status == 0:
						multipleapp_queryset.update(status=1)
						flash("Multiple App Sites activated successfully!", "success")
						message=multipleapp_queryset.adminId.userName+" "+multipleapp_queryset.siteTitle+" Multiple App Sites activated successfully!!"
					elif multipleapp_queryset.status == 1:
						multipleapp_queryset.update(status=0)
						flash("Multiple App Sites deactivated successfully!", "success")
						message=multipleapp_queryset.adminId.userName+" "+multipleapp_queryset.siteTitle+" Multiple App Sites deactivated successfully!!"
					save_admin_log_table = save_admin_logs_data(adminId,None,None,"multiple_app_sites_status","updatestatus",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
					return redirect(redirectTo)
				   
				else:
					flash("Invalid id!!", "danger")
					return redirect(url_for("multiple_app_sites.get_multiple_app_sites"))
					
			except Exception as e:
				flash("Unable to Update Multiple App Status!!!", "danger")
				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 multiple app site status.", "danger")
		return redirect(redirectTo)
	   

@multiple_app_sites.route("/delete_multiple_app_sites",methods=["GET","POST"])
@adminid_access_token_required
def delete_multiple_app_sites():
	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("multiple_app_sites.get_multiple_app_sites",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"),"multipleAppSitesPermissions")
		if "delete" in permissionsList:
			if request.method == "GET":
				site_id = request.args.get("site_id","")
				site_queryset = MultipleAppSites.objects(id=site_id,status__in=[0,1]).first()
				existing_record = site_queryset.to_json()
				requestData = [existing_record]
				site_queryset.update(status=2)
				flash("Multiple APP Sites deleted successfully!")
				message=site_queryset.adminId.userName+" "+site_queryset.siteTitle+" Multiple APP Sites deleted successfully!"
				save_admin_log_table = save_admin_logs_data(adminId,None,None,"delete_multiple_app_sites","delete",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude)
				return redirect(redirectTo)
			else:
				return redirect(redirectTo)
				
		else:
			flash("The staff member does not have permission to delete multiple app site.", "danger")
			return redirect(redirectTo)
			
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash("Unable to delete Multiple APP Sites!!","danger")
		return redirect(redirectTo)
	   


#Update multiple app sites
@multiple_app_sites.route("/update_mutiple_app_sites",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def update_mutiple_app_sites():
	data_status={"responseStatus":0,"result":""}
	if not session.get("adminId"):
		flash("session Expired.")
		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()

	try:
		permissionsList = check_permissions(session.get("adminId"),"multipleAppSitesPermissions")
		if "edit" in permissionsList:
			site_id = request.args.get("site_id","")
			if request.method == "POST":
				siteTitle = request.form.get("siteTitle","")
				siteCode = request.form.get("siteCode","")
				siteUrl = request.form.get("siteUrl","")
				enableMerchantSettlement = request.form.get("enableMerchantSettlement")
				instantSettlementType = request.form.get("instantSettlementType",False)
				paylaterSettlementType = request.form.get("paylaterSettlementType",False)
				defaultSelect = request.form.get("defaultSelect")
				defaultSettlement = request.form.get("defaultSettlement")
				print(defaultSelect,'===defaultSelect update====')
				print(defaultSettlement,'===defaultSettlement update====')


				jsonData = request.form.to_dict(flat=True)
			
				form = MultipleAppSitesForm(request.form, current_id=site_id)
				if form.validate_on_submit():
					if siteTitle and siteCode:
						multiple_app_sites_queryset = MultipleAppSites.objects(id=site_id,status__in=[0,1]).first()
						# existing_record = multiple_app_sites_queryset.to_json()

						admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
						if admin_queryset:
							message=admin_queryset.userName+" "+siteTitle+"  sites updated successfully!"
						requestData=[multiple_app_sites_queryset]
						updatedrequestData=[jsonData]
						save_admin_log_table = save_admin_logs_data(adminId,None,None,"update_mutiple_app_sites","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 

						if enableMerchantSettlement == "on":
							enableMerchantSettlement = True
						else:
							enableMerchantSettlement = False
							
						if instantSettlementType=="True":
							instantSettlementType=True
						else:
							instantSettlementType=False
							
						if paylaterSettlementType=="True":
							paylaterSettlementType=True
						else:
							paylaterSettlementType=False

						if defaultSettlement=="True":
							defaultSettlement=True
						elif defaultSettlement == "False":
							defaultSettlement=False
						elif defaultSettlement == "None":
							defaultSettlement=None

						if multiple_app_sites_queryset:
							multiple_app_sites_queryset.update(
								siteTitle = siteTitle,
								siteCode = siteCode,
								siteUrl = siteUrl,
								enableMerchantSettlement = enableMerchantSettlement,
								instantSettlementType = instantSettlementType,
								paylaterSettlementType = paylaterSettlementType,
								defaultSettlement = defaultSettlement,
								defaultSelect = defaultSelect
								)
							
							flash("Multiple App Sites Updated successfully!", "success")
							data_status["responseStatus"]=1
							return data_status
							
						else:
							flash("Invalid id!!", "danger")
							data_status["responseStatus"]=4
							return data_status
							
					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 update multiple app sites.", "danger")
			data_status["responseStatus"]=4
			return data_status
			
	except Exception as e:
		flash("Unable to Update Multiple App Sites!!!", "danger")
		app.logger.error(traceback.format_exc())
		data_status["responseStatus"]=4
		return data_status
		


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

	# Initialize lists
	commissionsList = []
	transactionAPIsList = []
	paymentsModeList = []
	subPaymentsModeList = []
	error = None
	success_message = None
	editable = False
	update = False
	setup_charge_commission={}
	setup_charge_commission_dict={}
	siteAssignPaymentgatewaysList=[]
	payinPgsList = []
	price_ranges = []
	transactionapiName=""
	showData=False
	paymentModeName = ""
	txnName = ""
	siteName = ""
	siteId = ""
	paymentModeId = None
	settlementType = False

	adminId = session.get("adminId")
	permissionsList = check_permissions(session.get("adminId"), "apiSetupchargeCommissionsPermissions")
	form = SiteAssignPaymentGatewaySearchForm(request.args)
	if "view" in permissionsList:
		try:
			action = request.form.get("action", "").strip()
			siteId = request.args.get("siteId","")
			data = request.form.to_dict()

			if not siteId:
				flash("Invalid id!!", "danger")
				return redirect(url_for("multiple_app_sites.get_multiple_app_sites"))


			# Step 1: Handle OTP Generation
			# otp_check_id = request.form.get("otpLogid", "")
			# print("otp_check_id",otp_check_id)
			# if not otp_check_id:
			#     flash("Invalid Request.")
			#     return render_template("super_admin_templates/site_assign_payment_gateways_list.html")

			# otpcheck_queryset = OtpChecks.objects(adminId=adminId, id=str(otp_check_id), status=1).first()

			# if not otpcheck_queryset:
			#     flash("Invalid Request.")
			#     return render_template("super_admin_templates/site_assign_payment_gateways_list.html")
			# # Update OTP status to 2 after verification
			# otpcheck_queryset.update(status=2)

			redirectTo = request.args.get("redirectTo", "Commission")
			search_action = request.args.get("action")

			######################## Common Lists ###########################

			payments_mod_queryset = PaymentMode.objects(status__in=[0, 1],walletType="Payin").order_by("-id").all()
			for each_payment_mode in payments_mod_queryset:
				paymentModeDict = fetching_payment_mode_details(each_payment_mode)
				paymentsModeList.append(paymentModeDict)

			
			if request.method == "GET" and request.args.get("action") == "search":
			   
				paymentModeId = request.args.get("paymentModeId","")
				settlementType = request.args.get("settlementType","")
			# subPaymentModeId = request.args.get("subPaymentModeId")
			# transactionAPIId = request.args.get("transactionAPIId")
			# instantSettlement = request.args.get("instantSettlement")
			# status = request.args.get("status")
				editable = True
				update = True
				if form.validate():
					payments_mod_queryset1 = PaymentMode.objects(id=paymentModeId,status__in=[0, 1]).first()

					# txn_queryset = TransactionAPI.objects(id=transactionAPIId,status__in=[0, 1]).first()

					paymentModeName = payments_mod_queryset1.paymentMode
					# txnName = txn_queryset.apiName


					transactionapiName = None

					if settlementType == "True":
						settlementType=True
					else:
						settlementType=False

					# if status == "Active":
					#     status=1
					# else:
					#     status=0


					# Search for matching records
					
					# transaction_queryset = TransactionAPI.objects(id=str(transactionAPIId)).first()
					# if transaction_queryset:
					#     transactionapiName=transaction_queryset.apiName

					payin_enable_queryset = TransactionAPI.objects(transactionType="PaymentGateway").order_by('-id')
					for each_payin_enable in payin_enable_queryset:
						payinPgDict = fetching_transaction_api_details(each_payin_enable)
						payinPgsList.append(payinPgDict)

					sub_payments_mod_queryset = SubPaymentModes.objects(paymentModeId=paymentModeId,status__in=[0, 1]).order_by("priority").all()
					for each_sub_payment_mode in sub_payments_mod_queryset:
						site_pgs_queryset = SiteAssignPaymentgateways.objects(paymentModeId=paymentModeId,subPaymentModeId=str(each_sub_payment_mode.id),siteId=str(siteId),instantSettlement=settlementType).first()
						# site_pgs_queryset = SiteAssignPaymentgateways.objects(paymentModeId=paymentModeId,subPaymentModeId=str(each_sub_payment_mode.id),siteId=str(siteId)).first()
						if site_pgs_queryset:
							transactionApiId=None
							transactionApiName=""
							if site_pgs_queryset.transactionApiId!=None:
								transactionApiId=str(site_pgs_queryset.transactionApiId.id)
								transactionApiName=str(site_pgs_queryset.transactionApiId.apiName)
							sitePgDict= {
								"id":str(each_sub_payment_mode.id),
								"subPaymentModeType": each_sub_payment_mode.subPaymentModeType,  # Use the subPaymentModeType
								"subPaymentModeId": str(each_sub_payment_mode.id),  # Keep the ID for reference
								"instantSettlement":site_pgs_queryset.instantSettlement,
								"transactionApiId":str(transactionApiId),
								"transactionApiName":str(transactionApiName),
								"status":site_pgs_queryset.status,
							}

						else:
							sitePgDict= {
								"id":str(each_sub_payment_mode.id),
								"subPaymentModeType": str(each_sub_payment_mode.subPaymentModeType),
								"subPaymentModeId": str(each_sub_payment_mode.id),
								"transactionApiId": None,
								"transactionApiName":"",
								"instantSettlement":False,
								"status":1
							}
						siteAssignPaymentgatewaysList.append(sitePgDict)
					if len(siteAssignPaymentgatewaysList) > 0:
						showData=True

					if siteId:
						site_queryset = MultipleAppSites.objects(id=siteId).first()
						siteName = site_queryset.siteTitle
				else:
					print("((((((((((((((((form errors)))))",form.errors)

				return render_template(
					"super_admin_templates/site_assign_payment_gateways_list.html",
					siteId=siteId,
					paymentModeId=paymentModeId,
					settlementType=settlementType,
					paymentsModeList=paymentsModeList,
					# transactionAPIId=transactionAPIId,
					# transactionapiName=transactionapiName,
					# transactionAPIsList=transactionAPIsList,
					setup_charge_commission=setup_charge_commission,
					# subPaymentsModeList=subPaymentsModeList,
					siteAssignPaymentgatewaysList=siteAssignPaymentgatewaysList,
					payinPgsList=payinPgsList,
					editable=editable,
					showData=showData,
					paymentModeName=paymentModeName,
					txnName=txnName,
					siteName=siteName,
					update= update,
					form=form
				)

			return render_template("super_admin_templates/site_assign_payment_gateways_list.html",
				siteId=siteId,
				paymentModeId=paymentModeId,
				settlementType=settlementType,
				commissionsList=commissionsList,
				# subPaymentsModeList=subPaymentsModeList,
				siteAssignPaymentgatewaysList=siteAssignPaymentgatewaysList,
				setup_charge_commission=setup_charge_commission,
				paymentsModeList=paymentsModeList,
				# transactionapiName=transactionapiName,
				# transactionAPIsList=transactionAPIsList,
				# redirectval=redirectTo,
				error=error,
				editable=editable,
				showData=showData,
				payinPgsList=payinPgsList,
				paymentModeName=paymentModeName,
				txnName=txnName,
				siteName=siteName,
				success_message=success_message,
				form=form
			)

		except Exception as e:
			app.logger.error(traceback.format_exc())
			error = "Unable to fetch setup charge commission details!!"
			flash(error, "error")
			return render_template("super_admin_templates/site_assign_payment_gateways_list.html",commissionsList=commissionsList,
				siteAssignPaymentgatewaysList=siteAssignPaymentgatewaysList,
				siteId=siteId,
				paymentModeId=paymentModeId,
				settlementType=settlementType,
				# subPaymentsModeList=subPaymentsModeList,
				setup_charge_commission=setup_charge_commission,
				paymentsModeList=paymentsModeList,
				# transactionAPIsList=transactionAPIsList,
				# transactionapiName=transactionapiName,
				# redirectval=redirectTo,
				error=error,
				editable=editable,
				paymentModeName=paymentModeName,
				payinPgsList=payinPgsList,
				txnName=txnName,
				showData=showData,
				siteName=siteName,
				success_message=success_message,
				form=form
				)
	else:
		flash("Staff member does not have given view api setup charge commission permissions!!")
		return redirect(url_for("admin.dashboard"))




@multiple_app_sites.route("/sites_api_upsert_setup_charge_commission_table", methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def sites_api_upsert_setup_charge_commission_table():
	data_status={"responseStatus": 0, "result": 0}
	if not session.get("adminId"):
		return redirect("admin_login")
	adminId = session.get("adminId")
	csrf_token = request.form.get("csrf_token")
	print(csrf_token,"((((((((((((((csrf_token))))))))))))))")
	latitude = request.form.get("latitude", "")
	longitude = request.form.get("longitude", "")
	loginBrowser = request.headers.get("Sec-Ch-Ua")
	if loginBrowser:
		loginBrowseData = loginBrowser.split(";")
		browser = loginBrowseData[0]
	else:
		loginBrowseData = request.headers.get('User-Agent').split(";")
		browser = loginBrowseData[0]

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

	actionDate=datetime.datetime.now()
	try:
		paymentModeId = request.form.get("paymentModeId", "S")
		settlementType = request.form.get("settlementType", "A")
		subPaymentModeIdList = request.form.getlist("subPaymentModeId")
		transactionApiIdList = request.form.getlist("transactionApiId")
		statusList = request.form.getlist("status")
		siteId = request.form.get("siteId","")
		# instantSettlementList = request.form.getlist("instantSettlement")

		jsonData = request.form.to_dict(flat=True)
		is_valid, error_list = validate_api_setup_charges_table(transactionApiIdList, statusList)


		if is_valid:

		
			for i in range(len(subPaymentModeIdList)):

				
				subPaymentModeId= subPaymentModeIdList[i]
				transactionApiId= transactionApiIdList[i]
				status= statusList[i]
				# instantSettlement= instantSettlementList[i]
				# print(priceType,"priceType")

				if settlementType == "True":
					instantSettlement = True
				else:
					instantSettlement = False

				if status == "Active":
					status = 1
				else:
					status = 0
				if transactionApiId=="":
					transactionApiId=None
				else:
					transactionApiId=ObjectId(transactionApiId)
				existing_record = SiteAssignPaymentgateways.objects(paymentModeId=paymentModeId,
					subPaymentModeId=subPaymentModeId,siteId=siteId,instantSettlement=instantSettlement).first()

				admin_queryset = SuperAdmin.objects(id=adminId).first()

				if not admin_queryset:
					flash("Invalid id!!", "danger")
					data_status["responseStatus"]=4
					return data_status

				message=admin_queryset.userName+" Site assign payment gateways Updated successfully!"
				requestData=[existing_record]
				updatedrequestData=[jsonData]
				save_admin_log_table = save_admin_logs_data(adminId,None,None,"sites_api_upsert_setup_charge_commission_table","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
				if existing_record:
					existing_record.update(
						paymentModeId=ObjectId(paymentModeId),subPaymentModeId=ObjectId(subPaymentModeId),transactionApiId=transactionApiId,status=status,instantSettlement=instantSettlement)
					# flash("updated successfully!", "success")
				else:

					# print("is new record++++++++++++++++++++")
					new_record = SiteAssignPaymentgateways(
						adminId=session.get("adminId"),
						paymentModeId=paymentModeId,
						siteId=siteId,
						subPaymentModeId=subPaymentModeId,
						instantSettlement=instantSettlement,
						createdOn=datetime.datetime.now(),
						status=status
					)
					new_record.save()
					new_record.update(transactionApiId=transactionApiId)
			flash("Site assign payment gateways Updated successfully!", "success")

			data_status["responseStatus"]=1
			return data_status
		else:
			data_status["responseStatus"]=0
			data_status["result"]=error_list
			return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		flash(f"Error in upserting record: {str(e)}", "error")
		data_status["responseStatus"]=4
		return data_status