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
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
import json
from django.conf import settings
import smtplib
from smtplib import SMTPException
from email.message import EmailMessage
import os,random,string
from userapp.models import *
from .decorator import user_redirect ,login_redirect
from django.utils.decorators import method_decorator
# from django.views.decorators.csrf import csrf_exempt
from PIL import Image
import os
import csv
import datetime
import requests
from django.db.models.functions import Lower
from itertools import chain
from django.views import View



# Create your views here.
class Login(TemplateView):
	template_name = ('dashboard/login.html')

	def get_context_data(self, *args, **kwargs):
		context = super(Login, self).get_context_data(*args, **kwargs)
		# for key, value in self.request.session.items():
		# 	print('{} => {}'.format(key, value))
		return context

	def post(self,request):
		username = request.POST.get('username')
		password = request.POST.get('password')

		user = authenticate(username=username, password=password)
		if user:
			superuser = User.objects.filter(username=username,is_superuser=True)
			if superuser:
				login(request, user)
				return HttpResponse('1')
			else:
				login(request,user)
				return HttpResponse('2')
		else:
			return HttpResponse('0')
			# return redirect(reverse('userapp:login'))

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

class ForgotPassword(TemplateView):
	template_name = ('dashboard/forgot.html')

	def get_context_data(self, *args, **kwargs):
		context = super(ForgotPassword, self).get_context_data(*args, **kwargs)
		for key, value in self.request.session.items():
			print('{} => {}'.format(key, value))
		return context

	def post(self,request):
		username = request.POST.get('username')
		user = User.objects.filter(username=username,is_superuser=True).first()
		if user:
			newpass = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(8)])
			user.set_password(newpass)
			user.save()
			sender = 'itsmepython21@gmail.com'
			receiver = user.email
			message = 'Hello '+str(receiver)+ ', Your New Password is :  ' +str(newpass)
			try:
				server = smtplib.SMTP('smtp.gmail.com', 587)
				server.starttls()
				server.login('peytontek@gmail.com', 'eehnjguhomviobgo')
				# 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)       
				return HttpResponse('1')
			except Exception as e:
				print('error is :',e)
				return HttpResponse('2')
		else:
			return HttpResponse('0')

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

