from django.shortcuts import render
from django.views.generic.base import TemplateView
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login ,logout
from django.urls import reverse
from django.shortcuts import redirect
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from .models import *
import urllib.request
import json
from django.conf import settings
import smtplib
from smtplib import SMTPException
from email.message import EmailMessage
import os,random,string
from PIL import Image
from .decorator import user_redirect
from django.utils.decorators import method_decorator
import csv
from django.contrib import messages
import datetime, requests
from django.core.paginator import Paginator
from time import ctime
import pyqrcode, png
from pyqrcode import QRCode
from django.core.mail import send_mail
import sys
from .commonfunctions import getbalance
class CreateAddress(TemplateView):
	template_name = ('userapp/transactionhistory.html')
	def get_context_data(self, *args, **kwargs):
		context = super(CreateAddress, self).get_context_data(*args, **kwargs)
		print(context)
		try:
			user_obj = User.objects.filter(username = 'sterling2p@yahoo.com').first()
			usercoininfo_obj = UserCoinInfo.objects.filter(user_id = user_obj).first()
			print(usercoininfo_obj.coinaddress)
			# all_users = User.objects.all()
			# print(len(all_users))
			# ex = 0
			# nex = 0
			# for user in all_users:
			# 	usercoininfo_obj = UserCoinInfo.objects.filter(user_id = user)
			# 	if usercoininfo_obj:
			# 		ex += 1
			# 	else:
			# 		nex += 1
			# 		url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Create_New_Address?ACCOUNT_NAME=' + user.username + '&PASSWORD=0nly@Coin123'
			# 		resp = requests.get(url)
			# 		if resp.status_code == 200:
			# 			json_resp = json.loads(resp.text)
			# 			if json_resp:
			# 				if json_resp['Success'] == 1:
			# 					coinaddress = json_resp['Result']

			# 					url = pyqrcode.create(content = coinaddress)
			# 					nm = str(user.id) + '_' + user.username + '_qrcode.png'
			# 					print('nm = ', nm)
			# 					url.png(settings.MEDIA_ROOT + '/' + nm, scale = 8)

			# 					usercoininfo_obj = UserCoinInfo.objects.create(user_id_id=user.id, coinaddress = coinaddress, qrcode = '/media/' + nm)
			# 					usercoininfo_obj.save()



			# print(ex)
			# print(nex)
		except Exception as e:
			print(e)


		return context



class TransactionHistory(TemplateView):
	template_name = ('userapp/transactionhistory.html')
	def get_context_data(self, *args, **kwargs):
		context = super(TransactionHistory, self).get_context_data(*args, **kwargs)
		print(context)
		# for key, value in self.request.session.items():
		# 	print('{} => {}'.format(key, value))
		try:
			if self.request.session.has_key('_auth_user_id'):
				userid = self.request.session['_auth_user_id']
				usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = userid).first()
				if usercoininfo_obj:
					coinaddress_val = usercoininfo_obj.coinaddress
					url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Transaction_History_By_Address?ADDRESS= ' + coinaddress_val + '&TOTAL_RECORD=10'
					print(url)
					resp = requests.get(url)
					if resp.status_code == 200:
						json_resp = json.loads(resp.text)
						if json_resp:
							print("json_resp['Success'] = ", json_resp['Success'])
							if json_resp['Success'] == 1:
								# availablecoin = json_resp['Result']
								all_transactions = []
								for transaction in json_resp['Result']['TRANSACTION_DETAIL']:
									all_transactions.append({
										'fromaddress' : transaction['FROM_ADDRESS'],
										'toaddress' : transaction['TO_ADDRESS'],
										'amount' : transaction['AMOUNT'],
										'transactionid' : transaction['TX_ID'],
										'confirmation' : transaction['CONFIRMATION'],
										'message' : transaction['MESSAGE'],
										'time' : ctime(int(transaction['TIME'])),
										})
								context['all_transactions'] = all_transactions
								# context['message'] = 'Records found'
							elif json_resp['Success'] == 0:
								print(json_resp)
								if json_resp['Error'] == 'Data not found':
									context['message'] = 'Record not found'
								else:
									context['message'] = 'Internal Server Error'
							else:
								context['message'] = 'Internal Server Error'
						else:
							context['message'] = 'Internal Server Error'
					else:
						context['message'] = 'Internal Server Error'
				else:
					context['message'] = 'You do not have maza coin address.'
			else:
				context['message'] = 'User not logged in.'
		except Exception as e:
			print(e)
			context['message'] = 'Internal Server Error'
		# print(context['message'])

		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)

			context['coinbalance'] = coinbalance
		return context



class GetCoinBalance(TemplateView):
	template_name = ('userapp/getcoinbalance.html')
	def get_context_data(self, *args, **kwargs):
		context = super(GetCoinBalance, self).get_context_data(*args, **kwargs)
		# for key, value in self.request.session.items():
		# 	print('{} => {}'.format(key, value))
		context['availablecoin'] = 0
		mazacredits = 0.0
		mazacoins = 0.0
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			userinfo_obj = UserInfo.objects.filter(user_id_id = userid).first()
			if userinfo_obj:
				mazacredits = userinfo_obj.coins
			usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = userid).first()
			if usercoininfo_obj:
				coinaddress_val = usercoininfo_obj.coinaddress
				# print('\n')
				# print(coinaddress_val)
				url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Get_Balance_By_Addres?ADDRESS=' + coinaddress_val + '&PASSWORD=0nly@Coin123'
				resp = requests.get(url)
				if resp.status_code == 200:
					json_resp = json.loads(resp.text)
					if json_resp:
						if json_resp['Success'] == 1:
							mazacoins = json_resp['Result']
							context['availablecoin'] = float(mazacredits) + float(mazacoins)
						elif json_resp['Success'] == 0:
							pass
		# print('mazacredits = ', mazacredits)
		# print('mazacoins = ', mazacoins)
		print('context["availablecoin"]  =  ',context["availablecoin"])
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)

			context['coinbalance'] = coinbalance
		return context


