from django.shortcuts import render
from django.views.generic.base import View
from django.views.generic import TemplateView
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
from django.http.response import HttpResponse
from .models import *
from django.contrib import messages
from django.core import mail
from django.template.loader import render_to_string
import math, random, string
from django.conf import settings
from django.core.paginator import Paginator
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
import datetime
from django.http import HttpResponseRedirect
from . import forms
from django.contrib.auth.models import User
from .functions import *

from user_app.models import AppUser
from django.db.models import Q
import ast
from trainer.models import *
from user_app.models import *
from django.db.models.functions import TruncMonth
from django.db.models import Count
import json
from datetime import datetime
from django.utils.html import strip_tags
# Create your views here.

def checkEmail(request):
	text = request.GET.get('email')
	post = User.objects.filter(username=text).first()
	if post:
		return HttpResponse ('true')
	else:
		message = 'This email does not exist in our database'
		return JsonResponse(message,safe=False)
	
def checkLoginPassword(request):
	text = request.GET.get('email','')
	password = request.GET.get('password')
	user         = User.objects.get(username=text)
	if user.check_password(password) == False:
		message = '<p style="color: red;">Please enter the correct password</p>'
		
		return JsonResponse(message,safe=False)
	else:
		return HttpResponse ('true')
	
def adminCheckPassword(request):
	old_password = request.GET.get('old_password')
	user         = User.objects.get(email=request.user.email)
	if user.check_password(old_password) == False:
		message = 'Does not match with the old password.'
		return JsonResponse(message,safe=False)
	else:
		return HttpResponse ('true')



class AdminLogIn(TemplateView):
	template_name = 'admin-signin.html'
	def get(self,request):
		return render(request,self.template_name)
	def post(self,request):
		form = forms.adminLoginForm(request.POST)
		if form.is_valid():
			email    = form.cleaned_data.get('email')
			password = form.cleaned_data.get('password')

			user = authenticate(username=email, password=password)
			if user:
					print('yes')
					login(request, user)
					messages.success(request, "Login successfully")
					return redirect('/admin-dashboard')

			else:
				messages.success(request, "Invalid email and password.")
				return render(request, self.template_name)
		else:
			return render(request, 'login', {'form': form})
	
class AdminForgetPassword(TemplateView):
	template_name = 'forgot-password.html'
	def get(self,request):
		return render(request,self.template_name)
	
	def post(self,request):
		form = forms.adminforgetpassword(request.POST)
		if form.is_valid():
			email =  form.cleaned_data.get('email')
			admin_obj = SuperAdmin.objects.filter(email = email).first()
			ran_num = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(12)])
			baselink =  '/forgot-admin/' + str(admin_obj.email) + '/' + ran_num
			completelink = str(settings.BASE_URL) + baselink
			admin_obj.forgotPasswordLink = baselink
			admin_obj.save()            
			subject = 'Forgot Password'
			html_message = render_to_string('forget_admin_password_email.html', {'link': completelink})
			plain_message = html_message
			from_email = settings.EMAIL_HOST_USER
			to = email
			mail.send_mail(subject, plain_message, from_email, [to], html_message=html_message)
			messages.success(request, "A link has been successfully sent to your mail.")
			return redirect('/admin-forget-password')
		else:
			return render(request, self.template_name, {'form': form})
	
class ForgetPasswordVerification(TemplateView):
	template_name = 'reset-password.html'
	def get(self,request):
		link = str(self.request.path)
		user_email = link.split('/')[-2]
		link_expiry = SuperAdmin.objects.filter(email = user_email).first()
		if link_expiry.forgotPasswordLink == "LinkExpiry":
			return render(request,'link-expire.html')
		admin_obj = SuperAdmin.objects.filter(email = user_email, forgotPasswordLink = link).first()
		if admin_obj:
			valid = True
		else:
			valid = False
		return render(request,self.template_name,locals())

	def post(self,request):
		form = forms.forgetverification(request.POST)
		if form.is_valid():
			new_password = form.cleaned_data.get('new_password')
			confirm_new_password = form.cleaned_data.get('confirm_new_password')
			link = str(self.request.path)
			user_email = link.split('/')[-3]
			print('user_email',user_email)
			admin_obj = SuperAdmin.objects.filter(email = user_email).first()
			user_obj = User.objects.filter(id=admin_obj.user.id).first()
			if user_obj:
				user_obj.set_password(new_password)
				user_obj.save()
				admin_obj.forgotPasswordLink = "LinkExpiry"
				admin_obj.save()
				messages.success(request, "Password changed successfully")
				return redirect('/')
			else:
				messages.error(request, "Something went wrong")
				return redirect('/')
		else:
			return render(request, self.template_name, {'form': form})


class AdminLogout(TemplateView):
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		logout(request)
		messages.success(request, "Logout Succesfully")
		return redirect('/')


class AdminResetPassword(TemplateView):
	template_name = 'admin_reset_password.html'
	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		return render(request,self.template_name,locals())

	def post(self,request):
		try:
			form = forms.change_password_form(request.POST)
			if form.is_valid():
				password = request.POST.get("confirmPassword")
				user     = User.objects.get(email=request.user.email)
				user.set_password(password)
				user.save()
				logout(request)
				messages.info(request, 'You have successfully reset your password')
				return redirect('/')
			else:
				return render(request, 'admin_reset_password.html', {'form': form})
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')
	

from django.db.models.functions import TruncMonth
from django.db.models import Count
import json