class Home(TemplateView):
	template_name = ('dashboard/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(user_id__is_superuser=False).count()
		print("obj2==========================>" , obj2)
		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

		print('0')
		context['admin_maza_coins'] = 0
		if self.request.session.has_key('_auth_user_id'):
			userid = self.request.session['_auth_user_id']
			print('1')
			print(userid)
			usercoininfo_obj = UserCoinInfo.objects.filter(user_id_id = 220).first()
			print('2')
			if usercoininfo_obj:
				print('3')
				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'
				print(url)
				try:
					resp = requests.get(url, timeout=3)
					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:
								admin_coins = json_resp['Result']
								context['admin_maza_coins'] = admin_coins
							# 	context['availablecoin'] = availablecoin
							# elif json_resp['Success'] == 0:
							# 	pass
				except Exception as e:
					print('admin balance fetch failed:', e)

		# all_admin_users = User.objects.filter(is_superuser = True)
		# if all_admin_users:
		# 	print('qqqqqqqq', len(all_admin_users))
		# 	admin_coins = 0
		# 	for user in all_admin_users:
		# 		obj = UserInfo.objects.filter(user_id = user.id, is_active=True)
				
		# 		if obj:
		# 			for i in obj:
		# 				admin_coins = admin_coins + int(i.coins)
		# 		context['admin_maza_coins'] = admin_coins


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

				if i.total_view == i.current_view and i.offensive == True:
					offensive_count = offensive_count + 1
					# clicks_per_day = int(clicks_per_day) + int(i.current_view)

				if i.total_view != i.current_view and i.offensive == False:
					uncompleted_count = uncompleted_count + 1
					clicks_per_day = int(clicks_per_day) + int(i.current_view)

				# if i.total_view != i.current_view and i.offensive == True:
				# 	clicks_per_day = int(clicks_per_day) + int(i.total_view)


				if i.total_view != i.current_view or i.total_view == i.current_view :
					aa = int(i.total_view) - int(i.current_view)
					# print('steps',aa)
					# print('obj',i) 
					all_remaining_clicks = int(all_remaining_clicks) + (int(i.total_view) - int(i.current_view))
					# print('reamins',all_remaining_clicks)




		check_dates=[]
		today_data = 0
		# print('clicks_per_day',clicks_per_day)
		# check_obj1 = RemainingClicksInfo.objects.all()
		# re_enter_date = []
		# if not check_obj1:
		# 	print('all_remining_clicks',all_remaining_clicks)
		# 	date_info = datetime.datetime.now().date() - datetime.timedelta(days=9)
		# 	new_obj = RemainingClicksInfo.objects.create(date = date_info,remaining_clicks=str((all_remaining_clicks))) 
		# 	new_obj.save()
		# 	print('saved for first time')
		# else:
		# 	for i in range(9,-1,-1):
		# 		check_date = datetime.datetime.now().date() - datetime.timedelta(days=int(i))
		# 		check_dates.append(check_date)

		# for i in check_dates:
		# 	print('datesss',i)
		# 	obj6 = RemainingClicksInfo.objects.filter(date=i).first()
		# 	re_enter_date.append(i)
		# 	if obj6:
		# 		re_enter_date.remove(i)
		# 		remaining_clicks1 = obj6.remaining_clicks
		# 		break

		# if len(re_enter_date) == 10:
		# 	obj8 = RemainingClicksInfo.objects.last()
		# 	remaining_clicks1 = obj8.remaining_clicks

		# for i in re_enter_date:
		# 	check_new_obj = RemainingClicksInfo.objects.filter(date = i).first()
		# 	if check_new_obj:
		# 		pass
		# 	else:
		# 		new_obj = RemainingClicksInfo.objects.create(date = i,remaining_clicks=str((remaining_clicks1))) 
		# 		new_obj.save()
		# 		print('saved between time')


		# today_date = datetime.datetime.now().date()
		# print('all_remaining_clicks2',all_remaining_clicks)
		# 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')

		# days_list =[]
		# dates=[]
		# days_data =[]
		# for i in range(9,-1,-1):
		# 	date_info = datetime.datetime.now().date() - datetime.timedelta(days=int(i))
		# 	dates.append(date_info)
		# 	date_info_month = date_info.strftime("%b")
		# 	date_info_year = date_info.year
		# 	date_info_day = date_info.day

		# 	enter_date = str(date_info_day) + ',' + str(date_info_month) + ' ' + str(date_info_year)
		# 	days_list.append(enter_date)

		# for i in dates:
		# 	obj = RemainingClicksInfo.objects.filter(date=i).first()
		# 	if not obj:
		# 		obj1 = RemainingClicksInfo.objects.filter(date=(i + datetime.timedelta(days=int(1)))).first()
		# 		if obj1:
		# 			obj2 = RemainingClicksInfo.objects.filter(date=(i - datetime.timedelta(days=int(1)))).first()
		# 			new_obj = RemainingClicksInfo.objects.create(date = i,remaining_clicks=str((obj2.remaining_clicks))) 
		# 			new_obj.save()
		# 			days_data.append(int(new_obj.remaining_clicks))
		# 		else:
		# 			obj3 = RemainingClicksInfo.objects.filter(date=(i - datetime.timedelta(days=int(1)))).first()
		# 			new_obj = RemainingClicksInfo.objects.create(date = i,remaining_clicks=str((obj3.remaining_clicks))) 
		# 			new_obj.save()
		# 			days_data.append(int(new_obj.remaining_clicks))
		# 	else:
		# 		days_data.append(int(obj.remaining_clicks))



		# check_obj1 = ClicksPerDayInfo.objects.all()
		# re_enter_date = []
		# if not check_obj1:
		# 	print('clicks_per_click',clicks_per_day)
		# 	date_info = datetime.datetime.now().date() - datetime.timedelta(days=9)
		# 	new_obj = ClicksPerDayInfo.objects.create(date = date_info,per_day_clicks=str((clicks_per_day))) 
		# 	new_obj.save()
		# 	print('saved for first time')
		# else:
		# 	for i in range(9,-1,-1):
		# 		check_date = datetime.datetime.now().date() - datetime.timedelta(days=int(i))
		# 		check_dates.append(check_date)

		# for i in check_dates:
		# 	print('datesss',i)
		# 	obj6 = ClicksPerDayInfo.objects.filter(date=i).first()
		# 	re_enter_date.append(i)
		# 	if obj6:
		# 		re_enter_date.remove(i)
		# 		clicks_per_day1 = obj6.per_day_clicks
		# 		break

		# if len(re_enter_date) == 10:
		# 	obj8 = ClicksPerDayInfo.objects.last()
		# 	clicks_per_day1 = obj8.per_day_clicks

		# for i in re_enter_date:
		# 	check_new_obj = ClicksPerDayInfo.objects.filter(date = i).first()
		# 	if check_new_obj:
		# 		pass
		# 	else:
		# 		new_obj = ClicksPerDayInfo.objects.create(date = i,per_day_clicks=str((clicks_per_day1))) 
		# 		new_obj.save()
		# 		print('saved between time')


		# today_date = datetime.datetime.now().date()
		# print('all_remaining_clicks2',clicks_per_day)
		# obj4 = ClicksPerDayInfo.objects.filter(date=today_date).first()
		# if obj4:
		# 	obj4.per_day_clicks = str(clicks_per_day)
		# 	obj4.save()
		# 	print('existed and updated.')
		# else:
		# 	obj_entry = ClicksPerDayInfo.objects.create(date=today_date,per_day_clicks=str(clicks_per_day))
		# 	obj_entry.save()
		# 	print('created_new')

		days_list =[]
		dates=[]
		days_data =[]
		for i in range(9,-1,-1):
			date_info = datetime.datetime.now().date() - datetime.timedelta(days=int(i))
			dates.append(date_info)
			date_info_month = date_info.strftime("%b")
			date_info_year = date_info.year
			date_info_day = date_info.day

			enter_date = str(date_info_day) + ',' + str(date_info_month) + ' ' + str(date_info_year)
			days_list.append(enter_date)

		for i in dates:
			obj = ClicksPerDayInfo.objects.filter(date=i).first()
			if not obj:
				obj1 = ClicksPerDayInfo.objects.create(date = i,per_day_clicks='0')
				obj1.save()
				print('created with 0 clicks')
				days_data.append(int(0))
			else:
				days_data.append(int(obj.per_day_clicks))



			# if not obj:
			# 	obj1 = ClicksPerDayInfo.objects.filter(date=(i + datetime.timedelta(days=int(1)))).first()
			# 	if obj1:
			# 		obj2 = ClicksPerDayInfo.objects.filter(date=(i - datetime.timedelta(days=int(1)))).first()
			# 		new_obj = ClicksPerDayInfo.objects.create(date = i,per_day_clicks=str((obj2.per_day_clicks))) 
			# 		new_obj.save()
			# 		days_data.append(int(new_obj.per_day_clicks))
			# 	else:
			# 		obj3 = ClicksPerDayInfo.objects.filter(date=(i - datetime.timedelta(days=int(1)))).first()
			# 		new_obj = ClicksPerDayInfo.objects.create(date = i,per_day_clicks=str((obj3.per_day_clicks))) 
			# 		new_obj.save()
			# 		days_data.append(int(new_obj.per_day_clicks))
			# else:
			# 	days_data.append(int(obj.per_day_clicks))

		#PIE_CHART_CALCULATION:-
		user_names=[]
		remainings_percentage=[]
		remaining_clicks = 0
		remaining_data=[]
		all_remaining=0
		c=0
		check=0
		final_names = []
		final_percentage = []
		enter =0
		obj4 = list(UserAddedPost.objects.all().values_list('userinfo_id__id',flat=True))
		if obj4:
			obj4 = list(dict.fromkeys(obj4))
			for i in obj4:
				obj5 = UserAddedPost.objects.filter(userinfo_id_id=int(i))
				clicks_info = {}
				remaining_clicks = 0 
				for j in obj5:
					if j.total_view != j.current_view and j.offensive == False:
						remaining_clicks = int(remaining_clicks) + (int(j.total_view) - int(j.current_view))
				clicks_info['remaining_clicks'] = remaining_clicks
				clicks_info['percentage'] = round(float((int(remaining_clicks)/int(all_remaining_clicks))*100), 2)			
				clicks_info['userinfo_id'] = i
				clicks_info['user_name'] = UserInfo.objects.get(id=int(i)).email
				remaining_data.append(clicks_info)
			final_sorted = sorted(remaining_data, key=lambda k: k['remaining_clicks'], reverse=True)
			for i in final_sorted:
				remainings_percentage.append(float(i['percentage']))
				user_names.append(str(i['user_name']))


			# print('PIE DATA',final_sorted)
			# print('remainsss:',remainings_percentage)
			
			if len(remainings_percentage) > 4:
				for i in user_names:
					c=c+1
					if c < 5:
						final_names.append(str(i))
					else:
						final_names.append('Others           ')
						c=0
						break;
				for i in remainings_percentage:
					c=c+1
					if c < 5:
						final_percentage.append(int(i))
					else:
						enter = round((float(enter) + float(i)),2)
				final_percentage.append(int(enter))
			else:
				final_names.append('Total users less than 4')
				final_percentage.append(int(100))

			for i in final_percentage:
				check = check + int(i)
				if int(check) == int(0):
					final_percentage=[]
					final_percentage.append(int(100))
					final_names=[]
					final_names.append('No remaining clicks left.')
		else:
			final_percentage=[]
			final_percentage.append(int(100))
			final_names=[]
			final_names.append('No Jobs created.')


		context['final_names'] = final_names
		context['final_percentage'] = final_percentage
		context['user_names'] = user_names
		context['remainings_percentage'] = remainings_percentage
		context['days_data'] = days_data
		context['days_list'] = days_list
		context['send_date_one'] = days_list[0]
		context['send_date_two'] = days_list[9]
		context['clicks_left'] = all_remaining_clicks
		context['uncompleted_jobs'] = uncompleted_count
		context['completed_jobs'] = completed_count
		context['offensive'] = offensive_count


		all_dates = []
		days_list_new =[]
		my_all_Data = []
		print("")
		for i in range(0 ,10):
			Previous_Date = datetime.datetime.now().date()  - datetime.timedelta(days=i)
			print(Previous_Date)
			login_count = UserLoginDetail.objects.filter(time_stamp=Previous_Date).first()
			if login_count:
				my_all_Data.append(int(login_count.total_count))
			else:
				my_all_Data.append(0)
			all_dates.append(Previous_Date)
			date_info_month = Previous_Date.strftime("%b")
			date_info_year = Previous_Date.year
			date_info_day = Previous_Date.day

			enter_date1 = str(date_info_day) + ',' + str(date_info_month) + ' ' + str(date_info_year)
			days_list_new.append(enter_date1)



		# for j in all_dates:
		# 	login_count = User.objects.filter(last_login__date=j).count()
		# 	my_all_Data.append(int(login_count))
		print("=====================>" , days_list_new)
		print("=====================>" , my_all_Data)


		days_list_new = days_list_new[::-1]
		my_all_Data = my_all_Data[::-1]

		context['days_list_new'] = days_list_new
		context['my_all_Data'] = my_all_Data

		print("=====================>" , days_list_new)
		print("=====================>" , my_all_Data)


	

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



		return context

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

class UserList(TemplateView):
	template_name = ('dashboard/user_list.html')
	paginate_by = 10

	def get_context_data(self, *args, **kwargs):
		context = super(UserList, self).get_context_data(*args, **kwargs)
		obj = UserInfo.objects.all().exclude(email="sterlingpeyton@gmail.com").order_by(Lower('name'))
		data = UserInfo.objects.filter(email="sterlingpeyton@gmail.com")
		result_list = list(chain(data, obj))
		sampledata = []
		serialno = 0
		for d in result_list:
			serialno +=1
			sampledata.append({
				'serialno' : serialno,
				'name' : d.name,
				'email' : d.email,
				'coins' : d.coins,
				'corn_coins' : d.corn_coins,
				'is_active' : d.is_active,
				'id' : d.id,
				})
		paginator = Paginator(sampledata, 10)

		page = int(self.request.GET.get('page',1))

		try:
			users = paginator.page(page)
			print("truy")
		except PageNotAnInteger:
			users = paginator.page(paginator.num_pages)
			print("except1")
		except EmptyPage:
			users = paginator.page(paginator.num_pages)
			print("except2")
		context['users'] = users

		context['data'] = data
		context['all_user'] = obj

		return context

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


from userapp.models import WithdrawalRequestLogs
class WitdrawLogsList(TemplateView):
	template_name = 'dashboard/withdraw_logs_list.html'
	def get(self, request, *args, **kwargs):
		if request.user.is_authenticated:
			if request.user.is_superuser:
				all_requests = WithdrawalRequestLogs.objects.all().order_by('-sender_requested_maza_coins')
				page = request.GET.get('page', 1)
				paginator = Paginator(all_requests, 20)
				try:
					all_requests = paginator.page(page)
				except PageNotAnInteger:
					all_requests = paginator.page(1)
				except EmptyPage:
					all_requests = paginator.page(paginator.num_pages)
				return render(request, self.template_name,locals())
		return render(request, self.template_name,locals())



class AddKeys(TemplateView):
	template_name = ('dashboard/add-keys.html')
	def get_context_data(self, *args, **kwargs):
		context = super(AddKeys, self).get_context_data(*args, **kwargs)
		obj = VirtualKeyboard.objects.all()
		context['all_keys'] = obj
		return context

	def post(self, request, *args, **kwargs):
		context={}
		image = request.FILES.get('image')
		rank = request.POST.get('rank')

		if image and rank :
			obj = VirtualKeyboard.objects.create(rank=rank,image=image)
			obj.save()
			idd = obj.id
			try:
				image_name = 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)
				thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
				im.save(thumb_file)

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

				im = Image.open(file)
				im.thumbnail((200,200))
				name = '200X200_' + str(image_name)
				thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
				im.save(thumb_file)

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

			obj = VirtualKeyboard.objects.all()
			context['all_keys'] = obj

			return render(request,'dashboard/add-keys.html',context)
		else:
			obj = VirtualKeyboard.objects.all()
			context['all_keys'] = obj
			return render(request,'dashboard/add-keys.html',context)

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