class WithdrawCoin(TemplateView):
	template_name = ('userapp/withdrawcoin.html')
	def get_context_data(self, *args, **kwargs):
		context = super(WithdrawCoin, self).get_context_data(*args, **kwargs)
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)

			context['coinbalance'] = coinbalance
		return context

	def post(self,request):
		print('WithdrawCoin - in post')
		try:
			def enteremailgetcoinaddress(email_val):
				user_obj = User.objects.filter(username = settings.ADMIN_EMAIL).first()
				if user_obj:
					usercoininfo_obj = UserCoinInfo.objects.filter(user_id = user_obj).first()
					if usercoininfo_obj:
						if usercoininfo_obj.coinaddress:
							return('success',usercoininfo_obj.coinaddress)
						else:
							return('error','')
					else:
						return('error','')
				else:
					return('error','')
			tomazaaddress_val = request.POST.get('tomazaaddress')
			noofcoins_val = request.POST.get('noofcoins')

			if settings.ADMIN_EMAIL:
				status, message = enteremailgetcoinaddress(settings.ADMIN_EMAIL)
				if status == 'error':
					return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
				elif status == 'success':
					frommazaaddress_val = message
					if frommazaaddress_val == tomazaaddress_val:
						return JsonResponse({'status' : 400, 'message' : 'You can not send coins to yourself.'})
					if self.request.session.has_key('_auth_user_id'):
						userid = self.request.session['_auth_user_id']
						userinfo_obj = UserInfo.objects.filter(user_id_id = userid).first()
						if userinfo_obj:
							print('maza credits = ', userinfo_obj.coins)
							print(type(userinfo_obj.coins))
							# sample = False
							# if userinfo_obj.coins == 0:
							# 	sample = True
							if True:
								print('in if ')
								fees_val = '0.0005'
								if float(userinfo_obj.coins) < float(noofcoins_val):
									print("Requested coins are greater than maza credits")
									availablecoin = 0.0
									usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = userid).first()
									if usercoininfo_obj:
										coinaddress_val = usercoininfo_obj.coinaddress
										url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Get_Balance_By_Addres?ADDRESS=' + coinaddress_val + '&PASSWORD=0nly@Coin123'
										resp = requests.get(url)
										if resp.status_code == 200:
											json_resp = json.loads(resp.text)
											if json_resp:
												if json_resp['Success'] == 1:
													availablecoin = json_resp['Result']
													# context['availablecoin'] = availablecoin
												elif json_resp['Success'] == 0:
													pass
										if float(availablecoin)+float(userinfo_obj.coins) < float(noofcoins_val):
											return JsonResponse({'status' : 400, 'message' : 'You can withdraw '+ str(float(availablecoin)+float(userinfo_obj.coins)) +' coins only.'})
										else:
											totalcoinstobetransfer = str(float(noofcoins_val) - float(userinfo_obj.coins))
											totalcreditstobetransfer = str(float(userinfo_obj.coins))
											totransfernoofcoins_val = str(float(noofcoins_val))
											print("totransfernoofcoins_val = ",totransfernoofcoins_val)
											print("totalcreditstobetransfer = ",totalcreditstobetransfer)
											print("totalcoinstobetransfer = ",totalcoinstobetransfer)
											if userinfo_obj.coins:
												url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Send_Transaction_By_Address?FROM_ADDRESS=' + frommazaaddress_val + '&TO_ADDRESS=' + tomazaaddress_val + '&AMOUNT=' + totalcreditstobetransfer + '&FEES=' + fees_val + '&PASSWORD=0nly@Coin123'
												print('\n'+ url + '\n')
												resp = requests.get(url)
												if resp.status_code == 200:
													json_resp = json.loads(resp.text)
													if json_resp:
														print("json_resp['Success'] = ", json_resp['Success'])
														if json_resp['Success'] == 1:
															userinfo_obj.coins = userinfo_obj.coins - int(float(totalcreditstobetransfer))
															userinfo_obj.save()
															print('credits tranferred successfully')

														elif json_resp['Success'] == 0:
															return JsonResponse({'status' : 400, 'message' : json_resp['Error']})
													else:
														return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
												else:
													return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})


											frommazaaddress_val = coinaddress_val
											# print('frommazaaddress_val = ', frommazaaddress_val)
											# print('tomazaaddress_val = ', tomazaaddress_val)
											if frommazaaddress_val == tomazaaddress_val:
												return JsonResponse({'status' : 200, 'message' : 'Transaction completed successfully'})
											else:
												print('\n')
												# print('frommazaaddress_val = ', frommazaaddress_val)
												# print('tomazaaddress_val = ', tomazaaddress_val)
												# print('totalcoinstobetransfer = ', totalcoinstobetransfer)
												coinsminusfees = str(float(totalcoinstobetransfer)-float(fees_val))
												url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Send_Transaction_By_Address?FROM_ADDRESS=' + frommazaaddress_val + '&TO_ADDRESS=' + tomazaaddress_val + '&AMOUNT=' + coinsminusfees + '&FEES=' + fees_val + '&PASSWORD=0nly@Coin123'
												print('\n'+ url + '\n')
												resp = requests.get(url)
												if resp.status_code == 200:
													json_resp = json.loads(resp.text)
													if json_resp:
														print("json_resp['Success'] = ", json_resp['Success'])
														if json_resp['Success'] == 1:
															pass
														elif json_resp['Success'] == 0:
															return JsonResponse({'status' : 400, 'message' : json_resp['Error']})
													else:
														return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
												else:
													return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
									return JsonResponse({'status' : 200, 'message' : 'Transaction completed successfully'})
								else:
									totransfernoofcoins_val = str(float(noofcoins_val))
									# print('frommazaaddress_val = ', frommazaaddress_val)
									# print('tomazaaddress_val = ', tomazaaddress_val)
									# print('totransfernoofcoins_val = ', totransfernoofcoins_val)
									url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Send_Transaction_By_Address?FROM_ADDRESS=' + frommazaaddress_val + '&TO_ADDRESS=' + tomazaaddress_val + '&AMOUNT=' + totransfernoofcoins_val + '&FEES=' + fees_val + '&PASSWORD=0nly@Coin123'
									print('\n'+ url + '\n')
									resp = requests.get(url)
									if resp.status_code == 200:
										json_resp = json.loads(resp.text)
										if json_resp:
											print("json_resp['Success'] = ", json_resp['Success'])
											if json_resp['Success'] == 1:
												availablecoin = json_resp['Result']
												userinfo_obj.coins = userinfo_obj.coins - int(noofcoins_val)
												userinfo_obj.save()
												return JsonResponse({'status' : 200, 'message' : 'Transaction completed successfully'})
											elif json_resp['Success'] == 0:
												return JsonResponse({'status' : 400, 'message' : json_resp['Error']})
										else:
											return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
									else:
										return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
							else:
								return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
						else:
							return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
					else:
						return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
			else:
				return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})

			# sys.exit()
			# if self.request.session.has_key('_auth_user_id'):
			# 	userid = self.request.session['_auth_user_id']

			# 	usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = userid).first()
			# 	if usercoininfo_obj:
			# 		frommazaaddress_val = usercoininfo_obj.coinaddress
			# 		# print('frommazaaddress_val = ',frommazaaddress_val)
			# 		# print('tomazaaddress_val = ',tomazaaddress_val)
			# 		# print(noofcoins_val)
			# 		if frommazaaddress_val == tomazaaddress_val:
			# 			return JsonResponse({'status' : 400, 'message' : 'You can not send coins to yourself.'})
			# 		url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Send_Transaction_By_Address?FROM_ADDRESS=' + frommazaaddress_val + '&TO_ADDRESS=' + tomazaaddress_val + '&AMOUNT=' + noofcoins_val + '&FEES=0.0005&PASSWORD=0nly@Coin123'
			# 		resp = requests.get(url)
			# 		if resp.status_code == 200:
			# 			json_resp = json.loads(resp.text)
			# 			if json_resp:
			# 				print("json_resp['Success'] = ", json_resp['Success'])
			# 				if json_resp['Success'] == 1:
			# 					availablecoin = json_resp['Result']
			# 					return JsonResponse({'status' : 200, 'message' : 'Transaction completed successfully'})
			# 				elif json_resp['Success'] == 0:
			# 					return JsonResponse({'status' : 400, 'message' : json_resp['Error']})
			# 			else:
			# 				return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
			# 		else:
			# 			return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
			# 	else:
			# 		return JsonResponse({'status' : 401, 'message' : 'You do not have maza coin address.'})
			# return JsonResponse({'status' : 401, 'message' : 'Operation not allowed'})
		except Exception as e:
			print(e)
			return JsonResponse({'status' : 500, 'message' : 'Internal Server Error'})
		user = User.objects.filter(username=username).first()
		if user:
			newpass = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(8)])
			print('newpass',newpass)
			user.set_password(newpass)
			user.save()
			print('saved.')
			sender = 'itsmepython21@gmail.com'
			receiver = username
			print('email',username)
			message = 'Hello '+str(user.first_name)+ ', Your New Password is: ' +str(newpass)
			print('message',message)
			try:
				server = smtplib.SMTP('smtp.gmail.com', 587)
				server.starttls()
				server.login('peytontek@gmail.com', 'dzwiolwvkiwzozyj')
				# server.login('itsmepython21@gmail.com', 'hidgptqclxmznnvp')
				msg = EmailMessage()
				msg.set_content(message)
				msg['Subject'] = 'NEW PASSWORD'
				msg['From'] = 'itsmepython21@gmail.com'
				msg['To'] = str(receiver)
				server.send_message(msg)
				print('successfully sent.')
				return HttpResponse('1')
			except Exception as e:
				print('error is :',e)
				return HttpResponse('2')
		else:
			print("not exist")
			return HttpResponse('0')

