from appservices.common.util import *

payment_buttons = Blueprint("payment_buttons",__name__)

@payment_buttons.route("/create_payment_button",methods=["POST"])
@user_required
def create_payment_button():
	data_status = {"responseStatus":0,"result":""}
	userId = request.json.get("userId","")
	email = request.json.get("email","")
	mobileNumber = request.json.get("mobileNumber","")
	amount = request.json.get("amount",0)
	buttonPurpose = request.json.get("buttonPurpose","")
	buttonLinkExpDate = request.json.get("buttonLinkExpDate","")
	buttonColour = request.json.get("buttonColour","")
	textColour = request.json.get("textColour","")
	buttonName = request.json.get("buttonName","")

	try:
		if userId and email and amount and mobileNumber and buttonLinkExpDate and textColour and buttonName:
			payment_button_table = PaymentButtons(
				userId=userId,
				email=email,
				mobileNumber=mobileNumber,
				amount=amount,
				buttonPurpose=buttonPurpose,
				buttonLinkExpDate=buttonLinkExpDate,
				buttonColour=buttonColour,
				textColour=textColour,
				buttonName=buttonName,
				createdOn=datetime.datetime.now(),
				status=1
				)
			save_table=payment_button_table.save()
			paymentButtonId = str(save_table.id)

			str2hash = userId+paymentButtonId
			result = hashlib.md5(str2hash.encode())
			convertMd5String = result.hexdigest()

			save_table.update(buttonLink=convertMd5String)

			data_status["responseStatus"]=1
			data_status["result"]="Payment button generated successfully!"
			return data_status
		else:
			data_status["result"]="Required fields are missing!!"
			return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		data_status["result"]="Unable to create payment button!!"
		return data_status

@payment_buttons.route("/update_payment_button",methods=["POST"])
@user_required
def update_payment_button():
	data_status = {"responseStatus":0,"result":""}
	paymentButtonId = request.json.get("paymentButtonId","")
	userId = request.json.get("userId","")
	email = request.json.get("email","")
	mobileNumber = request.json.get("mobileNumber","")
	amount = request.json.get("amount",0)
	buttonPurpose = request.json.get("buttonPurpose","")
	buttonLinkExpDate = request.json.get("buttonLinkExpDate","")
	buttonColour = request.json.get("buttonColour","")
	textColour = request.json.get("textColour","")
	buttonName = request.json.get("buttonName","")

	try:
		if paymentButtonId and userId and email and amount and mobileNumber and buttonLinkExpDate:
			payment_button_queryset = PaymentButtons.objects(id=paymentButtonId,userId=userId,status__in=[1]).first()
			if not payment_button_queryset:
				data_status["result"]="Invaild payment button id!!"
				return data_status

			payment_button_queryset.update(
				email=email,
				mobileNumber=mobileNumber,
				amount=amount,
				buttonPurpose=buttonPurpose,
				buttonLinkExpDate=buttonLinkExpDate,
				buttonColour=buttonColour,
				textColour=textColour,
				buttonName=buttonName
				)

			data_status["responseStatus"]=1
			data_status["result"]="Payment button updated successfully!"
			return data_status
		else:
			data_status["result"]="Required fields are missing!!"
			return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		data_status["result"]="Unable to update payment button!!"
		return data_status

@payment_buttons.route("/activate_or_deactivate_payment_button_status",methods=["POST"])
@user_required
def activate_or_deactivate_payment_button_status():
	data_status = {"responseStatus":0,"result":""}
	paymentButtonId = request.json.get("paymentButtonId","")
	userId = request.json.get("userId","")

	try:
		if paymentButtonId and userId:
			payment_button_queryset = PaymentButtons.objects(id=paymentButtonId,userId=userId,status__in=[0,1]).first()
			if not payment_button_queryset:
				data_status["result"]="Invaild payment button id!!"
				return data_status

			if payment_button_queryset.status == 0:
				payment_button_queryset.update(status=1)
				data_status["result"]="Payment button status activated successfully!"
			elif payment_button_queryset.status == 1:
				payment_button_queryset.update(status=0)
				data_status["result"]="Payment button status deactivated successfully!"

			data_status["responseStatus"]=1
			return data_status
		else:
			data_status["result"]="Required fields are missing!!"
			return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		data_status["result"]="Unable to update payment button status!!"
		return data_status