class AddUser(TemplateView):
	template_name = ('dashboard/add-user.html')
	def post(self,request):
		name =request.POST.get('first_name')
		password = request.POST.get('password')
		email = request.POST.get('email')

		user = User.objects.filter(username=email)
		if user:
			return HttpResponse('0')
		else:
			try:
				user = User.objects.create(username=email)
				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.email,uname=user.username,is_active=True)
				user_info.save()
				return HttpResponse('1')
			except Exception as e:
				return HttpResponse('3')

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

class EditKey(TemplateView):
	template_name = ('dashboard/edit_keys.html')

	def get_context_data(self, *args, **kwargs):
		context = super(EditKey, self).get_context_data(*args, **kwargs)
		print(kwargs['id'])
		obj = Keyboard_keys.objects.filter(id=kwargs['id']).first()
		if obj:
			context['current_key'] = obj
		return context

	def post(self,request, id):
		rank = request.POST.get('rank')
		enter_image = request.FILES.get('image')
		context={}

		if enter_image or rank :
			obj = Keyboard_keys.objects.filter(id=id).first()
			if obj:
				keyboard_id = int(obj.keyboard_id.id)
			if rank:
				obj.rank = rank
				obj.save()

			user_image =  obj.key_image.name

			if enter_image:
				try:
					full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image)
					os.remove(full_path)

					user_image1 = '200X200_'+str(user_image)
					full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image1)
					os.remove(full_path)

					user_image2 = '100X100_'+str(user_image)
					full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image2)
					os.remove(full_path)

					user_image3 = '50X50_'+str(user_image)
					full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image3)
					os.remove(full_path)


				except Exception as e:
					print('file deletion error:',e)
					pass

				try:
					obj.key_image = enter_image
					obj.save()
					image_name =  obj.key_image.name
					file = os.path.join(settings.MEDIA_ROOT+'/'+image_name)
					im = Image.open(file)
					im.thumbnail((50,50))
					name = '50X50_' + str(image_name)
					thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
					im.save(thumb_file)

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

					im = Image.open(file)
					im.thumbnail((200,200))
					name = '200X200_' + str(image_name)
					thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
					im.save(thumb_file)

					obj = Keyboard.objects.filter(id=int(keyboard_id)).first()
					if obj:
						context['keyboard_name'] = obj.label
						context['keyboard_id'] = obj.id
					# obj1 = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
					obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id))
					all_keys_obj = list(Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).values("key_image"))
					if obj1:
						context['all_keys'] = obj1
					if all_keys_obj:
						context['all_keys_obj'] = json.dumps(all_keys_obj)
					obj2 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).count()
					if obj2:
						context['length'] = obj2
					return render(request,'dashboard/add-keys.html',context)

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

			obj = Keyboard.objects.filter(id=int(keyboard_id)).first()
			if obj:
				context['keyboard_name'] = obj.label
				context['keyboard_id'] = obj.id
			# obj1 = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
			obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id))
			all_keys_obj = list(Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).values("key_image"))
			if obj1:
				context['all_keys'] = obj1
			if all_keys_obj:
				context['all_keys_obj'] = json.dumps(all_keys_obj)
			obj2 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).count()
			if obj2:
				context['length'] = obj2
			return render(request,'dashboard/add-keys.html',context)


		else:

			obj = Keyboard.objects.filter(id=int(kwargs['id'])).first()
			if obj:
				context['keyboard_name'] = obj.label
				context['keyboard_id'] = obj.id
			# obj1 = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
			obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id']))
			all_keys_obj = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
			if obj1:
				context['all_keys'] = obj1
			if all_keys_obj:
				context['all_keys_obj'] = json.dumps(all_keys_obj)
			obj2 = Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).count()
			if obj2:
				context['length'] = obj2
			return render(request,'dashboard/add-keys.html',context)


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

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

	def get_context_data(self, *args, **kwargs):
		context = super(EditUser, self).get_context_data(*args, **kwargs)
		obj = UserInfo.objects.get(id=kwargs['id'])
		context['current_user'] = obj
		return context

	def post(self,request, id):
		name =request.POST.get('first_name')
		uname = request.POST.get('user_name')
		password = request.POST.get('password')
		email = request.POST.get('email')
		status = request.POST.get('status')
		coins = request.POST.get('coins')

		get_id = UserInfo.objects.filter(id=id).first()

		user_id = get_id.user_id.id

		obj1 = User.objects.filter(username=uname).exclude(id=user_id)

		if obj1:
			return HttpResponse('2')
		else:
			pass
		try:
			obj = UserInfo.objects.get(id=id)
			obj.name = name
			obj.email = email
			obj.uname = email
			obj.coins = int(coins)
			obj.save()
			if status == 'Inactive':
				obj.is_active = False
				obj.save()

			if status == 'Active':
				obj.is_active = True
				obj.save()

			auth_user_obj = User.objects.get(id=obj.user_id.id)
			auth_user_obj.first_name = name
			auth_user_obj.username = email
			auth_user_obj.email = email

			if password:
				auth_user_obj.set_password(password)

			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(EditUser, self).dispatch(request, *args, **kwargs)