class DepositCoin(TemplateView):
	template_name = ('userapp/depositcoin.html')
	def get_context_data(self, *args, **kwargs):
		context = super(DepositCoin, self).get_context_data(*args, **kwargs)
		try:
			if self.request.session.has_key('_auth_user_id'):
				userid = self.request.session['_auth_user_id']
				usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = userid).first()
				if usercoininfo_obj:
					coinaddress_val = usercoininfo_obj.coinaddress
					print(coinaddress_val)
					qrcode = ''
					if usercoininfo_obj.qrcode:
						qrcode = str(settings.BASE_URL) + usercoininfo_obj.qrcode.name
					print(qrcode)
					context['coinaddress'] = coinaddress_val
					print(qrcode)
					context['qrcode'] = qrcode
		except Exception as e:
			print('error is :',e)
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)

			context['coinbalance'] = coinbalance
		return context

	def post(self,request):
		print('in post')
		username = request.POST.get('username')
		user = User.objects.filter(username=username).first()
		if user:
			newpass = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(8)])
			print('newpass',newpass)
			user.set_password(newpass)
			user.save()
			print('saved.')
			sender = 'itsmepython21@gmail.com'
			receiver = username
			print('email',username)
			message = 'Hello '+str(user.first_name)+ ', Your New Password is: ' +str(newpass)
			print('message',message)
			try:
				server = smtplib.SMTP('smtp.gmail.com', 587)
				server.starttls()
				server.login('peytontek@gmail.com', 'dzwiolwvkiwzozyj')
				# server.login('itsmepython21@gmail.com', 'hidgptqclxmznnvp')
				msg = EmailMessage()
				msg.set_content(message)
				msg['Subject'] = 'NEW PASSWORD'
				msg['From'] = 'itsmepython21@gmail.com'
				msg['To'] = str(receiver)
				server.send_message(msg)
				print('successfully sent.')
				return HttpResponse('1')
			except Exception as e:
				print('error is :',e)
				return HttpResponse('2')
		else:
			print("not exist")
			return HttpResponse('0')


# class UserPost(TemplateView):
# 	template_name = ('userapp/add-post-image.html')

# 	@method_decorator(user_redirect)
# 	def dispatch(self, request, *args, **kwargs):
# 		return super(UserPost, self).dispatch(request, *args, **kwargs)

# 	def post(self,request):
# 		print('DATA:',request.POST)
# 		# check_values = request.POST.getlist('checkbox-for-selected-imgae')
# 		enter_image = request.FILES.get('image')
# 		user_id = request.POST.get('user_id')
# 		target_users = request.POST.get('targrt-users')
# 		keyboard_id = request.POST.get('select_keyboard_id')


# 		if enter_image and user_id and target_users and keyboard_id :
# 			# if check_values:
# 			# 	ids = str(",".join(map(str,check_values)))
# 			# 	print(ids)
# 			# else:
# 			# 	ids = ''
# 			print('user_id:',user_id)
# 			obj = UserInfo.objects.filter(user_id_id=int(user_id)).first()
# 			if obj:
# 				enter_id = obj.id
# 				obj.coins = int(obj.coins) - (int(target_users) * 2)
# 				obj.save()
# 				print('session:')
# 				print(request.session)
# 				# if self.request.session.has_key('coins'):
# 				if 'coins' in request.session:
# 					request.session['coins']= int(obj.coins)
# 				print('coins changed.')
# 			else:
# 				enter_id = None
# 			try:
# 				print('enter_id',enter_id)
# 				save_obj = UserAddedPost.objects.create(userinfo_id_id=enter_id,image=enter_image,keyboard_id_id=int(keyboard_id),post_view_access=target_users,total_view=target_users)
# 				save_obj.save()
# 				print('saved.')

# 				image_name = save_obj.image.name
# 				file = os.path.join(settings.MEDIA_ROOT+'/'+image_name)

# 				# im = Image.open(file)
# 				# im.thumbnail((50,50))
# 				# name = '50X50_' + str(image_name)
# 				# print(name)
# 				# thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
# 				# im.save(thumb_file)
# 				# print('thumbnail saved.50')


# 				im = Image.open(file)
# 				im.thumbnail((100,100))
# 				name = '100X100_' + str(image_name)
# 				print(name)
# 				thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
# 				im.save(thumb_file)
# 				print('thumbnial saved.100')

# 			except Exception as e:
# 				print('error is :',e)
# 				pass

# 			context={}
# 			obj = Keyboard.objects.all()
# 			if obj:
# 				context['keyboard'] = obj

# 			return render(request,'userapp/add-post-image.html',context)
# 		else:
# 			context={}
# 			obj = Keyboard.objects.all()
# 			if obj:
# 				context['keyboard'] = obj

# 			return render(request,'userapp/add-post-image.html',context)

class Signup(TemplateView):
	template_name = ('userapp/signup.html')
	def get_context_data(self, *args, **kwargs):
		context = super(Signup, self).get_context_data(*args, **kwargs)
		print(context)
		obj = SiteContactInfo.objects.all()
		context['contact_info'] = obj
		return context

	def post(self,request):
		print('in post')
		uname = request.POST.get('email')
		password = request.POST.get('password')
		name = request.POST.get('name')
		# email = request.POST.get('email')
		user = User.objects.filter(username=uname)
		print('24')
		if user:
			print('exist')
			return HttpResponse('0')

		# check_email = User.objects.filter(email=email)
		# if check_email:
		# 	return HttpResponse('3')
		else:
			try:
				user = User.objects.create(username=uname)
				user.set_password(password)
				user.save()
				user.first_name = name
				# user.email = email
				user.is_active = True
				user.is_staff = True
				user.save()
				user_info = UserInfo.objects.create(user_id_id=user.id,name=user.first_name,email=user.username,uname=user.email)
				user_info.save()
				print('saved')
				url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Create_New_Address?ACCOUNT_NAME=' + uname + '&PASSWORD=0nly@Coin123'
				resp = requests.get(url)
				if resp.status_code == 200:
					json_resp = json.loads(resp.text)
					if json_resp:
						if json_resp['Success'] == 1:
							coinaddress = json_resp['Result']

							url = pyqrcode.create(content = coinaddress)
							nm = str(user.id) + '_' + user_info.email + '_qrcode.png'
							print('nm = ', nm)
							url.png(settings.MEDIA_ROOT + '/' + nm, scale = 8)

							usercoininfo_obj = UserCoinInfo.objects.create(user_id_id=user.id, coinaddress = coinaddress, qrcode = '/media/' + nm)
							usercoininfo_obj.save()
							return HttpResponse('1')
						elif json_resp['Success'] == 0:
							return HttpResponse('2')
						else:
							return HttpResponse('2')
				# return redirect(reverse('userapp:login'))
				# return HttpResponseRedirect(reverse('login'))

			except Exception as e:
				print('\n\n\n')
				print('user error is :',e)
				return HttpResponse('2')

class Login(TemplateView):
	template_name = ('userapp/login.html')
	def get_context_data(self, *args, **kwargs):
		print('in login')
		context = super(Login, self).get_context_data(*args, **kwargs)
		for key, value in self.request.session.items():
			print('{} => {}'.format(key, value))
		print(context)
		obj = SiteContactInfo.objects.all()
		context['contact_info'] = obj
		return context

	def post(self,request):
		username = request.POST.get('username')
		password = request.POST.get('password')
		print('++++++++++++++++')
		print(username)
		print(password)
		user = authenticate(username=username, password=password)
		if user:
			if user.is_superuser == True:
				print('it is admin.')
				return HttpResponse('2')
			else:
				today_date = datetime.datetime.now().date()
				try:
					if user.last_login.date() == today_date:
						pass
					else:
						check_date = UserLoginDetail.objects.filter(time_stamp=today_date).first()
						if check_date:
							check_date.total_count +=1
							check_date.save()
						else:
							UserLoginDetail.objects.create(time_stamp=today_date ,total_count=1)
				except Exception as e:
					print("--------->",e)
					pass
				user_id = user.id
				user_info_obj = UserInfo.objects.filter(user_id_id=int(user_id)).first()
				if user_info_obj:
					if user_info_obj.is_active == True:
						print('active exists')
						print('pre-coins:',int(user_info_obj.coins))
						# self.request.session['coins']= str(user_info_obj.coins)
						for key, value in self.request.session.items():
							print('{} => {}'.format(key, value))
						login(request, user)
						print('after ::::')
						self.request.session['coins']= int(user_info_obj.coins)
						for key, value in self.request.session.items():
							print('{} => {}'.format(key, value))
						if 'coins' in request.session:
							print(self.request.session['coins'])
						return HttpResponse(str(user.id))
						return redirect(reverse('userapp:home'))
					else:
						print('not active exists')
						return HttpResponse('3')
				else:
					print('userinfo not exists.')
					return HttpResponse('0')

		else:
			print('not exists')
			return HttpResponse('0')
			return redirect(reverse('userapp:login'))