@payment_buttons.route("/delete_payment_button",methods=["POST"])
@user_required
def delete_payment_button():
	data_status = {"responseStatus":0,"result":""}
	paymentButtonId = request.json.get("paymentButtonId","")
	userId = request.json.get("userId","")

	try:
		if paymentButtonId and userId:
			payment_button_queryset = PaymentButtons.objects(id=paymentButtonId,userId=userId,status__in=[0,1]).first()
			if not payment_button_queryset:
				data_status["result"]="Invaild payment button id!!"
				return data_status
			payment_button_queryset.update(status=2)

			data_status["responseStatus"]=1
			data_status["result"]="Payment button deleted successfully!"
			return data_status
		else:
			data_status["result"]="Required fields are missing!!"
			return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		data_status["result"]="Unable to delete payment button!!"
		return data_status

@payment_buttons.route("/single_view_payment_button",methods=["POST"])
@user_required
def single_view_payment_button():
	data_status = {"responseStatus":0,"result":""}
	paymentButtonId = request.json.get("paymentButtonId","")
	userId = request.json.get("userId","")

	try:
		if paymentButtonId and userId:
			payment_button_queryset = PaymentButtons.objects(id=paymentButtonId,userId=userId,status__in=[0,1]).first()
			if not payment_button_queryset:
				data_status["result"]="Invaild payment button id!!"
				return data_status

			data_status["responseStatus"]=1
			data_status["result"]="Payment button fetched data successfully!"
			data_status["paymentButtonDetails"]=fetching_payment_button_details(payment_button_queryset)
			return data_status
		else:
			data_status["result"]="Required fields are missing!!"
			return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		data_status["result"]="Unable to fetch payment button data!!"
		return data_status

@payment_buttons.route("/view_all_payment_buttons",methods=["POST"])
@user_required
def view_all_payment_buttons():
	data_status = {"responseStatus":0,"result":""}
	userId = request.json.get("userId","")
	startDate = request.json.get("startDate","")
	endDate = request.json.get("endDate","")
	selectFilter = request.json.get("selectFilter","All") # "Acive" or "Deactive"
	paymenButtonsList=[]
	try:
		try:
			currentDate = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
			start_date = startDate + " 00:00:00"
			end_date = endDate + " 23:59:59"
			
			startDate = datetime.datetime.strptime(start_date, "%m-%d-%Y %H:%M:%S")
			endDate = datetime.datetime.strptime(end_date, "%m-%d-%Y %H:%M:%S")
		except ValueError as e:
			app.logger.error(traceback.format_exc())

		payment_buttons_queryset = PaymentButtons.objects(userId=userId).order_by("-id").all()
		if selectFilter == "All" and startDate and endDate:
			payment_buttons_queryset = payment_buttons_queryset.filter(
				Q(createdOn__gte=startDate,createdOn__lte=endDate,status__in=[0,1]))
		elif selectFilter == "Active" and startDate and endDate:
			payment_buttons_queryset = payment_buttons_queryset.filter(
				Q(createdOn__gte=startDate,createdOn__lte=endDate,status__in=[1]))
		elif selectFilter == "Deactive":
			payment_buttons_queryset = payment_buttons_queryset.filter(
				Q(createdOn__gte=startDate,createdOn__lte=endDate,status__in=[0]))

		for each_payment_button in payment_buttons_queryset:
			paymenButtonDict = fetching_payment_button_details(each_payment_button)
			paymenButtonsList.append(paymenButtonDict)
		data_status["responseStatus"]=1
		data_status["result"]="Payment buttons fetched data successfully!"
		data_status["paymenButtonsList"]=paymenButtonsList
		data_status["totalPaymentsButtonsCount"]=payment_buttons_queryset.count()
		data_status["totalRevenuePaymentButtons"]=0
		data_status["activePaymentButtons"]=0
		return data_status
	except Exception as e:
		app.logger.error(traceback.format_exc())
		data_status["result"]="Unable to fetch payment buttons data!!"
		return data_status