class Logout(TemplateView):
	template_name = ('dashboard/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.')
		# logout(self.request)
		return context

class FAQ(TemplateView):
	template_name = ('dashboard/faq.html')
	def get_context_data(self, *args, **kwargs):
		context = super(FAQ, self).get_context_data(*args, **kwargs)
		obj = QuestionAnswers.objects.all()
		context['all_questions'] = obj
		return context

	def post(self,request):
		question = request.POST.get('question')
		answer = request.POST.get('answer')

		if question and answer:
			faq_obj = QuestionAnswers.objects.create(question=question,answer=answer)
			faq_obj.save()
			return HttpResponse('1')
		else:
			return HttpResponse('0')


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

class EditFAQ(TemplateView):
	template_name =('dashboard/edit_faq.html')

	def get_context_data(self, *args, **kwargs):
		context = super(EditFAQ, self).get_context_data(*args, **kwargs)
		obj = QuestionAnswers.objects.get(id=kwargs['id'])
		context['current_ques'] = obj
		return context

	def post(self,request, id):
		question = request.POST.get('question')
		answer = request.POST.get('answer')
		context = {}
		try:
			ques_obj = QuestionAnswers.objects.filter(id=id).first()

			if question or answer:
				if question:
					ques_obj.question = question
					ques_obj.save()

				if answer:
					ques_obj.answer = answer
					ques_obj.save()

				obj = QuestionAnswers.objects.all()
				context['all_questions'] = obj
				return render(request,'dashboard/faq.html',context)
				return HttpResponse('1')
			else:
				obj = QuestionAnswers.objects.all()
				context['all_questions'] = obj
				return render(request,'dashboard/faq.html',context)
				return HttpResponse('0')

		except Exception as e:
			print('error is :',e)
			obj = QuestionAnswers.objects.all()
			context['all_questions'] = obj
			return render(request,'dashboard/faq.html',context)
			return HttpResponse('0')




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