class ForgotPassword(TemplateView):
	template_name = ('userapp/forgot.html')
	def get_context_data(self, *args, **kwargs):
		context = super(ForgotPassword, self).get_context_data(*args, **kwargs)
		print(context)
		obj = SiteContactInfo.objects.all()
		context['contact_info'] = obj
		return context

	def post(self,request):
		print('in post')
		username = request.POST.get('username')
		user = User.objects.filter(username=username).first()
		if user:
			newpass = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(8)])
			print('newpass',newpass)
			user.set_password(newpass)
			user.save()
			print('saved.')
			sender = 'itsmepython21@gmail.com'
			receiver = username
			print('email',username)
			message = 'Hello '+str(user.first_name)+ ', Your New Password is: ' +str(newpass)
			print('message',message)
			try:
				server = smtplib.SMTP('smtp.gmail.com', 587)
				server.starttls()
				server.login('peytontek@gmail.com', 'dzwiolwvkiwzozyj')
				# server.login('itsmepython21@gmail.com', 'hidgptqclxmznnvp')
				msg = EmailMessage()
				msg.set_content(message)
				msg['Subject'] = 'NEW PASSWORD'
				msg['From'] = 'itsmepython21@gmail.com'
				msg['To'] = str(receiver)
				server.send_message(msg)
				print('successfully sent.')
				return HttpResponse('1')
			except Exception as e:
				print('error is :',e)
				return HttpResponse('2')
		else:
			print("not exist")
			return HttpResponse('0')

class Home(TemplateView):
	template_name = ('userapp/index.html')
	def get_context_data(self, *args, **kwargs):
		context = super(Home, self).get_context_data(*args, **kwargs)
		obj1 = UserInfo.objects.all().count()
		if obj1:
			context['all_users'] = obj1
		else:
			context['all_users'] = 0

		obj2 = UserInfo.objects.filter(is_active=True).count()
		if obj2:
			context['active_users'] = obj2
		else:
			context['active_users'] = 0

		obj = UserInfo.objects.filter(is_active=True)
		t_coins=0
		if obj:
			for i in obj:
				t_coins = t_coins + int(i.coins)
		context['maza_coins'] = t_coins


		obj3 = UserAddedPost.objects.all()
		completed_count=0
		uncompleted_count=0
		offensive_count=0
		if obj3:
			for i in obj3:
				if i.total_view == i.current_view and i.offensive == False:
					completed_count = completed_count + 1


				if i.total_view == i.current_view and i.offensive == True:
					offensive_count = offensive_count + 1

				if i.total_view != i.current_view and i.offensive == False:
					uncompleted_count = uncompleted_count + 1


		context['uncompleted_jobs'] = uncompleted_count
		context['completed_jobs'] = completed_count
		context['offensive'] = offensive_count

		for key, value in self.request.session.items():
			print('{} => {}'.format(key, value))

		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)

			context['coinbalance'] = coinbalance
		return context