class AdminDashboard(TemplateView):
		template_name = 'dashboard.html'
		@method_decorator(login_required(login_url='/'))

		def get(self,request):
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			total_clients = AppUser.objects.filter(end_date__isnull = True).count()
			total_trainers = Trainer.objects.filter(end_date__isnull = True).count()
			total_exercise = AdminExercise.objects.filter(end_date__isnull = True).count()

			client_listing = AppUser.objects.filter(end_date__isnull = True).order_by('-id')[:5]
			trainers_listing = Trainer.objects.filter(end_date__isnull = True).order_by('-id')[:5]

			trainer_obj  =  Trainer.objects.filter(end_date__isnull = True )

			client_data = AppUser.objects.filter(status=True).annotate(month=TruncMonth('created_at')).values('month').annotate(count=Count('id')).order_by('month')
			formatted_data_clients = {
				'months': [entry['month'].strftime('%Y-%m') for entry in client_data],
				'counts': [entry['count'] for entry in client_data],
			}
			formatted_data_json = json.dumps(formatted_data_clients)  # Convert to JSON string



			trainer_data = Trainer.objects.filter(status=True).annotate(month=TruncMonth('created_at')).values('month').annotate(count=Count('id')).order_by('month')
			formatted_data_tranier = {
				'months': [entry['month'].strftime('%Y-%m') for entry in trainer_data],
				'counts': [entry['count'] for entry in trainer_data],
			}
			formatted_data_json_trainer = json.dumps(formatted_data_tranier)  # Convert to JSON string

			gender_counts = (
				AppUser.objects
				.exclude(gender__isnull=True)
				.exclude(gender__exact='')
				.values('gender')
				.annotate(count=Count('id'))
			)
			gender_data = json.dumps([{'name': entry['gender'], 'y': entry['count']} for entry in gender_counts])
			login_users=AppUser.objects.filter(end_date__isnull = True,is_profile_completed=True).count()
			signup_users=AppUser.objects.filter(end_date__isnull = True,is_profile_completed=False).count()
			exercise_counts = Assesments.objects.values('exercise__exercise__name').annotate(count=Count('id')).order_by()
			exercise_name = [x['exercise__exercise__name'] for x in exercise_counts]
			exercise_count = [x['count'] for x in exercise_counts]
			exercise_names_json = json.dumps(exercise_name)
			exercise_counts_json = json.dumps(exercise_count)
			print(exercise_name,exercise_count)
			
			return render(request,self.template_name,locals())
	
class AdminProfile(TemplateView):
	template_name = 'admin_profile.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			return render(request,self.template_name,locals())
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 
		
	def post(self,request):
		try:
			form = forms.adminprofile_form(request.POST)
			if form.is_valid():
				first_name = form.cleaned_data.get('first_name')
				last_name = form.cleaned_data.get('last_name')
				email = form.cleaned_data.get('email')
				phone_number = form.cleaned_data.get('phone_number')
				address = form.cleaned_data.get('address')
				SuperAdmin.objects.filter(user=request.user.id).update(firstName=first_name,lastName=last_name,email=email,phoneNumber=phone_number,address=address)
				if request.FILES.get('avatar'):
					fileUrl=uploadTheImages(request.FILES.get('avatar'))
					fileUrl='/'+fileUrl
					SuperAdmin.objects.filter(user=request.user.id).update(image=str(fileUrl))
				messages.success(request, "Update Succesfully")
				return redirect('admin-profile')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')
	
class TrainerList(TemplateView):
	template_name = 'trainer_list.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		try:
	
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			base_url = str(settings.BASE_URL)
			user_obj = Trainer.objects.filter(end_date__isnull = True).order_by('-id')
			search_post = request.GET.get('search')
			start_from = request.GET.get('start_from')
			print('start_from',start_from)
			start_to = request.GET.get('start_to')
			print('start_to',start_to)

					
			time = "11:59:59"
			lookups = Q()
			if search_post:
				
				user_obj=Trainer.objects.filter(Q(full_name__icontains=search_post)|Q(email__icontains=search_post),end_date__isnull = True).order_by('-id')
			if start_from and start_to:
				user_obj=Trainer.objects.filter(created_at__date__range=[start_from,start_to],end_date__isnull = True).order_by('-id')
			if start_from and not start_to:
				user_obj=Trainer.objects.filter(created_at__date=start_from,end_date__isnull = True).order_by('-id')
			if start_to and not start_from:
				user_obj=Trainer.objects.filter(created_at__date=start_to,end_date__isnull = True).order_by('-id')	
			
			paginator = Paginator(user_obj, 10)
			page_number = request.GET.get('page')
			trainer_data = paginator.get_page(page_number)
			return render(request,self.template_name,locals())
		
		except Exception as e:
			print(e)
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 

class ViewTrainer(TemplateView):
	template_name = 'view_trainer.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		trainer_obj = Trainer.objects.filter(id=id,end_date__isnull=True).first()
		assessment_data=Assesments.objects.filter(trainer=trainer_obj,end_date__isnull=True)
		
		total_data=[]
		for assessment in assessment_data:
			student_assessment=StudentAssessment.objects.filter(assessment=assessment,end_date__date__isnull=True).values('student__app_user__image','student__app_user__full_name','assessment__exercise__name',
													'assessment__repetitions','assessment__sets','student__status','assessment__exercise__images')

			for data in student_assessment:
					total_data.append(data)

					
		# upcoming_booking = FortuneAppointmentBook.objects.filter(Q(appointment_status='Pending')|Q(appointment_status='Accepted'),seer_user = id)
		# past_booking = FortuneAppointmentBook.objects.filter(appointment_status='Completed',seer_user = id)
		return render(request,self.template_name,locals())


class DeleteTrainer(View):
	@method_decorator(login_required(login_url='/'))
	
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		
		trainer=Trainer.objects.get(id=id)
		if trainer:
			trainer.end_date=datetime.now()
			trainer.save()
			messages.success(request, 'Trainer Deleted Successfully')
		else:
			messages.error(request, 'Something went wrong')	
		
		return redirect('/trainer-listing')


class AddTrainer(TemplateView):
	template_name = 'add_trainer.html'