class ViewGenerateReport(TemplateView):
	template_name =('dashboard/view_generate-report.html')
	def get_context_data(self, *args, **kwargs):
		context = super(ViewGenerateReport, self).get_context_data(*args, **kwargs)

		obj = UserAddedPost.objects.filter(id=kwargs['id']).order_by('-id')
		context['all_posts'] = obj

		all_keys_clicked = KeyClickInfoPerPost.objects.filter(post_id_id=int(kwargs['id']))
		keys_data=[]
		keys_data_sorted = []
		if all_keys_clicked:
			if len(all_keys_clicked) >= 3:
				for i in all_keys_clicked:
					keys_info = {}
					keys_info['keyboard_name'] = i.keyboard_name
					keys_info['key_image'] = i.keys_id.key_image
					keys_info['clicks'] = i.clicks_by_users
					keys_data.append(keys_info)

				keys_data_sorted = sorted(keys_data, key=lambda k: k['clicks'], reverse=True)[:3]

		context['keys_info'] = keys_data_sorted

		data = [] 
		check_obj = UserAddedPost.objects.filter(id=int(kwargs['id'])).first()
		if check_obj:
			if check_obj.offensive == False:
				obj = list(OtherUsersReaction.objects.filter(post_id_id=int(kwargs['id'])).values_list('rank'))
				if obj:
					for i in obj:
						l = i[0].split(",")
						data.append([int(l[0]),int(l[1])])
			else:
				pass
			
		context['data'] = data


		print('context',context)

		return context


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