class HomePage(TemplateView):
	template_name = ('userapp/user-dashboard.html')
	def get_context_data(self, *args, **kwargs):
		context = super(HomePage, self).get_context_data(*args, **kwargs)
		print('session id:',self.request.session['_auth_user_id'])
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)
			context['coinbalance'] = coinbalance
		check_id = int(self.request.session['_auth_user_id'])
		print("=================>" , check_id)
		context['availablecoin'] = 0
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			try:
				coindata = UserInfo.objects.filter(user_id_id = userid).first()
				coin_of_user = coindata.coins
			except Exception as e:
				print(e)
				coin_of_user = 0
			usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = userid).first()
			if usercoininfo_obj:
				coinaddress_val = usercoininfo_obj.coinaddress
				# print('\n')
				# print(coinaddress_val)
				url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Get_Balance_By_Addres?ADDRESS=' + coinaddress_val + '&PASSWORD=0nly@Coin123'
				resp = requests.get(url)
				print("res==============>" ,resp.text)
				if resp.status_code == 200:
					json_resp = json.loads(resp.text)
					if json_resp:
						if json_resp['Success'] == 1:
							availablecoin = json_resp['Result']
							context['availablecoin'] = availablecoin
						elif json_resp['Success'] == 0:
							pass
		print(type(context["availablecoin"]))
		print(type(coin_of_user))
		totalcoin = float(context["availablecoin"])+int(coin_of_user)
		print('context["availablecoin"]  =  ',context["availablecoin"])
		context['total_coin']= totalcoin


		# if session_id != check_id:
		# 	if '_auth_user_id' in self.request.session:
		# 		del self.request.session['_auth_user_id']
		# 		print('done.')
		# 	if 'coins' in self.request.session:
		# 		del self.request.session['coins']
		# 		print('coins done.')
		# 	return context
		# 	return render(self.request, 'userapp/login.html', {"context":context})
		# 	return redirect(reverse('userapp:login'))
		# 	return redirect('/login/')
		# else:
		all_ids=[]
		full_data=[]
		post_ids=[]

		obj = UserInfo.objects.all()
		if obj:
			for i in obj:
				all_ids.append(i.user_id.id)

		obj4 = OtherUsersReaction.objects.filter(logged_user_id__user_id_id=int(check_id))
		print("------------------->" , obj4)
		if obj4:
			for i in obj4:
				post_ids.append(int(i.post_id.id))


		for k in all_ids:
			if check_id == int(k):
				print('skip')
			else:
				obj = UserAddedPost.objects.filter(userinfo_id__user_id_id=int(k))
				if obj:
					for i in obj:
						# print('post_ids',post_ids)
						# print('this id ',i.id)
						if int(i.id) in post_ids:
							print('skipped already reacted post by the user.')
						else:
							if(int(i.post_view_access) > 0):
								data={}
								data['image'] = i.image.name
								data['user_id'] = i.userinfo_id.id
								data['user_name'] =  i.userinfo_id.name
								data['post_id'] = i.id
								obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(i.keyboard_id.id))
								if obj1:
									data['all_keys_checked'] = obj1

								full_data.append(data)

		print("+++++++++++++++++++++++++++++++>" , full_data)
		if full_data:
			context['all_post'] = full_data[0]

		else:
			print("no data found =====================")

		return context




		# if obj:
		# 	for i in obj:
		# 		print('post_ids',post_ids)
		# 		print('this id ',i.id)
		# 		if int(i.id) in post_ids:
		# 			print('skipped already reacted post by the user.')
		# 		else:
		# 			if(int(i.post_view_access) > 0):
		# 				react={}
		# 				react_l=[]
		# 				rank_l=[]
		# 				data={}
		# 				data['image'] = i.image.name
		# 				data['user_id'] = i.userinfo_id.id
		# 				data['user_name'] =  i.userinfo_id.name
		# 				data['post_id'] = i.id
		# 				if i.keys_id:
		# 					ids = i.keys_id
		# 					ids = ids.split(',')
		# 					for k in ids:
		# 						obj1 = VirtualKeyboard.objects.filter(id=int(k)).first()
		# 						if obj1:
		# 							react_l.append(obj1)
		# 					react['image'] = react_l
		# 					data['react'] = react
		# 				full_data.append(data)

		# print(full_data)
		# context['all_post'] = full_data
		# print('\n\n\n\n')
		# return context


	@method_decorator(user_redirect)
	def dispatch(self, request, *args, **kwargs):
		return super(HomePage, self).dispatch(request, *args, **kwargs)



	def post(self,request, *args, **kwargs):
		print('HomePage - post method')
		context={}
		post_id = request.POST.get('post_id')
		logged_user_id = request.POST.get('logged_user_id')
		user_name = UserInfo.objects.filter(user_id_id = logged_user_id).first()
		print('user_name',user_name)
		# key_length = request.POST.get('key_length')
		# counter = request.POST.get('counter')
		# c_counter = counter[0]
		# c_key_length = key_length[0]

		final_ids = request.POST.getlist('checkbox-for-selected-imgae')
		c1=0
		c2=0
		new_ids =[]
		final_rank_ids=[]
		for i in final_ids:
			a=i.split('#')
			new_ids.append(int(a[0]))
			# key_clicks_info = KeyClickesInfo.objects.filter(keys_id_id=a[0]).first()
			# if key_clicks_info:
			# 	key_clicks_info.clicks_by_users = int(key_clicks_info.clicks_by_users) + 1
			# 	key_clicks_info.save()
			# else:
			# 	keyboard_info = Keyboard_keys.objects.filter(id=int(a[0])).first()
			# 	if keyboard_info:
			# 		keyboard_info_id = keyboard_info.keyboard_id.id
			# 		keyboard_name = keyboard_info.keyboard_id.label
			# 		key_clicks_info_new	= KeyClickesInfo.objects.create(keys_id_id=int(a[0]),keyboard_id_id=int(keyboard_info_id),keyboard_name=keyboard_name,clicks_by_users=1)
			# 		key_clicks_info_new.save()
			# 	else:
			# 		pass

			key_per_post_click = KeyClickInfoPerPost.objects.filter(keys_id_id=a[0],post_id_id=int(post_id)).first()
			print('key_per_post_click===',key_per_post_click)
			if key_per_post_click:
				key_per_post_click.clicks_by_users = int(key_per_post_click.clicks_by_users) + 1
				print('key_per_post_click=====',key_per_post_click)
				key_per_post_click.save()
				#This code send message on telegram when user click on 1st post
				# import telebot
				# import telepot
				# token = '5030377608:AAG2CaDAswzG6idxP1KQ-CpvCpkEkHq7T68'
				# receiver_id = 409703013
				# bot  = telepot.Bot(token)
				# bot.sendMessage(receiver_id, f'{user_name.name}, \nClicked on a post')
				# print('message send Succesfully')
			else:
				keyboard_info = Keyboard_keys.objects.filter(id=int(a[0])).first()
				if keyboard_info:
					keyboard_info_id = keyboard_info.keyboard_id.id
					keyboard_name = keyboard_info.keyboard_id.label
					key_per_post_click	= KeyClickInfoPerPost.objects.create(post_id_id=int(post_id),keys_id_id=int(a[0]),keyboard_id_id=int(keyboard_info_id),keyboard_name=keyboard_name,clicks_by_users=1)
					key_per_post_click.save()
					#This code send message on telegram when user click on all other post 
					# import telebot
					# import telepot
					# token = '5030377608:AAG2CaDAswzG6idxP1KQ-CpvCpkEkHq7T68'
					# receiver_id = 409703013
					# bot  = telepot.Bot(token)
					# bot.sendMessage(receiver_id, f'{user_name.name} , \nClicked on a post')
					# print('message send Succesfully')

					response = {}
					obj = UserAddedPost.objects.all()
					uncompleted_jobs = 0
					if obj:
						for i in obj:
							if i.total_view != i.current_view and i.offensive == False:
								uncompleted_jobs = uncompleted_jobs + 1
								# clicks_per_day = int(clicks_per_day) + int(i.current_view)
						print('uncompleted jobs',uncompleted_jobs)
						if uncompleted_jobs < 20:
							user_id = UserInfo.objects.filter(email__exact='sterlingpeyton@gmail.com').first()
							print('userr_id',user_id)
							if user_id:
								image = StaticImages.objects.all().first()
								image = str(image)
								new_image = ""
								if image == "Task_upload/task1.png":
									new_image = "Task_upload/task2.png"
								if image == "Task_upload/task2.png":
									new_image = "Task_upload/task3.png"
								if image == "Task_upload/task3.png":
									new_image = "Task_upload/task4.png"
								if image == "Task_upload/task4.png":
									new_image = "Task_upload/task5.png"
								if image == "Task_upload/task5.png":
									new_image = "Task_upload/task6.png"
								if image == "Task_upload/task6.png":
									new_image = "Task_upload/task1.png"
								StaticImages.objects.update(last_image = new_image)

								target_users = 10
								import random
								keyboard_id = Keyboard.objects.all()
								randomnum = []
								for keys in keyboard_id:
									keys = keys.id
									randomnum.append(keys)
								keyword = random.choice(randomnum)
								print('keyword',keyword)
								obj = UserInfo.objects.filter(email__exact='sterlingpeyton@gmail.com').first()
								print('obj',obj)
								if obj:
									if int(obj.coins) < (int(target_users) * 2):
										response['msg'] = 'User is out of coins'
									else:
										obj.coins = int(obj.coins) - (int(target_users) * 2)
										try:
											userinfo_id = UserInfo.objects.filter(email__exact='sterlingpeyton@gmail.com').first()
											print('userinfo_id',userinfo_id)
											if userinfo_id:
												post_owner_id = userinfo_id.id
												print('post_owner_id',post_owner_id)
												save_obj = UserAddedPost.objects.create(userinfo_id_id=post_owner_id,image=image,keyboard_id_id=keyword,post_view_access=target_users,total_view=target_users)
												print('save_objjjjjjj',save_obj)
												obj.save()
												response['status'] = 'True'
												response['msg'] = 'Succesfuly Post'
												try:
													import telebot
													import telepot
													token = '5209819720:AAGQMLTr5hQh4PENGfz2t02VF2ltDcyn2Ew'
													receiver_id = 5149315431
													bot  = telepot.Bot(token)
													bot.sendMessage(receiver_id, f'{user_name.name} , \n Post Created Successfully')
													print('message send Succesfully')
												except Exception as e:
													print('error',e)
											else:
												response['msg'] = "No user Id"
										except Exception as e:
											print('Error In Code',str(e))
											response['msg'] = str(e)
											response['Status'] = 400

						else:
							# response['msg'] = "Posts is greater than 20 or 20"
							pass
					# return JsonResponse(response)
				else:
					pass









		# for i in new_ids:
		# 	final_rank_obj =  Keyboard_keys.objects.filter(id=int(i)).first()
		# 	final_rank_ids.append(int(final_rank_obj.rank))

		# for i in final_rank_ids:
		# 	if int(i) > 16:
		# 		c2 = c2 + int(i)
		# 	if int(i) <= 16:
		# 		c1 = c1 + int(i)

		for i in final_ids:
			a=i.split('#')
			print(a[-1])
			if int(a[-1]) > 16:
				final_rank_obj = Keyboard_keys.objects.filter(id=int(a[0])).first()
				if final_rank_obj:
					rank = final_rank_obj.rank
				else:
					rank = 0
				c2 =c2 + int(rank)

			if int(a[-1]) <= 16:
				final_rank_obj = Keyboard_keys.objects.filter(id=int(a[0])).first()
				if final_rank_obj:
					rank = final_rank_obj.rank
				else:
					rank = 0
				c1 =c1 + int(rank)

		# final_ids=[]
		# for i in range(1,(int(key_length)+1)):
		# 	print(c_counter,i)
		# 	if 'example'+str(c_counter)+str(i) in request.POST:
		# 		if 'key_id'+str(c_counter)+str(i) in request.POST:
		# 			name = 'key_id'+str(c_counter)+str(i)
		# 			ids = request.POST.get(name)
		# 			final_ids.append(ids)


		# print(final_ids)
		rank=[]
		if final_ids :
			for i in new_ids:

				obj = Keyboard_keys.objects.filter(id=int(i)).first()
				if obj:
					rank.append(obj.rank)

			rank = str(",".join(map(str,rank)))
			ids = str(",".join(map(str,final_ids)))
			rank = str(str(c1)+','+str(c2))
			logged_obj = UserInfo.objects.filter(user_id_id=int(logged_user_id)).first()
			logged_user_info_id = logged_obj.id
			# logged_obj.coins = int(logged_obj.coins) + 2
			# print('two coins earned')
			logged_obj.coins = int(logged_obj.coins) + 1
			print('one coin earned.')
			logged_obj.save()
			if 'coins' in request.session:
				request.session['coins']= int(logged_obj.coins)
			print('coin incremented.')
			if int(logged_obj.coins) == 1000000:
				print('coins 1 million')
				print(str(settings.ADMIN_EMAIL))
				ls = []
				ls.append(str(settings.ADMIN_EMAIL))

				send_mail('Alert','Alert. User ('+ logged_obj.email +') has a large depost.','testdemotest11@gmail.com',ls,fail_silently=True)
				print('mail sent')
			post_obj = UserAddedPost.objects.filter(id=int(post_id)).first()
			if post_obj:
				post_obj.post_view_access = int(post_obj.post_view_access) - 1
				# post_obj.post_view_access = int(post_obj.post_view_access) - 2
				post_obj.save()
				print('one view decreased by one.')
				post_obj.current_view = int(post_obj.current_view) + 1
				post_obj.save()
				print('views increased.')
				# post_obj.rank_gained = int(post_obj.rank_gained) + int(rank)
				# post_obj.save()
				# print('rank updated.')
			per_day_clicks = 0
			obj = OtherUsersReaction.objects.create(post_id_id=post_id,reaction_key_ids=ids,logged_user_id_id=logged_user_info_id,rank=rank)
			obj.save()
			print('reaction saved.')
			# obj3 = UserAddedPost.objects.all()
			# if obj3:
			# 	for i in obj3:
			# 		if i.total_view != i.current_view and i.offensive == False:
			# 				all_remaining_clicks = int(all_remaining_clicks) + (int(i.total_view) - int(i.current_view))
			# 	today_date = datetime.datetime.now().date()
				# obj4 = RemainingClicksInfo.objects.filter(date=today_date).first()
				# if obj4:
				# 	obj4.remaining_clicks = str(all_remaining_clicks)
				# 	obj4.save()
				# 	print('existed and updated.')
				# else:
				# 	obj_entry = RemainingClicksInfo.objects.create(date=today_date,remaining_clicks=str(all_remaining_clicks))
				# 	obj_entry.save()
				# 	print('created_new')
			today_date = datetime.datetime.now().date()
			obj4 = ClicksPerDayInfo.objects.filter(date=today_date).first()
			if obj4:
				obj4.per_day_clicks = str(int(obj4.per_day_clicks) + 1 )
				obj4.save()
				print('existed and updated.')
			else:
				# obj5 = ClicksPerDayInfo.objects.last()
				# if obj5:
				# 	print('here')
				# 	print('obj5',obj5)
				# 	per_day_clicks = obj5.per_day_clicks
				# 	enter_clicks = str(int(per_day_clicks) + 1)
				# else:
				# 	enter_clicks = '1'

				# print('enter_clicks',enter_clicks)
				obj_entry = ClicksPerDayInfo.objects.create(date=today_date,per_day_clicks='1')
				obj_entry.save()
				print('created_new')
		else:
			messages.add_message(request, messages.INFO, 'Please select any key !!')


		# check_id = int(kwargs['id'])
		print('session id:',self.request.session['_auth_user_id'])
		check_id = int(self.request.session['_auth_user_id'])
		all_ids=[]
		full_data=[]
		post_ids=[]

		obj = UserInfo.objects.all()
		if obj:
			for i in obj:
				all_ids.append(i.user_id.id)

		obj4 = OtherUsersReaction.objects.filter(logged_user_id__user_id_id=int(check_id))
		if obj4:
			for i in obj4:
				post_ids.append(int(i.post_id.id))

		for k in all_ids:
			if check_id == int(k):
				print('skip')
			else:
				obj = UserAddedPost.objects.filter(userinfo_id__user_id_id=int(k))
				if obj:
					for i in obj:
						if int(i.id) in post_ids:
							print('skipped already reacted post by the user.')
						else:
							if(int(i.post_view_access) > 0):
								data={}
								data['image'] = i.image.name
								data['user_id'] = i.userinfo_id.id
								data['user_name'] =  i.userinfo_id.name
								data['post_id'] = i.id
								obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(i.keyboard_id.id))
								if obj1:
									data['all_keys_checked'] = obj1

								full_data.append(data)

		if full_data:
			context['all_post'] = full_data[0]
		else:
			print("no full_data===============")
			import telebot
			import telepot
			token = '5030377608:AAG2CaDAswzG6idxP1KQ-CpvCpkEkHq7T68'
			receiver_id = 409703013
			bot  = telepot.Bot(token)
			bot.sendMessage(receiver_id, f'{user_name.name} \nhas finished the all available work.')
			print('message send Succesfully')


		return render(request,'userapp/user-dashboard.html',context)