class EditTrainer(TemplateView):
	template_name = 'edit_trainer.html'
	@method_decorator(login_required(login_url='/'))

	def get(self, request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		trainer_obj = Trainer.objects.filter(id=id,end_date__isnull=True).first()
		return render(request,self.template_name,locals())
	

	def post(self, request,id):
		try:
			form = forms.EditTrainerForm(request.POST)
			if form.is_valid():
				email = form.cleaned_data.get('email')
				full_name = form.cleaned_data.get('full_name')
				Trainer.objects.filter(id=id).update(email=email,full_name=full_name)
				if request.FILES.get('image'):
					fileUrl=uploadTheImages(request.FILES.get('image'))
					fileUrl='/'+fileUrl
					Trainer.objects.filter(id=id).update(image = fileUrl)
				messages.success(request, "Update Succesfully")
				return redirect('trainer-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')


class changeTrainerStatus(TemplateView):
	@method_decorator(login_required(login_url='/'))

	def post(self,request):
		try:
			pub        = Trainer.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Trainer status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Trainer status is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')


class ClientList(TemplateView):
	template_name = 'client_list.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			base_url = str(settings.BASE_URL)
			user_obj = AppUser.objects.filter(end_date__isnull = True).order_by('-id')
			search_post = request.GET.get('search')
			start_from = request.GET.get('start_from')
			start_to = request.GET.get('start_to')
			time = "11:59:59"
			lookups = Q()
			if search_post:
				lookups.add(Q(full_name__icontains=search_post)|Q(email__icontains=search_post), Q.AND)
				user_obj = AppUser.objects.filter(lookups,end_date__isnull = True).order_by('-id')
			if start_from and start_to:
						user_obj=AppUser.objects.filter(created_at__date__range=[start_from,start_to],end_date__isnull = True).order_by('-id')
			if start_from and not start_to:
					user_obj=AppUser.objects.filter(created_at__date=start_from,end_date__isnull = True).order_by('-id')
			if start_to and not start_from:
					user_obj=AppUser.objects.filter(created_at__date=start_to,end_date__isnull = True).order_by('-id')	
			paginator = Paginator(user_obj, 10)
			page_number = request.GET.get('page')
			user_data = paginator.get_page(page_number)
			return render(request,self.template_name,locals())
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class ViewClient(TemplateView):
	template_name = 'view_client.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		user_obj = AppUser.objects.filter(id=id,end_date__isnull=True).first()
		student=Students.objects.filter(app_user=user_obj,end_date__isnull=True).first()
		print(student)
		exercise_counts = StudentAssessment.objects.filter(student=student).values('assessment__exercise__exercise__name').annotate(count=Count('id')).order_by()
		exercise_name = [x['assessment__exercise__exercise__name'] for x in exercise_counts]
		exercise_count = [x['count'] for x in exercise_counts]
		exercise_names_json = json.dumps(exercise_name)
		exercise_counts_json = json.dumps(exercise_count)
		print(exercise_name,exercise_count)
		return render(request,self.template_name,locals())

class EditClient(TemplateView):
	template_name = 'edit_client.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		user_obj = AppUser.objects.filter(id=id,end_date__isnull=True).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			form = forms.EditClientForm(request.POST)
			if form.is_valid():
				email = form.cleaned_data.get('email')
				full_name = form.cleaned_data.get('full_name')
				AppUser.objects.filter(id=id).update(email=email,full_name=full_name)
				if request.FILES.get('image'):
					fileUrl=uploadTheImages(request.FILES.get('image'))
					fileUrl='/'+fileUrl
					AppUser.objects.filter(id=id).update(image = fileUrl)
				messages.success(request, "Update Succesfully")
				return redirect('trainer-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')


class changeClientStatus(TemplateView):
	@method_decorator(login_required(login_url='/'))
	def post(self,request):
		try:
			pub        = AppUser.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "AppUser status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "AppUser status is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')



class DeleteClient(View):
	@method_decorator(login_required(login_url='/'))
		
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		app_user=AppUser.objects.get(id=id)
		if app_user:
			app_user.end_date=datetime.now()
			app_user.save()
			messages.success(request, 'Client Deleted Successfully')
		else:
			messages.error(request, 'Something went wrong')	
		return redirect('/client-listing')

class ExerciseList(TemplateView):
	template_name = 'exercise_list.html'
	@method_decorator(login_required(login_url='/'))

	def get(self, request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			data_obj = AdminExercise.objects.filter(end_date__isnull = True).order_by('-id')
			search_post = request.GET.get('search')
			if search_post:
				data_obj = AdminExercise.objects.filter(Q(name__icontains=search_post),end_date__isnull = True).order_by('-id')
			paginator = Paginator(data_obj, 10)
			page_number = request.GET.get('page')
			exercise_obj = paginator.get_page(page_number)
			return render(request,self.template_name,locals())
		except Exception as e:
			print(e)
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 

class AddExercise(TemplateView):
	template_name = 'add_exercise.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		fitness_level = FitnessLevel.objects.all()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		try:
			form = forms.addExerciseform(request.POST)
			if form.is_valid():
				fitness_id = form.cleaned_data.get('fitness_level')
				day = form.cleaned_data.get('day')
				name = form.cleaned_data.get('name')
				description = form.cleaned_data.get('description')

				if request.FILES.get('avatar'):
					fileUrl=uploadTheImages(request.FILES.get('avatar'))
					fileUrl='/'+fileUrl
				fitness_obj = FitnessLevel.objects.filter(id=fitness_id).first()
				AdminExercise.objects.create(exercise_level=fitness_obj,name=name,description=strip_tags(description),image=str(fileUrl),day = day)
				messages.success(request, "Created Succesfully")
				return redirect('exercise-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class ExerciseView(TemplateView):
	template_name = 'view_exercise.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		exercise_obj = AdminExercise.objects.filter(id=id,end_date__isnull=True).first()
		sub_exercise_obj = AdminSubExercise.objects.filter(exercise=exercise_obj)
		total_sub_exercise = AdminSubExercise.objects.filter(exercise=exercise_obj).count()
		base_url = str(settings.BASE_URL)
		return render(request,self.template_name,locals())

class EditExercise(TemplateView):
	template_name = 'edit_exercise.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		exercise_obj = AdminExercise.objects.filter(id=id,end_date__isnull=True).first()
		fitness_level = FitnessLevel.objects.all()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			print("in post")
			form = forms.addExerciseform(request.POST)
			if form.is_valid():
				print("here")
				fitness_id = form.cleaned_data.get('fitness_level')
				name = form.cleaned_data.get('name')
				description = form.cleaned_data.get('description')
				day = form.cleaned_data.get('day')
				fitness_obj = FitnessLevel.objects.filter(id=fitness_id).first()
				exercise_obj = AdminExercise.objects.filter(id=id).update(exercise_level=fitness_obj,name=name,description=strip_tags(description),day=day)
				
				if request.FILES.get('avatar'):
					print("in avatar")
					fileUrl = uploadTheImages(request.FILES.get('avatar'))
					fileUrl = '/'+fileUrl
					exercise_obj = AdminExercise.objects.filter(id=id).update(image=str(fileUrl))
				messages.success(request, 'Updated Successfully')
				return redirect('exercise-listing')	
			
			else:
				print("in else")
				print(form.errors)
				return render(request,self.template_name)
			
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 

class AddSubExercise(TemplateView):
	template_name = 'add_sub_exercise.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		exercise_obj = AdminExercise.objects.filter(id=id).first()
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			form = forms.addSubExerciseform(request.POST,)
			if form.is_valid():
				name = form.cleaned_data.get('name')
				description = form.cleaned_data.get('description')
				comments = form.cleaned_data.get('comments')
				note = form.cleaned_data.get('note')
				focus_area = form.cleaned_data.get('focus_area')
				sets = form.cleaned_data.get('sets')
				reps = form.cleaned_data.get('reps')
				youtube_link = form.cleaned_data.get('youtube_link')
				videos = form.cleaned_data.get('videos')
				exercise_obj = AdminExercise.objects.filter(id=id).first()
				

				image_data = []
				video_data = []
				if request.FILES.getlist('images'):
					images = request.FILES.getlist('images')
					for image in images:
						fileUrl=uploadTheImages(image)
						fileUrl='/'+fileUrl
						image_data.append(fileUrl)

				
				if request.FILES.getlist('videos'):
					videos = request.FILES.getlist('videos')
					for video in videos:
						fileUrl=uploadTheImages(video)
						fileUrl='/'+fileUrl
						video_data.append(fileUrl)
						
				primary_image = None
				if request.FILES.get('primary_image'):
					fileUrl=uploadTheImages(request.FILES.get('primary_image'))
					primary_image='/'+fileUrl

				AdminSubExercise.objects.create(exercise=exercise_obj,name=name,description=description,comments = comments,note = note,
					focus_area = focus_area,sets = sets,reps = reps,youtube_link = youtube_link,images = image_data,videos = video_data,primary_image=primary_image)
				messages.success(request, "Created Succesfully")
				return redirect('/view-exercise/'+str(exercise_obj.id))
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')


class EditSubExercise(TemplateView):
	template_name = 'edit_sub_exercise.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		sub_exercise_obj = AdminSubExercise.objects.filter(id=id,end_date__isnull=True).first()
		sub_exercise_images =  ast.literal_eval(sub_exercise_obj.images)
		sub_exercise_videos =  ast.literal_eval(sub_exercise_obj.videos)
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			form = forms.addSubExerciseform(request.POST)
			if form.is_valid():
				name = form.cleaned_data.get('name')
				description = form.cleaned_data.get('description')
				comments = form.cleaned_data.get('comments')
				note = form.cleaned_data.get('note')
				focus_area = form.cleaned_data.get('focus_area')
				sets = form.cleaned_data.get('sets')
				reps = form.cleaned_data.get('reps')
				youtube_link = form.cleaned_data.get('youtube_link')
				removed_images = request.POST.get('removed_images')
				removed_videos = request.POST.get('removed_videos')
				sub_exercise_obj = AdminSubExercise.objects.filter(id=id).first()
				AdminSubExercise.objects.filter(id=id).update(name=name,description=description,comments = comments,note = note,
					focus_area = focus_area,sets = sets,reps = reps,youtube_link = youtube_link,)
				
				sub_exercise_images = ast.literal_eval(sub_exercise_obj.images) 
				sub_exercise_videos =  ast.literal_eval(sub_exercise_obj.videos)
				if request.FILES.get('primary_image'):
					fileUrl=uploadTheImages(request.FILES.get('primary_image'))
					fileUrl='/'+fileUrl
					AdminSubExercise.objects.filter(id=id).update(primary_image=str(fileUrl))
				
				if request.FILES.getlist('images'):
					images = request.FILES.getlist('images')
					for image in images:
						fileUrl=uploadTheImages(image)
						fileUrl='/'+fileUrl
						sub_exercise_images.append(fileUrl)
						
				
				if request.FILES.getlist('videos'):
					videos = request.FILES.getlist('videos')
					for video in videos:
						fileUrl=uploadTheImages(video)
						fileUrl='/'+fileUrl
						sub_exercise_videos.append(fileUrl)
					
				# Remove images from sub_exercise_images if they exist in removed_images
				if removed_images:
					removed_images_list = ast.literal_eval(removed_images)
					for removed_image in removed_images_list:
						if removed_image in sub_exercise_images:
							sub_exercise_images.remove(removed_image)
				
				if removed_videos:
					removed_videos_list = ast.literal_eval(removed_videos)
					for removed_videos in removed_videos_list:
						if removed_videos in sub_exercise_videos:
							sub_exercise_videos.remove(removed_videos)
					
				# Update AdminSubExercise with modified images list
				AdminSubExercise.objects.filter(id=id).update(images=sub_exercise_images,videos=sub_exercise_videos)
				messages.success(request, 'Updated Successfully')
				return redirect('/view-exercise/'+str(sub_exercise_obj.exercise.id))
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 

class ViewSubExercise(TemplateView):
	template_name = 'view_sub_exercise.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		sub_exercise_obj = AdminSubExercise.objects.filter(id=id).first()
		sub_exercise_images =  ast.literal_eval(sub_exercise_obj.images)
		sub_exercise_videos =  ast.literal_eval(sub_exercise_obj.videos)
		return render(request,self.template_name,locals())

class PlansList(TemplateView):
	template_name = 'plans_list.html'

class SubscribedList(TemplateView):
	template_name = 'subscribed_list.html'
	
class AddSubscription(TemplateView):
	template_name = 'add_subscription.html'

class EditSubscription(TemplateView):
	template_name = 'edit_subscription.html'

class GetReport(TemplateView):
		template_name = 'get_report.html'
		@method_decorator(login_required(login_url='/'))
		def get(self,request):
			try:
				
				total_users=AppUser.objects.filter(end_date__isnull = True).count()
				total_trainers=Trainer.objects.filter(end_date__isnull = True).count()
				total_exercises=AdminExercise.objects.all().count()
				get_new_clients_count=AppUser.objects.filter(end_date__isnull = True).annotate(month=TruncMonth('created_at')).values('month').annotate(
					count=Count('id')
				).values('month','count').order_by('month')
				
				# month_names = [x['month__month'].strftime('%B') for x in get_new_clients_count]

				
				count_list = [x['count'] for x in get_new_clients_count]
				date_list = [x['month'].strftime("%B") for x in get_new_clients_count]
				gender_counts = (
				AppUser.objects
				.exclude(gender__isnull=True)
				.exclude(gender__exact='')
				.values('gender')
				.annotate(count=Count('id'))
			)
				gender_data = json.dumps([{'name': entry['gender'], 'y': entry['count']} for entry in gender_counts])
				login_users=AppUser.objects.filter(end_date__isnull = True,is_profile_completed=True).count()
				signup_users=AppUser.objects.filter(end_date__isnull = True,is_profile_completed=False).count()
				exercise_counts = Assesments.objects.values('exercise__exercise__name').annotate(count=Count('id')).order_by()
				exercise_name = [x['exercise__exercise__name'] for x in exercise_counts]
				exercise_count = [x['count'] for x in exercise_counts]
				exercise_names_json = json.dumps(exercise_name)
				exercise_counts_json = json.dumps(exercise_count)
				print(exercise_name,exercise_count)
				return render(request,self.template_name,locals())
			except Exception as e:
				print(e)
				messages.warning(request, "Something went wrong.Please try again.")
				return redirect('admin-dashboard') 

class ProductListing(TemplateView):
	template_name = 'product_listing.html'

class AddProduct(TemplateView):
	template_name = 'add_product.html'


class MainGoalsLisitng(TemplateView):
	template_name = 'goals_listing.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			data_obj = OnBoardingData.objects.filter(screen_type='main_goals',end_date__isnull = True).order_by('-id')
			search_post = request.GET.get('search')
			if search_post:
				data_obj = OnBoardingData.objects.filter(title__icontains=search_post,screen_type='main_goals',end_date__isnull = True).order_by('-id')
			paginator = Paginator(data_obj, 10)
			page_number = request.GET.get('page')
			goals_obj = paginator.get_page(page_number)
			return render(request,self.template_name,locals())

		except Exception as e:
			print(e)
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 

class AddGoals(TemplateView):
	template_name = 'add_goals.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		try:
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.create(title=title,screen_type='main_goals')
				messages.success(request, "Created Succesfully")
				return redirect('goals-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class EditGoals(TemplateView):
	template_name = 'edit_goals.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		goals_obj = OnBoardingData.objects.filter(id=id,screen_type='main_goals',end_date__isnull=True).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			print("in post")
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				print("here")
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.filter(id=id).update(title=title,screen_type='main_goals')
				
				
				messages.success(request, 'Updated Successfully')
				return redirect('goals-listing')	
			
			else:
				print("in else")
				print(form.errors)
				return render(request,self.template_name)
			
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 

	
class DeleteGoals(View):
	@method_decorator(login_required(login_url='/'))
	
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		
		trainer=OnBoardingData.objects.get(id=id)
		if trainer:
			trainer.end_date=datetime.now()
			trainer.save()
			messages.success(request, 'Goals Deleted Successfully')
		else:
			messages.error(request, 'Something went wrong')	
		
		return redirect('/goals-listing')
	
	def post(self,request,id):
		try:
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.filter(id=id).update(title=title)
				messages.success(request, "Updated Succesfully")
				return redirect('goals-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('dashboard')

class MedicalConditions(TemplateView):
	template_name = 'medical_listing.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			data_obj = OnBoardingData.objects.filter(screen_type='medical_conditions',end_date__isnull = True).order_by('-id')
			search_post = request.GET.get('search')
			if search_post:
				data_obj = OnBoardingData.objects.filter(Q(title__icontains=search_post),screen_type='medical_conditions',end_date__isnull = True).order_by('-id')
			paginator = Paginator(data_obj, 10)
			page_number = request.GET.get('page')
			medical_obj = paginator.get_page(page_number)
			return render(request,self.template_name,locals())

		except Exception as e:
			print(e)
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class AddMedicalConditions(TemplateView):
	template_name = 'add_conditions.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		try:
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.create(title=title,screen_type='medical_conditions')
				messages.success(request, "Created Succesfully")
				return redirect('medical-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')
		
class EditMedicals(TemplateView):
	template_name = 'edit_medicals.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		medicals_obj = OnBoardingData.objects.filter(id=id,screen_type='medical_conditions',end_date__isnull=True).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.filter(id=id).update(title=title)
				messages.success(request, "Updated Succesfully")
				return redirect('medical-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class DeleteMedicals(View):
	@method_decorator(login_required(login_url='/'))
	
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		
		trainer=OnBoardingData.objects.get(id=id,screen_type='medical_conditions')
		if trainer:
			trainer.end_date=datetime.now()
			trainer.save()
			messages.success(request, 'Medical condition deleted Successfully')
		else:
			messages.error(request, 'Something went wrong')	
		
		return redirect('/medical-listing')
		
class AllergyListing(TemplateView):
	template_name = 'allergy_listing.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			data_obj = OnBoardingData.objects.filter(screen_type='allergy_exclusion',end_date__isnull = True).order_by('-id')
			search_post = request.GET.get('search')
			if search_post:
				data_obj = OnBoardingData.objects.filter(Q(title__icontains=search_post),screen_type='allergy_exclusion',end_date__isnull = True).order_by('-id')
			paginator = Paginator(data_obj, 10)
			page_number = request.GET.get('page')
			allergy_obj = paginator.get_page(page_number)
			return render(request,self.template_name,locals())

		except Exception as e:
			print(e)
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class AddAllergy(TemplateView):
	template_name = 'add_allergy.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request):
		try:
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.create(title=title,screen_type='allergy_exclusion')
				messages.success(request, "Created Succesfully")
				return redirect('allergy-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class EditAllergy(TemplateView):
	template_name = 'edit_allergy.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		allergy_obj = OnBoardingData.objects.filter(id=id,screen_type='allergy_exclusion',end_date__isnull=True).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
		try:
			form = forms.onboarding_form(request.POST)
			if form.is_valid():
				title = form.cleaned_data.get('title')
				OnBoardingData.objects.filter(id=id).update(title=title)
				messages.success(request, "Updated Succesfully")
				return redirect('allergy-listing')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')		

class DeleteAllergy(TemplateView):
		@method_decorator(login_required(login_url='/'))
	
		def get(self,request,id):
			try:
				OnBoardingData.objects.filter(id=id).update(end_date=datetime.now())
				messages.success(request, "Deleted Succesfully")
				return redirect('allergy-listing')
			except Exception as e:
				messages.warning(request, "Something went wrong.Please try again.")
				return redirect('admin-dashboard')		

class changeOnBoardingStatus(TemplateView):
	@method_decorator(login_required(login_url='/'))
	def post(self,request):
		try:
			pub        = OnBoardingData.objects.get(id = request.POST['main_id'])
			pub.status = request.POST['status']
			pub.save()
			if pub.status == "1":
				messages.success(request, "Status is activated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
			else:
				messages.error(request, "Status is deactivated")
				return HttpResponse(request.META.get('HTTP_REFERER'))
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class Commission(TemplateView):
	template_name = 'commission.html'

class PaymentList(TemplateView):
	template_name = 'payment_listing.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		
			search_post = request.GET.get('search')
			start_from = request.GET.get('start_from')
			print('start_from',start_from)
			start_to = request.GET.get('start_to')
			print('start_to',start_to)
			get_transaction=UserTranscations.objects.all()
			transactions = get_transaction.values('trainer__full_name','trainer__full_name','user__image','user__full_name','amount')
					
			
			if search_post:
				print("here")
				transactions = get_transaction.filter(
						Q(trainer__full_name__icontains=search_post) |
						Q(user__full_name__icontains=search_post) |
						Q(amount__icontains=search_post)  # Adjust based on how amount should be searched
					).order_by('-id').values(
						'trainer__full_name',
						'trainer__image',
						'user__image',
						'user__full_name',
						'amount'
					)
			if start_from and start_to:
				transactions=get_transaction.filter(created_at__date__range=[start_from,start_to],end_date__isnull = True).order_by('-id').values('trainer__full_name','trainer__full_name','user__image','user__full_name','amount')
			if start_from and not start_to:
				transactions=get_transaction.filter(created_at__date=start_from,end_date__isnull = True).order_by('-id').values('trainer__full_name','trainer__full_name','user__image','user__full_name','amount')
			if start_to and not start_from:
				transactions =get_transaction.filter(created_at__date=start_from,end_date__isnull = True).order_by('-id').values('trainer__full_name','trainer__full_name','user__image','user__full_name','amount')
			
			paginator = Paginator(transactions, 10)
			page_number = request.GET.get('page')
			transactions_data = paginator.get_page(page_number)
			return render(request,self.template_name,locals())
		

class ViewPayment(TemplateView):
	template_name = 'view_payment.html'

class TrainerPaymentRequestlisting(TemplateView):
	template_name='list_trainer_payment_request.html'
	@method_decorator(login_required(login_url='/'))
	
	def post(self,request):
		try:
			status = request.POST.get('status')
			id=request.POST.get('id')
			get_transaction=Requestmoney.objects.filter(id=id)
			if status == 'accept':
				get_transaction.update(status='accepted')
				# Handle accept action
				return redirect('trainer-payment-request-listing')

			elif status == 'reject':
				# Handle reject action
				get_transaction.update(status='rejected')
				return redirect('trainer-payment-request-listing')


			elif status == 'pending':
				# Handle pending action
				get_transaction.update(status='pending')
				return redirect('trainer-payment-request-listing')


			else:
				# Handle invalid status or default action
				return redirect('trainer-payment-request-listing')

		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('trainer-payment-request-listing')
	def get(self,request):
			
		try:
			search_post = request.GET.get('search')
			start_from = request.GET.get('start_from')
			print('start_from',start_from)
			start_to = request.GET.get('start_to')
			print('start_to',start_to)
			get_transaction=Requestmoney.objects.all()
			transactions = get_transaction.values('id','trainer__image','trainer__full_name','created_at','requested_money','status').order_by('-created_at')


			if search_post:
				print("here")
				transactions = get_transaction.filter(
						Q(trainer__full_name__icontains=search_post) |
						Q(user__full_name__icontains=search_post) |
						Q(amount__icontains=search_post)  # Adjust based on how amount should be searched
					).order_by('-created_at').values(
						'trainer__id',
						'trainer__full_name',
						'trainer__image',
						'created_at',
						'requested_money'
					)
			if start_from and start_to:
				transactions=get_transaction.filter(created_at__date__range=[start_from,start_to],end_date__isnull = True).order_by('-created_at').values('trainer__id','trainer__full_name','trainer__full_name','created_at','requested_money')
			if start_from and not start_to:
				transactions=get_transaction.filter(created_at__date=start_from,end_date__isnull = True).order_by('-created_at').values('trainer__id','trainer__full_name','trainer__full_name','created_at','requested_money')
			if start_to and not start_from:
				transactions =get_transaction.filter(created_at__date=start_from,end_date__isnull = True).order_by('-created_at').values('trainer__id','trainer__full_name','trainer__full_name','created_at','requested_money')


			return render(request,self.template_name,locals())
		except Exception as e:
			print(e)
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')

class ContentManagementList(TemplateView):
	template_name = 'content_management.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			content_obj = ContentManagement.objects.filter(end_date__isnull = True).order_by('id')
			return render(request,self.template_name,locals())
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 
		

class UpdateContentPage(TemplateView):
	template_name = 'update_content_page.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		try:
			admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
			content_obj = ContentManagement.objects.filter(id = id).first()
			return render(request,self.template_name,locals())
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard') 
		
	def post(self,request,id):
		try:
			form = forms.updatecontent_form(request.POST)
			if form.is_valid():
				content = form.cleaned_data.get('content')
				ContentManagement.objects.filter(id=id).update(text=content)
				messages.success(request, "Update Succesfully")
				return redirect('content-management')
			else:
				return render(request,self.template_name)
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')
	

class FaqListing(TemplateView):
	template_name = 'faq_listing.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		data_obj = Faq.objects.filter(end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 10)
		page_number = request.GET.get('page')
		faq_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())

class EditFaq(TemplateView):
	template_name = 'edit_faq.html'
	@method_decorator(login_required(login_url='/'))
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		faq_obj = Faq.objects.filter(id=id,end_date__isnull = True).first()
		return render(request,self.template_name,locals())
	

	def post(self,request,id):
		form = forms.addfaqform(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			type = form.cleaned_data.get('type')
			Faq.objects.filter(id=id).update(title=title,content=content,type=type)
			messages.success(request, 'Updated Successfully')
			return redirect('/faq-listing')
		else:
			return render(request,self.template_name)

class AddFaq(TemplateView):
	template_name = 'add_faq.html'
	@method_decorator(login_required(login_url='/'))
	def post(self,request):
		form = forms.addfaqform(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			content = form.cleaned_data.get('content')
			type = form.cleaned_data.get('type')
			Faq.objects.create(title=title,content=content,type=type)
			messages.success(request, 'Created Successfully')
			return redirect('/faq-listing')
		else:
			return render(request,'add_faq.html')


class CreateWorkout(TemplateView):
	template_name = 'create_workout.html'

class CreateWorkoutList(TemplateView):
	template_name = 'create_workout_list.html'

class SubWorkoutList(TemplateView):
	template_name = 'sub_workout_list.html'

class DayWorkoutList(TemplateView):
	template_name = 'day_workout.html'

class ScheduleList(TemplateView):
	template_name = 'schedule_list.html'


class AdminNotification(TemplateView):
	template_name = 'admin_notifications.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		data_obj = AdminNotifications.objects.all()
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		notify_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	

class deleteAdminNotifications(TemplateView):
	template_name = 'admin_notifications.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		try:
			if request.method == 'GET':
				ids = request.GET.get('delete_id')
				if ids:
					int_id_list = [int(id) for id in ids.split(',')]
					AdminNotifications.objects.filter(pk__in=int_id_list).delete()
					messages.success(request,"Deleted Sucessfully")
				else:
					messages.error(request,"At least One notification must be selected")
				return redirect('/admin-notifications')

			else:
				return redirect('/admin-notifications')
		except Exception as e:
			messages.warning(request, "Something went wrong.Please try again.")
			return redirect('admin-dashboard')  




class DiscoverMainListing(TemplateView):
	template_name = 'discover_main_list.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		data_obj =  DiscoverMainCategory.objects.filter(end_date__isnull = True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = DiscoverMainCategory.objects.filter(name__icontains=search_post,end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		dis_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	
class AddMainListing(TemplateView):
	template_name = 'add_main_discover.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.AddDiscoverCategoryForm(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			DiscoverMainCategory.objects.create(name=name)
			messages.success(request, 'Created Successfully')
			return redirect('/discover-main-listing')
		else:
			return render(request,'add_main_discover.html')
	

class EditMainListing(TemplateView):
	template_name = 'edit_main_discover.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		data_obj =  DiscoverMainCategory.objects.filter(id=id,end_date__isnull = True).first()
		return render(request,self.template_name,locals())
	
		
	def post(self,request,id):
		form = forms.AddDiscoverCategoryForm(request.POST)
		if form.is_valid():
			name = form.cleaned_data.get('name')
			DiscoverMainCategory.objects.filter(id = id).update(name=name)
			messages.success(request, 'Updated Successfully')
			return redirect('/discover-main-listing')
		else:
			return render(request,'edit_main_discover.html')
	
	
class DeleteMainListing(View):
	@method_decorator(login_required(login_url='/'))
	
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		main_category=DiscoverMainCategory.objects.get(id=id)
		if main_category:
				main_category.end_date=datetime.now()
				main_category.save()
		messages.success(request, 'Category Deleted Successfully')
		return redirect('/discover-main-listing')
	



class DiscoverSubListing(TemplateView):
	template_name = 'discover_sub_list.html'
	@method_decorator(login_required(login_url='/'))
	
	def get(self,request):
		data_obj =  DiscoverSubCategory.objects.filter(end_date__isnull = True).order_by('-id')
		search_post = request.GET.get('search')
		if search_post:
			data_obj = DiscoverSubCategory.objects.filter(Q(title__icontains=search_post) | Q(main_category__name__icontains=search_post),end_date__isnull = True).order_by('-id')
		paginator = Paginator(data_obj, 8)
		page_number = request.GET.get('page')
		dis_obj = paginator.get_page(page_number)
		return render(request,self.template_name,locals())
	
class AddSubListing(TemplateView):
	template_name = 'add_sub_discover.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request):
		main_obj  = DiscoverMainCategory.objects.filter(end_date__isnull = True)
		return render(request,self.template_name,locals())
	
	def post(self,request):
		form = forms.AddDiscoverSubCategoryForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			description = form.cleaned_data.get('description')
			main_category = form.cleaned_data.get('main_category')
			main_obj = DiscoverMainCategory.objects.get(id = main_category)
			sub_obj = DiscoverSubCategory.objects.create(title=title,description=description,main_category=main_obj)
			if request.FILES.get('image'):
				images = request.FILES.get('image')
				fileUrl=uploadTheImages(images)
				fileUrl='/'+fileUrl
				sub_obj.image = fileUrl
			messages.success(request, 'Updated Successfully')
			return redirect('/discover-sub-listing')
		else:
			return render(request,'add_sub_discover.html')
	

class EditSubListing(TemplateView):
	template_name = 'edit_sub_discover.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		sub_obj =  DiscoverSubCategory.objects.get(id=id)
		main_obj  = DiscoverMainCategory.objects.filter(end_date__isnull = True)
		return render(request,self.template_name,locals())
	
		
	def post(self,request,id):
		form = forms.AddDiscoverSubCategoryForm(request.POST)
		if form.is_valid():
			title = form.cleaned_data.get('title')
			description = form.cleaned_data.get('description')
			main_category = form.cleaned_data.get('main_category')
			main_obj =  DiscoverMainCategory.objects.get(id=main_category)
			DiscoverSubCategory.objects.filter(id = id).update(title=title,description = description,main_category = main_obj)
			if request.FILES.get('image'):
				images = request.FILES.get('image')
				fileUrl=uploadTheImages(images)
				fileUrl='/'+fileUrl
				DiscoverSubCategory.objects.filter(id = id).update(image = fileUrl)
						
			messages.success(request, 'Updated Successfully')
			return redirect('/discover-sub-listing')
		else:
			return render(request,'edit_main_discover.html')
	
	
class DeleteSubListing(View):
	@method_decorator(login_required(login_url='/'))
	
	def get(self,request,id):
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		sub_category=DiscoverSubCategory.objects.get(id=id)
		if sub_category:
				sub_category.end_date=datetime.now()
				sub_category.save()
				messages.success(request, 'Category Deleted Successfully')
		else:
			messages.success(request, 'Something went wrong')	
		return redirect('/discover-sub-listing')


class viewSubListing(TemplateView):
	template_name = 'view_sub_discover.html'
	@method_decorator(login_required(login_url='/'))

	def get(self, request,id):
		sub_obj = DiscoverSubCategory.objects.get(id=id)
		execise_obj = DiscoverExercise.objects.filter(subcategory_id = id,end_date__isnull = True)
		return render(request,self.template_name,locals())


class AdminDiscoverExerices(TemplateView):
	template_name = 'add_discover_exercise.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		exercise_obj = DiscoverSubCategory.objects.filter(id=id).first()
		admin_obj = SuperAdmin.objects.filter(user=request.user.id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
			form = forms.addDiscoverExerciseform(request.POST,)
			if form.is_valid():
				print("hello")
				name = form.cleaned_data.get('name')
				description = form.cleaned_data.get('description')
				sets = form.cleaned_data.get('sets')
				reps = form.cleaned_data.get('reps')
				weight = form.cleaned_data.get('weight')
				minutes = form.cleaned_data.get('minutes')

				if minutes:
					exercise_type = "minutes"
				else:
					exercise_type = "sets"
				video_data=""
				primary_image=""
				if request.FILES.get('videos'):
					videos = request.FILES.get('videos')
					fileUrl=uploadTheImages(videos)
					fileUrl='/'+fileUrl
					video_data = fileUrl
						
				if request.FILES.get('primary_image'):
					fileUrl=uploadTheImages(request.FILES.get('primary_image'))
					primary_image='/'+fileUrl
				
				subobj = DiscoverSubCategory.objects.filter(id=id).first()
				if minutes:
		# Create the DiscoverExercise object with minutes and possibly a primary_image
					DiscoverExercise.objects.create(
						exercise_type=exercise_type,
						subcategory=subobj,
						minutes=minutes,
						name=name,
						description=description,
						videos=video_data,
						primary_image=primary_image
					)
				else:
					# Create the DiscoverExercise object with weight, sets, reps, and possibly a primary_image
					DiscoverExercise.objects.create(
						exercise_type=exercise_type,
						subcategory=subobj,
						weight=weight,
						name=name,
						description=description,
						sets=sets,
						reps=reps,
						videos=video_data,
						primary_image=primary_image  # This will be an empty string if not set
					)
				messages.success(request, "Created Succesfully")
				return redirect('/view-sub-listing/'+str(subobj.id))
			else:
				print(form.errors)
				return render(request,self.template_name)



class ViewDiscoverExerices(TemplateView):
	template_name = 'view_discover_exercise.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		exe_obj = DiscoverExercise.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
	


class EditDiscoverExerices(TemplateView):
	template_name = 'edit_discover_exercise.html'
	@method_decorator(login_required(login_url='/'))

	def get(self,request,id):
		exe_obj = DiscoverExercise.objects.filter(id=id).first()
		return render(request,self.template_name,locals())
	
	def post(self,request,id):
			form = forms.addDiscoverExerciseform(request.POST,)
			if form.is_valid():
				print(id)
				name = form.cleaned_data.get('name')
				description = form.cleaned_data.get('description')
				sets = form.cleaned_data.get('sets')
				reps = form.cleaned_data.get('reps')
				weight = form.cleaned_data.get('weight')
				minutes = form.cleaned_data.get('minutes')

				if minutes:
					exercise_type = "minutes"
				else:
					exercise_type = "sets"
				primary_image=''
				video_data=''
				if request.FILES.get('videos'):
					videos = request.FILES.get('videos')
					fileUrl=uploadTheImages(videos)
					fileUrl='/'+fileUrl
					video_data = fileUrl
					
						
				if request.FILES.get('primary_image'):
					fileUrl=uploadTheImages(request.FILES.get('primary_image'))
					primary_image='/'+fileUrl
					
				get_discover_obj=DiscoverExercise.objects.filter(id=id).first()
				if minutes:
					updated_discover=DiscoverExercise.objects.filter(id=id).update(exercise_type=exercise_type,minutes=minutes,name=name,description=description,videos = video_data,primary_image=primary_image)
				else:
					updated_discover=DiscoverExercise.objects.filter(id=id).update(exercise_type=exercise_type,weight=weight,name=name,description=description,sets = sets,reps = reps,videos = video_data,primary_image=primary_image)
				
				
				subobj = DiscoverSubCategory.objects.filter(id=get_discover_obj.subcategory.id).first()
				messages.success(request, "Updated Succesfully")
				return redirect('/view-sub-listing/'+str(subobj.id))
			else:
				return render(request,self.template_name)

class AddRestTime(TemplateView):
	template_name = 'add_rest_time.html'
	@method_decorator(login_required(login_url='/'))
	def post(self,request):
		form = forms.addExercisetimerform(request.POST,)
		if form.is_valid():
			time = form.cleaned_data.get('time')
			minutes = form.cleaned_data.get('minutes')
			seconds = form.cleaned_data.get('seconds')

			if minutes:
				minutes = True
				seconds = None
			else:
				minutes = None
				seconds = True
	# Create the DiscoverExercise object with minutes and possibly a primary_image
			Exercisetimer.objects.create(
				time=time,
				minutes=minutes,
				seconds=seconds,
			)
			messages.success(request, "Created Succesfully")
			return redirect('add-rest-time')
		else:
			print(form.errors)
			return render(request,self.template_name)