class GenerateReport(TemplateView):
	template_name =('dashboard/generate-report.html')
	def get_context_data(self, *args, **kwargs):
		context = super(GenerateReport, self).get_context_data(*args, **kwargs)
		for key, value in self.request.session.items():
			print('{} => {}'.format(key, value))

		all_keys_clicked = KeyClickesInfo.objects.all()
		keys_data=[]
		keys_data_sorted = []
		if all_keys_clicked:
			if len(all_keys_clicked) >= 3:
				for i in all_keys_clicked:
					keys_info = {}
					keys_info['keyboard_name'] = i.keyboard_name
					keys_info['key_image'] = i.keys_id.key_image
					keys_info['clicks'] = i.clicks_by_users
					keys_data.append(keys_info)

				keys_data_sorted = sorted(keys_data, key=lambda k: k['clicks'], reverse=True)[:3]

		context['keys_info'] = keys_data_sorted


		print('context',context)


		obj = UserAddedPost.objects.all().order_by('-id')
		context['all_posts'] = obj

		obj = list(OtherUsersReaction.objects.all().values_list('rank'))
		data = [] 
		for i in obj:
			print(i)
			l = i[0].split(",")
			data.append([int(l[0]),int(l[1])])
			
		context['data'] = data

		return context

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

class ContactInfo(TemplateView):
	template_name =('dashboard/contact.html')
	def get_context_data(self, *args, **kwargs):
		context = super(ContactInfo, self).get_context_data(*args, **kwargs)
		for key, value in self.request.session.items():
			print('{} => {}'.format(key, value))

		obj = SiteContactInfo.objects.first()
		if obj:
			context['current_info'] = obj

		return context

	def post(self,request):
		contact_id = request.POST.get('contact_id')
		phone_no = request.POST.get('phone_no')
		email = request.POST.get('email')
		address = request.POST.get('address')
		context={}

		if contact_id:
			obj =SiteContactInfo.objects.filter(id=int(contact_id)).first()
			if obj:
				obj.phone_no =phone_no
				obj.save()
				obj.email = email
				obj.save()
				obj.address = address
				obj.save()
				obj = SiteContactInfo.objects.filter(id=int(obj.id)).first()
				if obj:
					context['current_info'] = obj

				return render(request,'dashboard/contact.html',context)
			else:
				obj = SiteContactInfo.objects.first()
				if obj:
					context['current_info'] = obj

				return render(request,'dashboard/contact.html',context)
		else:
			obj1 = SiteContactInfo.objects.create(phone_no=phone_no,email=email,address=address)
			obj1.save()
			obj = SiteContactInfo.objects.first()
			if obj:
				context['current_info'] = obj
			return render(request,'dashboard/contact.html',context)
			return HttpResponse('0')




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

def deletefaq(request, id):
	user_obj = QuestionAnswers.objects.get(id=id)
	user_obj.delete()
	return redirect('dashboard:faq')

def deleteuser(request, id):
	if request.method == "GET":
		print('in dellllllllllllllllllllllllllll')
		user_obj = UserInfo.objects.get(id=id)
		try:
			
			def sendemailgetcoinaddress(email_val):
				user_obj = User.objects.filter(username = email_val).first()
				if user_obj:
					usercoininfo_obj = UserCoinInfo.objects.filter(user_id = user_obj).first()
					if usercoininfo_obj:
						return(usercoininfo_obj.coinaddress)
				return('error')


			auth_user = user_obj.user_id
			usercoininfo_obj = UserCoinInfo.objects.filter(user_id = auth_user).first()
			if usercoininfo_obj:
				coinaddress_val = usercoininfo_obj.coinaddress
				print(coinaddress_val)
				url = 'http://173.199.124.155:2100/MazaCoinService.asmx/Get_Balance_By_Addres?ADDRESS=' + coinaddress_val + '&PASSWORD=0nly@Coin123'
				print(url)
				resp = requests.get(url)
				print(resp.status_code)
				print(resp.text)
				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']
							
							noofcoins_val = int(availablecoin)
							if noofcoins_val != 0:
								frommazaaddress_val = coinaddress_val
								adminemail = 'sterling2p@yahoo.com'
								res = sendemailgetcoinaddress(adminemail)
								if res != 'error': 
									tomazaaddress_val = res						

								print('frommazaaddress_val = ',frommazaaddress_val)
								print('tomazaaddress_val = ',tomazaaddress_val)
								print(noofcoins_val)
								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:
											pass

			auth_user.delete()
		except Exception as e:
			print(e)
			user_obj.delete()
		return HttpResponse('1')
	# return redirect('dashboard:user_list')