# class AddPost(TemplateView):
# 	template_name = ('userapp/add-post-image.html')
# 	def get_context_data(self, *args, **kwargs):
# 		context = super(AddPost, self).get_context_data(*args, **kwargs)
# 		obj = Keyboard.objects.all()
# 		if obj:
# 			context['keyboard'] = obj
# 		# obj1 = UserInfo.objects.filter(user_id_id=int(kwargs['id'])).first()
# 		# if obj1:
# 		# 	context['user_coins'] = int(obj1.coins)
# 		# context['all_keys'] = obj
# 		# self.request.session['coins']= str(obj1.coins)
# 		# print('\n\n\n\n')
# 		# print(self.request.session['coins'])
# 		if self.request.session.has_key('_auth_user_id'):
# 			userid = self.request.session['_auth_user_id']
# 			res, coinbalance = getbalance(userid)
# 			print('res = ', res)
# 			print('coinbalance = ', coinbalance)

# 			context['coinbalance'] = coinbalance
# 		return context

# 	@method_decorator(user_redirect)
# 	def dispatch(self, request, *args, **kwargs):
# 		return super(AddPost, self).dispatch(request, *args, **kwargs)




class AddPost(TemplateView):
	template_name = 'userapp/add-post-image.html'
	def get(self,request):
		keyboard = Keyboard.objects.all()
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
		return render(request, self.template_name,locals())

	@method_decorator(user_redirect)
	def dispatch(self, request, *args, **kwargs):
		return super(AddPost, self).dispatch(request, *args, **kwargs)






class UsersPost(TemplateView):
	template_name =('userapp/added_post.html')
	def get_context_data(self, *args, **kwargs):
		context = super(UsersPost, self).get_context_data(*args, **kwargs)
		print('session id:',self.request.session['_auth_user_id'])
		check_id = int(self.request.session['_auth_user_id'])
		# print('helllllo',kwargs['id'])
		# check_id = int(kwargs['id'])
		all_ids=[]
		full_data=[]
		post_ids=[]
		obj = UserAddedPost.objects.filter(userinfo_id__user_id_id=int(check_id)).order_by('-id')
		if obj:
			context['all_post'] = obj
		print('\n\n\n\n')
		return context

	@method_decorator(user_redirect)
	def dispatch(self, request, *args, **kwargs):
		return super(UsersPost, self).dispatch(request, *args, **kwargs)

class EditUser(TemplateView):
	template_name = ('userapp/edit-user.html')

	# def get_context_data(self, *args, **kwargs):
	# 	context = super(EditUser, self).get_context_data(*args, **kwargs)
	# 	obj = UserInfo.objects.filter(user_id_id=kwargs['id']).first()
	# 	if obj:
	# 		print('phone_number:',obj.phon)
	# 		context['current_user'] = obj.phone_no
	# 	return context
	def post(self,request):
		print('Data:',request.POST)

class Logout(TemplateView):
	template_name = ('userapp/login.html')
	def get_context_data(self, *args, **kwargs):
		context = super(Logout, self).get_context_data(*args, **kwargs)
		print('request',self.request)
		if '_auth_user_id' in self.request.session:
			del self.request.session['_auth_user_id']
			print('done.')
		if 'coins' in self.request.session:
			del self.request.session['coins']
			print('coins done.')
		# logout(self.request)
		obj = SiteContactInfo.objects.all()
		context['contact_info'] = obj
		return context

class FAQ(TemplateView):
	template_name = ('userapp/faq.html')
	def get_context_data(self, *args, **kwargs):
		context = super(FAQ, self).get_context_data(*args, **kwargs)
		obj = QuestionAnswers.objects.all()
		context['faq_info'] = obj
		obj = SiteContactInfo.objects.all()
		context['contact_info'] = obj
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)
			context['coinbalance'] = coinbalance
		return context

	# @method_decorator(user_redirect)
	# def dispatch(self, request, *args, **kwargs):
	# 	return super(FAQ, self).dispatch(request, *args, **kwargs)

def post_info_csv(request,id):
	obj = UserAddedPost.objects.filter(userinfo_id__user_id_id=int(id)).order_by('-id')
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="post_report.csv"'
	writer = csv.writer(response)
	c=1
	writer.writerow(['S.No','Post Link','View Limit','Current Views','Is_offensive'])
	for i in obj:
		s_no = int(c)
		post_link = str(settings.API_SERVER) + str(i.image.name)
		view_limit = int(i.total_view)
		current_views = i.current_view
		if i.offensive == True:
			off = "Yes"
		if i.offensive == False:
			off ="No"
		writer.writerow([s_no,post_link,view_limit,current_views,off])
		c=c+1

	return response

