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


@prepaid_mobile_setup.route("/prepaid_mobile_setup_list",methods=["POST","GET"])
@adminid_access_token_required
@csrf_protect
def prepaid_mobile_setup_list(): 
	data_status = {"responseStatus": 0, "result": ""} 
	try:    
		if not session.get("adminId"):
			return redirect("admin_login")
		
		csrf_token = request.form.get("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()

		adminId = session.get("adminId")
		bbpsMobileSetupDict = {}
		prepaidMobileSetupDict = {}
		prepaidApisList = []
		payinApisList = []
		bbpsApiList=[]  
		form=PrepaidMobileSetupForm(request.form)
		permissionsList = check_permissions(session.get("adminId"),"mobilePrepaidPermission")
		print("========#########=========", permissionsList)
		if "view" in permissionsList:
			# accessToken = session.get("accessToken")
			# print(accessToken,"((((((((accessToken))))))))")
			# check_access_token = access_token_required(adminId,accessToken)
			# if not check_access_token:
			#     flash("Invalid or expired access token. Please log in again.")
			#     return redirect(url_for("admin.admin_login"))
			# print(check_access_token,"((((((((check_access_token))))))))")

			# userId = request.args.get("userId","")
		
			if request.method == "GET":
				bbps_prepaid_mobile_setup_queryset = PrepaidMobileSetup.objects(status__in=[0,1],serviceType="BBPS").first()
				try:
					if bbps_prepaid_mobile_setup_queryset:
						bbpsMobileSetupDict = {
						"enablePrepaid":bbps_prepaid_mobile_setup_queryset.enablePrepaid,
						"serviceType":bbps_prepaid_mobile_setup_queryset.serviceType,
						"prepaidProviderId":str(bbps_prepaid_mobile_setup_queryset.prepaidProviderId.id),
						"prepaidPgId":str(bbps_prepaid_mobile_setup_queryset.prepaidPgId.id),
						"prepaidProviderName":bbps_prepaid_mobile_setup_queryset.prepaidProviderId.apiName,
						"prepaidPgName":bbps_prepaid_mobile_setup_queryset.prepaidProviderId.apiName
						}
					else:
						bbpsMobileSetupDict = {
						"enablePrepaid":False,
						"prepaidProviderId":None,
						"prepaidPgId":None,
						"prepaidProviderName":"",
						"serviceType":"",
						"prepaidPgName":""
						}
				except Exception as e:
					bbpsMobileSetupDict = {
					"enablePrepaid":False,
					"prepaidProviderId":None,
					"prepaidPgId":None,
					"prepaidProviderName":"",
					"serviceType":"",
					"prepaidPgName":""
					}

				prepaidmobile_setup_queryset = PrepaidMobileSetup.objects(status__in=[0,1],serviceType="Prepaid").first()
				try:
					if prepaidmobile_setup_queryset:
						prepaidMobileSetupDict = {
						"enablePrepaid":prepaidmobile_setup_queryset.enablePrepaid,
						"serviceType":prepaidmobile_setup_queryset.serviceType,
						"prepaidProviderId":str(prepaidmobile_setup_queryset.prepaidProviderId.id),
						"prepaidPgId":str(prepaidmobile_setup_queryset.prepaidPgId.id),
						"prepaidProviderName":prepaidmobile_setup_queryset.prepaidProviderId.apiName,
						"prepaidPgName":prepaidmobile_setup_queryset.prepaidProviderId.apiName
						}
					else:
						prepaidMobileSetupDict = {
						"enablePrepaid":False,
						"prepaidProviderId":None,
						"prepaidPgId":None,
						"prepaidProviderName":"",
						"serviceType":"",
						"prepaidPgName":""
						}
				except Exception as e:
					prepaidMobileSetupDict = {
					"enablePrepaid":False,
					"prepaidProviderId":None,
					"prepaidPgId":None,
					"prepaidProviderName":"",
					"serviceType":"",
					"prepaidPgName":""
					}
				
				bbps_apis_queryset = TransactionAPI.objects(transactionType="Service",status=1).order_by('-id')
				for each_bbps_api in bbps_apis_queryset:
					apiDict = fetching_transaction_api_details(each_bbps_api)
					bbpsApiList.append(apiDict)
	 
				prepaid_apis_queryset = TransactionAPI.objects(transactionType="Prepaid",status=1).order_by('-id')
				for each_prepaid_api in prepaid_apis_queryset:
					apiDict = fetching_transaction_api_details(each_prepaid_api)
					prepaidApisList.append(apiDict)

				payin_apis_queryset = TransactionAPI.objects(transactionType="PaymentGateway",status=1).order_by('-id')
				for each_payin_api in payin_apis_queryset:
					apiDict = fetching_transaction_api_details(each_payin_api)
					payinApisList.append(apiDict)
				print("**************before render*****")
				return render_template("super_admin_templates/prepaid_mobile_setup_list.html",
					bbpsMobileSetupDict=bbpsMobileSetupDict,
					prepaidMobileSetupDict=prepaidMobileSetupDict,
					prepaidApisList=prepaidApisList,
					payinApisList=payinApisList,
					bbpsApiList=bbpsApiList,
					form=form
					)
				
			if request.method == "POST":
				enablePrepaid = request.form.get("enablePrepaid",False)
				prepaidProviderId = request.form.get("prepaidProviderId","")
				serviceType = request.form.get("serviceType","")
				prepaidPgId = request.form.get("prepaidPgId",None)
				print("((((((((((((((((((((((((((((serviceType))))))))))))))))))))))))))))",serviceType)
				print("((((((((((((((((((((((((((((reqyest))))))))))))))))))))))))))))",request.form)
				jsonData = request.form.to_dict(flat=True)
				requestData = [jsonData]
				updatedrequestData = [jsonData]
				# form.prepaidPgId.choices = [(str(api.id), api.apiName) for api in TransactionAPI.objects(transactionType="PaymentGateway", status=1)]
				# form.prepaidProviderId.choices = [(str(api.id), api.apiName) for api in TransactionAPI.objects(transactionType="Prepaid", status=1)]

				if form.validate():
					print("Form is valid!")
					print(prepaidPgId,"(((((((prepaidPgId)))))))")
					if request.form.get("enablePrepaid") == "True":
						if not prepaidProviderId:
							data_status['responseStatus']=2
							data_status['result']="Required fields are missing!!"
							return data_status
						
					try:
						admin_queryset = SuperAdmin.objects(id=adminId,status=1).first()
						
						if enablePrepaid == "True":
							enablePrepaid=True
						else:
							enablePrepaid=False

						# prepaid_mobile_setup_queryset = PrepaidMobileSetup.objects(prepaidProviderId=prepaidProviderId,prepaidPgId=prepaidPgId,status__in=[0,1]).first()
						prepaid_mobile_setup_queryset = PrepaidMobileSetup.objects(status__in=[0,1],serviceType=serviceType).first()
						existing_record = prepaid_mobile_setup_queryset.to_json()
						message=admin_queryset.userName+" "+prepaid_mobile_setup_queryset.prepaidProviderId.apiName+" Prepaid mobile setup configuration successfully!"
						requestData=[prepaid_mobile_setup_queryset]
						updatedrequestData=[jsonData]
						save_admin_log_table = save_admin_logs_data(adminId,None,None,"prepaid_mobile_setup_list","update",actionDate,client_ip,browser,message,requestData,updatedrequestData,latitude,longitude) 
						if prepaid_mobile_setup_queryset:
							if prepaidPgId:
								prepaidPgId = ObjectId(prepaidPgId)
							else:
								prepaidPgId=None
		  
							prepaid_mobile_setup_queryset.update(
								enablePrepaid=enablePrepaid,
								serviceType=serviceType,
								prepaidProviderId=ObjectId(prepaidProviderId),
								prepaidPgId=prepaidPgId,
								updatedOn=datetime.datetime.now()
								)
						else:
							save_prepaid_mobile_setup = PrepaidMobileSetup(
								enablePrepaid=enablePrepaid,
								serviceType=serviceType,
								prepaidPgId=prepaidPgId,
								prepaidProviderId=prepaidProviderId,
								createdOn=datetime.datetime.now(),
								status=1
								).save()

						flash("Prepaid mobile setup configuration successfully!","success")
						data_status['responseStatus']=1
						return data_status 
					except Exception as e:
						flash("Unable to save profile details.", "danger")
						app.logger.error(traceback.format_exc())
						data_status["responseStatus"] = 4
						return data_status
				else:
					data_status['result']=form.errors
					print("(((((((((((((((((((())))))))))))))))))))",form.errors)
					print("Form validation failed!")
					return data_status
			
			else:
				data_status['responseStatus']=4
				data_status['result']="Invalid Request"
				return data_status
		else:
			flash("The staff member does not have permission to view Prepaid mobile setup details.", "danger")
			data_status['responseStatus']=4
			return data_status
			
	except Exception as e:
		app.logger.error(traceback.format_exc())
		error = "Unable to save prepaid mobile setup configuration details!!"
		return render_template("super_admin_templates/prepaid_mobile_setup_list.html",error=error,prepaidMobileSetupDict={},bbpsMobileSetupDict={},prepaidApisList=[],payinApisList=[])


# @prepaid_mobile_setup.route("/prepaid_mobile_setup_list", methods=["POST", "GET"])
# @adminid_access_token_required
# @csrf_protect
# def prepaid_mobile_setup_list():
#     data_status = {"responseStatus": 0, "result": ""}
#     try:
#         if not session.get("adminId"):
#             return redirect("admin_login")

#         # CSRF token fetch, if needed
#         csrf_token = request.form.get("csrf_token")
#         adminId = session.get("adminId")
#         prepaidMobileSetupDict = {}
#         prepaidApisList = []
#         payinApisList = []
#         form = PrepaidMobileSetupForm(request.form)
#         permissionsList = check_permissions(session.get("adminId"), "mobilePrepaidPermission")
#         print("========#########=========", permissionsList)
		
#         if "view" in permissionsList:
#             if request.method == "GET":
#                 prepaid_mobile_setup_queryset = PrepaidMobileSetup.objects(status__in=[0, 1]).first()
#                 try:
#                     if prepaid_mobile_setup_queryset:
#                         prepaidMobileSetupDict = {
#                             "enablePrepaid": prepaid_mobile_setup_queryset.enablePrepaid,
#                             "prepaidProviderId": str(prepaid_mobile_setup_queryset.prepaidProviderId.id),
#                             "prepaidPgId": str(prepaid_mobile_setup_queryset.prepaidPgId.id),
#                             "prepaidProviderName": prepaid_mobile_setup_queryset.prepaidProviderId.apiName,
#                             "prepaidPgName": prepaid_mobile_setup_queryset.prepaidProviderId.apiName
#                         }
#                     else:
#                         prepaidMobileSetupDict = {
#                             "enablePrepaid": False,
#                             "prepaidProviderId": None,
#                             "prepaidPgId": None,
#                             "prepaidProviderName": "",
#                             "prepaidPgName": ""
#                         }
#                 except Exception as e:
#                     prepaidMobileSetupDict = {
#                         "enablePrepaid": False,
#                         "prepaidProviderId": None,
#                         "prepaidPgId": None,
#                         "prepaidProviderName": "",
#                         "prepaidPgName": ""
#                     }

#                 prepaid_apis_queryset = TransactionAPI.objects(transactionType="Prepaid", status=1).order_by('-id')
#                 for each_prepaid_api in prepaid_apis_queryset:
#                     apiDict = fetching_transaction_api_details(each_prepaid_api)
#                     prepaidApisList.append(apiDict)

#                 payin_apis_queryset = TransactionAPI.objects(transactionType="PaymentGateway", status=1).order_by('-id')
#                 for each_payin_api in payin_apis_queryset:
#                     apiDict = fetching_transaction_api_details(each_payin_api)
#                     payinApisList.append(apiDict)
				
#                 print("**************before render*****")

#                 return render_template("super_admin_templates/prepaid_mobile_setup_list.html",
#                     prepaidMobileSetupDict=prepaidMobileSetupDict,
#                     prepaidApisList=prepaidApisList,
#                     payinApisList=payinApisList,
#                     form=form
#                 )

#             if request.method == "POST":
#                 enablePrepaid = request.form.get("enablePrepaid", False)
#                 prepaidProviderId = request.form.get("prepaidProviderId", "")
#                 prepaidPgId = request.form.get("prepaidPgId", "")

#                 # Set choices before validation
#                 form.prepaidPgId.choices = [(str(api.id), api.apiName) for api in TransactionAPI.objects(transactionType="PaymentGateway", status=1)]
#                 form.prepaidProviderId.choices = [(str(api.id), api.apiName) for api in TransactionAPI.objects(transactionType="Prepaid", status=1)]

#                 if form.validate():
#                     print(prepaidPgId, "(((((((prepaidPgId)))))))")

#                     if request.form.get("enablePrepaid") == "True" and (not prepaidProviderId or not prepaidPgId):
#                         data_status['responseStatus'] = 2
#                         data_status['result'] = "Required fields are missing!!"
#                         return data_status

#                     try:
#                         if enablePrepaid == "True":
#                             enablePrepaid = True
#                         else:
#                             enablePrepaid = False

#                         prepaid_mobile_setup_queryset = PrepaidMobileSetup.objects(status__in=[0, 1]).first()
#                         if prepaid_mobile_setup_queryset:
#                             prepaid_mobile_setup_queryset.update(
#                                 enablePrepaid=enablePrepaid,
#                                 prepaidProviderId=ObjectId(prepaidProviderId),
#                                 prepaidPgId=ObjectId(prepaidPgId),
#                                 updatedOn=datetime.datetime.now()
#                             )
#                         else:
#                             PrepaidMobileSetup(
#                                 enablePrepaid=enablePrepaid,
#                                 prepaidPgId=prepaidPgId,
#                                 prepaidProviderId=prepaidProviderId,
#                                 createdOn=datetime.datetime.now(),
#                                 status=1
#                             ).save()

#                         flash("Prepaid mobile setup configuration successfully!")
#                         data_status['responseStatus'] = 1
#                         return data_status

#                     except Exception as e:
#                         flash("Unable to save profile details.", "error")
#                         app.logger.error(traceback.format_exc())
#                         data_status["responseStatus"] = 4
#                         return data_status
#                 else:
#                     data_status['result'] = form.errors
#                     print("Form errors:", form.errors)
#                     return data_status
#             else:
#                 data_status['responseStatus'] = 4
#                 data_status['result'] = "Invalid Request"
#                 return data_status
#         else:
#             print("*************ERROR***********")
#             flash("Staff member does not have given view prepaid mobile setup permissions!!")
#             return redirect(url_for("prepaid_mobile_setup.prepaid_mobile_setup_list"))
#     except Exception as e:
#         app.logger.error(traceback.format_exc())
#         error = "Unable to save prepaid mobile setup configuration details!!"
#         return render_template("super_admin_templates/prepaid_mobile_setup_list.html", error=error, prepaidMobileSetupDict={}, prepaidApisList=[], payinApisList=[],form=form)