def deletepost(request,id):
	if request.method == 'GET':
		print('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')

def deletekey(request, id):
	if request.method =="GET":
		user_obj = Keyboard_keys.objects.get(id=id)
		keyboard_id = user_obj.keyboard_id.id
		user_image = user_obj.key_image.name

		try:
			full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image)
			print(full_path)		
			try:
				full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image)
				os.remove(full_path)

				user_image1 = '200X200_'+str(user_image)
				full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image1)
				print(full_path)
				os.remove(full_path)

				user_image2 = '100X100_'+str(user_image)
				full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image2)
				print(full_path)
				os.remove(full_path)

				user_image3 = '50X50_'+str(user_image)
				full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image3)
				print(full_path)
				os.remove(full_path)

			except Exception as e:
				print('file deletion error:',e)
				pass

			user_obj.delete()
		except Exception as e:
			print('exception error',e)
			
		return HttpResponse(keyboard_id)
		return redirect('dashboard:add_keys')

def user_info_csv(request):
	obj = UserInfo.objects.all().order_by('-id')
	response = HttpResponse(content_type='text/csv')
	response['Content-Disposition'] = 'attachment; filename="users_report.csv"'
	writer = csv.writer(response,delimiter=' ',
							escapechar=' ', quoting=csv.QUOTE_NONE)
	writer.writerow(['Name','Username','User Id','Email'])      
	for i in obj:
		Name = i.name
		Username = i.uname
		Email = i.email
		User_id = i.id
		writer.writerow([Name,Username,User_id,Email])		
	return response

def job_info_csv(request,id):
	obj = OtherUsersReaction.objects.filter(post_id_id=int(id))
	response = HttpResponse(content_type='text/csv')
	separator = ','
	response['Content-Disposition'] = 'attachment; filename="post_report.csv"'
	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,separator,reacted_user_id])
	return response
	

def graph_data(request):

	return HttpResponse('1')


class Addkeyboard(TemplateView):
	template_name = ('dashboard/add_keyboard.html')

	def get_context_data(self, *args, **kwargs):
		context = super(Addkeyboard, self).get_context_data(*args, **kwargs)
		obj = Keyboard.objects.all()
		context['current_keyboard'] = obj
		return context

	def post(self,request):
		label = request.POST.get('label')
		if label:
			obj = Keyboard.objects.filter(label=label)
			if obj:
				return HttpResponse('0')
			else:
				obj1 = Keyboard.objects.create(label=label)
				obj1.save()
				return HttpResponse('1')


class KeyInfo(View):
	def get(self, request, *args, **kwargs):
		all_keys_obj = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
		return HttpResponse(json.dumps(all_keys_obj))

class EditBoardName(View):
	def post(self,request):
		keyboard_id = request.POST.get('keyboard_id')
		keyboard_name = request.POST.get('keyboard_name')
		if keyboard_id:
			obj = Keyboard.objects.filter(label=keyboard_name).exclude(id=int(keyboard_id))
			if obj:
				return HttpResponse('0')
			else:
				obj = Keyboard.objects.filter(id=int(keyboard_id)).first()
				if obj:
					obj.label = keyboard_name
					obj.save()
					print('name changed.')
					return HttpResponse('1')
				else:
					return HttpResponse('2')
		else:
			return redirect('dashboard:add_keyboard')


class AddVirtualKeys(TemplateView):
	template_name = ('dashboard/add-keys.html')

	def get_context_data(self, *args, **kwargs):
		context = super(AddVirtualKeys, self).get_context_data(*args, **kwargs)
		obj = Keyboard.objects.filter(id=int(kwargs['id'])).first()
		if obj:
			context['keyboard_name'] = obj.label
			context['keyboard_id'] = obj.id
		# obj1 = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
		obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id']))
		all_keys_obj = list(Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).values("key_image"))
		if obj1:
			context['all_keys'] = obj1
		if all_keys_obj:
			context['all_keys_obj'] = json.dumps(all_keys_obj)
		obj2 = Keyboard_keys.objects.filter(keyboard_id_id=int(kwargs['id'])).count()
		if obj2:
			context['length'] = obj2
		return context

	def post(self,request,id):
		image = request.FILES.get('image')
		rank = request.POST.get('rank')
		keyboard_id = request.POST.get('keyboard_id')
		context={}

		if keyboard_id and image and rank:
			obj = Keyboard_keys.objects.create(key_image=image,keyboard_id_id=int(keyboard_id),rank=rank)
			obj.save()

			image_name = obj.key_image.name
			file = os.path.join(settings.MEDIA_ROOT+'/'+image_name)

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

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

			im = Image.open(file)
			im.thumbnail((200,200))
			name = '200X200_' + str(image_name)
			thumb_file = os.path.join(settings.MEDIA_ROOT+'/'+name)
			im.save(thumb_file)

			obj = Keyboard.objects.filter(id=int(keyboard_id)).first()
			context['keyboard_name'] = obj.label
			context['keyboard_id'] = obj.id

			obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id))
			obj2 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).count()
			if obj1:
				context['all_keys'] = obj1
				context['length'] = obj2

			all_keys_obj = list(Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).values("key_image"))
			if all_keys_obj:
				context['all_keys_obj'] = json.dumps(all_keys_obj)

			return render(request,'dashboard/add-keys.html',context)
		else:
			obj = Keyboard.objects.filter(id=int(keyboard_id)).first()
			context['keyboard_name'] = obj.label
			context['keyboard_id'] = obj.id

			obj1 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id))
			obj2 = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id)).count()
			if obj1:
				context['all_keys'] = obj1
				context['length'] = obj2
			return render(request,'dashboard/add-keys.html',context)