# def single_post_csv(request,id):
# 	obj = UserAddedPost.objects.filter(id=id)
# 	response = HttpResponse(content_type='text/csv')
# 	response['Content-Disposition'] = 'attachment; filename="post_report.csv"'
# 	writer = csv.writer(response)
# 	c=1
# 	writer.writerow(['S.No','Post Link','Views','Is_offensive'])
# 	for i in obj:
# 		s_no = int(c)
# 		post_link = str(settings.API_SERVER) + str(i.image.name)
# 		view_limit = int(i.total_view)
# 		if i.offensive == True:
# 			off = "Yes"
# 		if i.offensive == False:
# 			off ="No"
# 		writer.writerow([s_no,post_link,view_limit,off])
# 		c=c+1

# 	return response



def single_post_csv(request,id):
	obj = OtherUsersReaction.objects.filter(post_id_id=int(id))
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="post_report.csv"'
	# separator = ','
	writer = csv.writer(response,delimiter=' ',
                            escapechar=' ', quoting=csv.QUOTE_NONE)
	# writer.writerow(['Rank Submiited'])
	# writer = csv.writer(response)
	check_obj = UserAddedPost.objects.filter(id=int(id)).first()
	if check_obj:
		if check_obj.offensive == True:
			rank_submitted = 'Is_offensive'
			writer.writerow([rank_submitted])
		else:
			for i in obj:
				rank_submitted = i.rank
				# reacted_user_id = i.logged_user_id.id
				writer.writerow([rank_submitted])

	return response







class ComleteJob(TemplateView):
	template_name =('userapp/added_post.html')

	def get_context_data(self, *args, **kwargs):
		context = super(ComleteJob, self).get_context_data(*args, **kwargs)
		check_id = int(kwargs['uid'])
		all_ids=[]
		full_data=[]
		post_ids=[]
		obj1 = UserAddedPost.objects.filter(id=int(kwargs['id'])).first()
		if obj1:
			obj1.offensive = True
			obj1.save()
			obj1.offensive_at = int(obj1.current_view)
			obj1.save()
			print('offensive done')
			obj1.current_view = obj1.total_view
			obj1.save()
			print('job complete.')
			obj1.post_view_access = 0
			obj1.save()
			print('view 0')

			print('val:',obj1.current_view)
			print('val2:',obj1.total_view)


		obj = UserAddedPost.objects.filter(userinfo_id__user_id_id=int(check_id)).order_by('-id')
		if obj:
			context['all_post'] = obj
		print('\n\n\n\n')
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)
			context['coinbalance'] = coinbalance
		return context


		return render(self.request,'userapp/added_post.html',context)

class ViewReport(TemplateView):
	template_name = ('userapp/user_view_report.html')

	def get_context_data(self, *args , **kwargs):
		context = super(ViewReport, self).get_context_data(*args, **kwargs)
		post_id = int(kwargs['id'])

		print('here',post_id)

		obj = UserAddedPost.objects.filter(id=kwargs['id']).order_by('-id')
		context['all_posts'] = obj
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)
			context['coinbalance'] = coinbalance
		return context


def deletepost(request,id):
	if request.method == 'GET':
		print('user_post_id',id)
		post_obj = UserAddedPost.objects.filter(id=int(id)).first()
		if post_obj:
			post_obj.delete()
			print('post deleted by admin.')
			return HttpResponse('0')
		else:
			return HttpResponse('1')
	else:
		return HttpResponse('1')


class WithdrawEmailRequest(TemplateView):
	template_name = ('userapp/withdraw.html')

	def get_context_data(self, *args, **kwargs):
		context = super(WithdrawEmailRequest, self).get_context_data(*args, **kwargs)
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)
			context['coinbalance'] = coinbalance
		return context

	def post(self, request):
		print('here')
		print('DATA :',request.POST)
		sender_email = request.POST.get('email')
		sender_maza_address = request.POST.get('maza_address')
		sender_maza_coins_requested = request.POST.get('coins_requested')
		sender_user_id = request.POST.get('user_id')
		# sender_user_name = request.POST.get('user_name')

		if sender_user_id:
			sender_user_name_obj = User.objects.filter(id=int(sender_user_id)).first()
			if sender_user_name_obj :
				sender_user_name = sender_user_name_obj.first_name
			else:
				sender_user_name = 'USER'

			sender_current_maza_coins_obj = UserInfo.objects.filter(user_id_id = int(sender_user_id)).first()
			if sender_current_maza_coins_obj:
				sender_current_maza_coins = sender_current_maza_coins_obj.coins
			else:
				sender_current_maza_coins = 'NAN'

		else:
			return HttpResponse('0')

		if not sender_email:
			return HttpResponse('1')

		if not sender_maza_address:
			return HttpResponse('2')

		if not sender_maza_coins_requested:
			return HttpResponse('3')

		sender = 'peytontek@gmail.com'
		receiver = sender_email
		message = 'Hello , \n'+'There is a request for the maza coins. Details of the user are: \n'+ 'User Email : ' +str(sender_email) +'\n'+ 'User_maza_address : '+ str(sender_maza_address)+ '\n' +'User_requested_maza_coins : ' + str(sender_maza_coins_requested) +'\n'+ 'User_current_maza_coins : '+str(sender_current_maza_coins)+'\n' + 'User_name : ' + str(sender_user_name) +'.'

		print('message',message)
		try:
			server = smtplib.SMTP('smtp.gmail.com', 587)
			server.starttls()
			receiver_email = 'peytontek@gmail.com'
			# hidgptqclxmznnvp
			# esfera0143
			# peytontek@gmail.com elgoogMC0in!
			# server.login('itsmepython21@gmail.com', 'hidgptqclxmznnvp')
			server.login('peytontek@gmail.com', 'dzwiolwvkiwzozyj')
			msg = EmailMessage()
			msg.set_content(message)
			msg['Subject'] = 'MAZA COINS REQUEST'
			# msg['From'] = 'itsmepython21@gmail.com'
			msg['From'] = 'peytontek@gmail.com'
			msg['To'] = str(receiver_email)
			server.send_message(msg)
			print('successfully sent.')

			sending_request_logs = WithdrawalRequestLogs.objects.create(sender_user_id_id = int(sender_user_id),sender_email = str(sender_email),sender_current_maza_coins = str(sender_current_maza_coins),sender_requested_maza_coins = str(sender_maza_coins_requested),maza_address= str(sender_maza_address) )

			sending_request_logs.save()
			print('log saved.')

			return HttpResponse('4')
		except Exception as e:
			print('error is :',e)
			return HttpResponse('5')


	@method_decorator(user_redirect)
	def dispatch(self, request, *args, **kwargs):
		return super(WithdrawEmailRequest, self).dispatch(request, *args, **kwargs)




class UserProfile(TemplateView):
	template_name = ('userapp/profile.html')

	def get_context_data(self, *args, **kwargs):
		context = super(UserProfile, self).get_context_data(*args, **kwargs)
		obj = UserInfo.objects.get(user_id_id=kwargs['id'])
		context['current_user'] = obj
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			res, coinbalance = getbalance(userid)
			print('res = ', res)
			print('coinbalance = ', coinbalance)
			context['coinbalance'] = coinbalance
		return context

	def post(self,request, *args, **kwargs):
		print('here')
		print('DATA :',request.POST)

		obj1 = User.objects.filter(username=request.POST['email']).exclude(id=kwargs['id'])
		if obj1:
			return HttpResponse('2')
		else:
			pass

		try:
			obj = UserInfo.objects.get(user_id_id=kwargs['id'])
			obj.name = request.POST['first_name']
			obj.email = request.POST['email']
			obj.uname = request.POST['email']
			obj.save()

			auth_user_obj = User.objects.get(id=kwargs['id'])
			auth_user_obj.first_name = request.POST['first_name']
			auth_user_obj.username = request.POST['email']
			auth_user_obj.email = request.POST['email']

			auth_user_obj.save()
			obj.save()

			return HttpResponse('1')

		except Exception as e:
			print('error is  : ',e)
			return HttpResponse('0')



	@method_decorator(user_redirect)
	def dispatch(self, request, *args, **kwargs):
		return super(UserProfile, self).dispatch(request, *args, **kwargs)

def reset_password(request):
	if request.method == 'POST':
		try:
			print('data:',request.POST)
			auth_user_obj = User.objects.get(id=request.POST['user_id'])
			if auth_user_obj:
				username = auth_user_obj.username
				user = authenticate(username=username,password=request.POST['old_password'])
				if user:
					if request.POST['new_password']:
						auth_user_obj.set_password(request.POST['new_password'])
						auth_user_obj.save()
						if '_auth_user_id' in request.session:
							del request.session['_auth_user_id']
							print('done.')
						if 'coins' in request.session:
							del request.session['coins']
							print('coins done.')
					return HttpResponse('1')
				else:
					return HttpResponse('2')
			return HttpResponse('0')
		except Exception as e:
			print('error :',e)
			return HttpResponse('0')
	else:
		return HttpResponse('0')

		
#Deactivate your account
def DeactivateAccount(request):
	response = {}
	if request.method == 'POST':
		try:
			print('-----Working-----', request.POST)
			user_obj = User.objects.get(id=request.POST['user_id'])
			if user_obj:
				username = user_obj.username
				print('username---',username)
				obj = UserInfo.objects.get(user_id=user_obj)
				if obj:
					print('obj--working',obj)
					if obj.is_active == True:
						obj.is_active = False
						obj.save()
						print('save_obj',obj)

						response['status'] = 'True'
						response['message'] = 'you have been deactivate successfully'
				else:
					response['status'] = 'False'
					response['message'] = 'Something went wrong'

			else:
				response['status'] = 'False'
				response['message'] = 'Error'

		except Exception as e:

			response['status'] = 'False'
			response['message'] = str(e)

	return JsonResponse(response)





# class UserPost(TemplateView):
# 	template_name = ('userapp/add-post-image.html')

# 	@method_decorator(user_redirect)
# 	def dispatch(self, request, *args, **kwargs):
# 		return super(UserPost, self).dispatch(request, *args, **kwargs)

# 	def post(self,request):
# 		print('DATA:',request.POST)
# 		# check_values = request.POST.getlist('checkbox-for-selected-imgae')
# 		enter_image = request.FILES.get('image')
# 		user_id = request.POST.get('user_id')
# 		target_users = request.POST.get('targrt-users')
# 		keyboard_id = request.POST.get('select_keyboard_id')


# 		if enter_image and user_id and target_users and keyboard_id :
# 			# if check_values:
# 			# 	ids = str(",".join(map(str,check_values)))
# 			# 	print(ids)
# 			# else:
# 			# 	ids = ''
# 			print('user_id:',user_id)
# 			obj = UserInfo.objects.filter(user_id_id=int(user_id)).first()
# 			if obj:
# 				enter_id = obj.id
# 				obj.coins = int(obj.coins) - (int(target_users) * 2)
# 				obj.save()
# 				print('session:')
# 				print(request.session)
# 				# if self.request.session.has_key('coins'):
# 				if 'coins' in request.session:
# 					request.session['coins']= int(obj.coins)
# 				print('coins changed.')
# 			else:
# 				enter_id = None
# 			try:
# 				print('enter_id',enter_id)
# 				save_obj = UserAddedPost.objects.create(userinfo_id_id=enter_id,image=enter_image,keyboard_id_id=int(keyboard_id),post_view_access=target_users,total_view=target_users)
# 				save_obj.save()
# 				print('saved.')

# 				image_name = save_obj.image.name
# 				file = os.path.join(settings.MEDIA_ROOT+'/'+image_name)

# 				# im = Image.open(file)
# 				# im.thumbnail((50,50))
# 				# name = '50X50_' + str(image_name)
# 				# print(name)
# 				# thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
# 				# im.save(thumb_file)
# 				# print('thumbnail saved.50')


# 				im = Image.open(file)
# 				im.thumbnail((100,100))
# 				name = '100X100_' + str(image_name)
# 				print(name)
# 				thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
# 				im.save(thumb_file)
# 				print('thumbnial saved.100')

# 			except Exception as e:
# 				print('error is :',e)
# 				pass

# 			context={}
# 			obj = Keyboard.objects.all()
# 			if obj:
# 				context['keyboard'] = obj

# 			return render(request,'userapp/add-post-image.html',context)
# 		else:
# 			context={}
# 			obj = Keyboard.objects.all()
# 			if obj:
# 				context['keyboard'] = obj

# 			return render(request,'userapp/add-post-image.html',context)










from django.views.generic import TemplateView, View
from django.http import JsonResponse

class UserPost(View):
	def post(self,request):
		response = {}
		print('DATA:',request.POST)
		# check_values = request.POST.getlist('checkbox-for-selected-imgae')
		enter_image = request.FILES.get('image')
		user_id = request.POST.get('user_id')
		target_users = request.POST.get('targrt-users')
		keyboard_id = request.POST.get('select_keyboard_id')


		if enter_image and user_id and target_users and keyboard_id :
			# if check_values:
			# 	ids = str(",".join(map(str,check_values)))
			# 	print(ids)
			# else:
			# 	ids = ''
			print('user_id:',user_id)
			obj = UserInfo.objects.filter(user_id_id=int(user_id)).first()
			if obj:
				enter_id = obj.id
				obj.coins = int(obj.coins) - (int(target_users) * 2)
				obj.save()
				print('session:')
				print(request.session)
				# if self.request.session.has_key('coins'):
				if 'coins' in request.session:
					request.session['coins']= int(obj.coins)
				print('coins changed.')
			else:
				enter_id = None
			try:
				print('enter_id',enter_id)
				save_obj = UserAddedPost.objects.create(userinfo_id_id=enter_id,image=enter_image,keyboard_id_id=int(keyboard_id),post_view_access=target_users,total_view=target_users)
				save_obj.save()
				print('saved.')
				#This code send message on telegram when user add a post
				# import telebot
				# import telepot
				# token = '5030377608:AAG2CaDAswzG6idxP1KQ-CpvCpkEkHq7T68'
				# receiver_id = 409703013
				# bot  = telepot.Bot(token)
				# bot.sendMessage(receiver_id, f'There is a new post created by, {obj.name}')
				# print('message send Succesfully')
				allObjects = UserInfo.objects.filter(is_active=True,is_enabled=True)
				#send message to all users email by email
				for obj in allObjects:
					message = f'Hello {obj.name}, \n'+'There is a new work available:'
					print('message',message)
					try:
						server = smtplib.SMTP('smtp.gmail.com', 587)
						server.starttls()
						server.login('peytontek@gmail.com', 'dzwiolwvkiwzozyj')
						# server.login('itsmepython21@gmail.com', 'hidgptqclxmznnvp')
						msg = EmailMessage()
						msg.set_content(message)
						msg['Subject'] = 'New Work Available'
						msg['From'] = 'peytontek@gmail.com'
						msg['To'] = obj.email
						server.send_message(msg)
						print('successfully sent.')
					except Exception as e:
						print('error is :',e)
				return HttpResponse('1')
				# response['error'] = 2

				# image_name = save_obj.image.name
				# file = os.path.join(settings.MEDIA_ROOT+'/'+image_name)

				# im = Image.open(file)
				# im.thumbnail((50,50))
				# name = '50X50_' + str(image_name)
				# print(name)
				# thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
				# im.save(thumb_file)
				# print('thumbnail saved.50')


				# im = Image.open(file)
				# im.thumbnail((100,100))
				# name = '100X100_' + str(image_name)
				# print(name)
				# thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
				# im.save(thumb_file)
				# print('thumbnial saved.100')
			except Exception as e:
				response['error'] = 3
				print('error is :',e)
				pass
			response['error'] = 2
		else:
			response['error'] = 3
		return JsonResponse(response)

#Setting Section for user to stop/receice emails notifications
class UserSetting(TemplateView):
	template_name = "userapp/setting.html"
	def get(self, request, *args, **kwargs):
		User_obj = UserInfo.objects.get(user_id=self.request.user)
		print('===========',User_obj)
		return render(request, self.template_name,locals())

	#Notification ON/OFF
	def post(self, request):
		response = {}
		if request.user.is_active:
			print(request.POST)
			try:
				user_id = request.POST.get('user_id')
				print('userid',user_id)
				User_info = UserInfo.objects.get(email=user_id)
			except Exception as e:
				print("user-------------->",e)
				response['error'] = 'False'
				response['massage'] = 'Something went wrong'
			else:
				if User_info.is_enabled:
					User_info.is_enabled = False
				else:
					User_info.is_enabled = True
				User_info.save()
				response['error'] = 'True'
				response['message'] = 'Successfully change'
					
		else:
			return redirect('login')
		return JsonResponse(response)