def deletekeyboard(request,id):
	if request.method == 'GET':
		keyboard_id = int(id)
		if keyboard_id:
			obj3 = Keyboard.objects.filter(id=int(keyboard_id)).first()
			if obj3:
				obj = Keyboard_keys.objects.filter(keyboard_id_id=int(keyboard_id))
				if obj:
					for i in obj:
						user_image = i.key_image
						if user_image:
							try:
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image)
								os.remove(full_path)

								user_image1 = '200X200_'+str(user_image)
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image1)
								print(full_path)
								os.remove(full_path)

								user_image2 = '100X100_'+str(user_image)
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image2)
								print(full_path)
								os.remove(full_path)

								user_image3 = '50X50_'+str(user_image)
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image3)
								print(full_path)
								os.remove(full_path)

							except Exception as e:
								print('key file deletion error:',e)
								pass

				obj2 = UserAddedPost.objects.filter(keyboard_id_id=int(keyboard_id))
				if obj2:
					for j in obj2:
						user_image = j.image
						if user_image:
							try:
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image)
								os.remove(full_path)

								user_image1 = '200X200_'+str(user_image)
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image1)
								print(full_path)
								os.remove(full_path)

								user_image2 = '100X100_'+str(user_image)
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image2)
								print(full_path)
								os.remove(full_path)

								user_image3 = '50X50_'+str(user_image)
								full_path =os.path.join(settings.MEDIA_ROOT+'/'+user_image3)
								print(full_path)
								os.remove(full_path)


							except Exception as e:
								print('post file deletion error:',e)
								pass

			obj3.delete()
			return HttpResponse('1')









class AdminDepositCoin(TemplateView):
	template_name = ('dashboard/admindepositcoin.html')
	def get_context_data(self, *args, **kwargs):
		context = super(AdminDepositCoin, 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
					qrcode = str(settings.BASE_URL) + usercoininfo_obj.qrcode.name
					context['coinaddress'] = coinaddress_val	
					print(qrcode)
					context['qrcode'] = qrcode	
		except Exception as e:
			print('error is :',e)
		return context


class AdminWithdrawCoin(TemplateView):
	template_name = ('dashboard/adminwithdrawcoin.html')
	def get_context_data(self, *args, **kwargs):
		context = super(AdminWithdrawCoin, self).get_context_data(*args, **kwargs)
		return context

	def post(self,request):
		print('AdminWithdrawCoin - 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.'})
					else:
						fees_val = '0.0005'
						totransfernoofcoins_val = str(float(noofcoins_val) - 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=' + 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:
									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'})
							
			# 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'})

from dashboard.utils import Mail

def sendUserMail(allEmails,title,message):
	for email in allEmails:
		print('here is email=====',allEmails)
		print('here is the title====',title)
		print('here is the message====',message)
		try:
			Mail.send_email({'email_subject':title,'body':f"Hello Dear, </br></br> \n {message} </br></br> Thanku  </br></br> Team Maza",'to_email':email})
			# My functiuon to send a mail to user
			pass
		except Exception as e:
			print(e)

class NotificationSend(TemplateView):
	template_name = "dashboard/Email_form.html"


	def get_context_data(self, *args, **kwargs):
		context = super(NotificationSend, self).get_context_data(*args, **kwargs)
		UserEmail = UserInfo.objects.filter(is_active=True)
		print('working')
		# emails = []
		# for email in UserEmail:
			# print('email working')
			# allEmails = email.email
			# emails.append(allEmails)
		# print(emails)
		context['data']=UserEmail
		return context

	def post(self, request):
				strEmails=request.POST.get('emails')
				allEmails=strEmails.split(',')
				print(allEmails)
				print(type(allEmails))
				if request.POST.get('allUser')=='True':
					if not request.POST.get('title'):
								return JsonResponse({'status_code':400,'status_message':'title is required'})
					if not request.POST.get('message'):
							return JsonResponse({'status_code':400,'status_message':'message is required'})
					allCustomer=UserInfo.objects.all()
					print('======================')
					allEmails=[obj.email for obj in allCustomer]
					print('alll user===',allEmails)
					sendUserMail(allEmails,request.POST.get('title'),request.POST.get('message'))
				else:
					if not request.POST.get('emails'):
							return JsonResponse({'status_code':400,'status_message':'Please select a user atleast'})
					if not request.POST.get('title'):
							return JsonResponse({'status_code':400,'status_message':'title is required'})
					if not request.POST.get('message'):
							return JsonResponse({'status_code':400,'status_message':'message is required'})
					print('users===',allEmails)
					sendUserMail(allEmails,request.POST.get('title'),request.POST.get('message'))
				print(request.POST.get('emails'))
				return JsonResponse({'status_code':'200','status_message':'Emails send successfully'})



# class AutoAddPost(View):
def AutoAddPost(request, *args, **kwargs):
	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 = 3
				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'
							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"
	return JsonResponse(response)