from django import forms
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
# from .models import Company
from django.utils import timezone
import datetime
from CommonApp.models import UserProfile, Category
from .models import Bookings

class SlotForm(forms.Form):
	date = forms.DateField(required=True)
	def clean_date(self):
	    data = self.cleaned_data['date']
	    # raise Exception(timezone.now().date())
	    if data < timezone.now().date():
	        raise forms.ValidationError("Date field can not be lesser than today date.")
	    return data
	coach_id = forms.IntegerField(required=True)
	def clean_coach_id(self):
	    data = self.cleaned_data['coach_id']
	    # raise Exception(timezone.now().date())
	    coach = UserProfile.objects.filter(user_id=data, user_type='coach').count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid coach selection.")
	    return data

	category_id = forms.IntegerField(required=True)
	def clean_category_id(self):
	    data = self.cleaned_data['category_id']
	    # raise Exception(timezone.now().date())
	    coach = Category.objects.filter(id=data).count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid category selection.")
	    return data

class BookForm(forms.Form):
	time_slot = forms.CharField(required=True)
	# def clean_time_slot(self):
	#     data = self.cleaned_data['time_slot']
	#     # raise Exception(timezone.now().date())
	#     if data < timezone.now().date():
	#         raise forms.ValidationError("Date field can not be lesser than today date.")
	#     return data
	date = forms.DateField(required=True)
	def clean_date(self):
	    data = self.cleaned_data['date']
	    # raise Exception((datetime.datetime.now() + datetime.timedelta(days=7)).date())
	    if data < timezone.now().date():
	        raise forms.ValidationError("Date field can not be lesser than today's date.")

	    if data > (datetime.datetime.now() + datetime.timedelta(days=7)).date():
	        raise forms.ValidationError("Date field can not be greater than "+str((datetime.datetime.now() + datetime.timedelta(days=7)).date())+" date.")
	    return data
	coach_id = forms.IntegerField(required=True)
	def clean_coach_id(self):
	    data = self.cleaned_data['coach_id']
	    # raise Exception(timezone.now().date())
	    coach = UserProfile.objects.filter(user_id=data, user_type='coach').count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid coach selection.")
	    return data

	category_id = forms.IntegerField(required=True)
	def clean_category_id(self):
	    data = self.cleaned_data['category_id']
	    # raise Exception(timezone.now().date())
	    coach = Category.objects.filter(id=data, is_active=1).count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid category selection.")
	    return data

class CancelBookingForm(forms.Form):
	coach_id = forms.IntegerField(required=True)
	def clean_coach_id(self):
	    data = self.cleaned_data['coach_id']
	    # raise Exception(timezone.now().date())
	    coach = UserProfile.objects.filter(user_id=data, user_type='coach').count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid coach selection.")
	    return data

	booking_id = forms.IntegerField(required=True)
	def clean_booking_id(self):
	    data = self.cleaned_data['booking_id']
	    coach = Bookings.objects.filter(id=data).count()
	    # raise Exception(coach)
	    if coach == 0:
	        raise forms.ValidationError("Invalid booking selection.")
	    return data
	    
	category_id = forms.IntegerField(required=True)
	def clean_category_id(self):
	    data = self.cleaned_data['category_id']
	    # raise Exception(timezone.now().date())
	    coach = Category.objects.filter(id=data).count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid category selection.")
	    return data


class StarRatingForm(forms.Form):
	coach_id = forms.IntegerField(required=True)
	def clean_coach_id(self):
	    data = self.cleaned_data['coach_id']
	    # raise Exception(timezone.now().date())
	    coach = UserProfile.objects.filter(user_id=data, user_type='coach').count()
	    if coach == 0:
	        raise forms.ValidationError("Invalid coach selection.")
	    return data
	rating = forms.FloatField(required=True)
	def clean_rating(self):
		data = self.cleaned_data['rating']
		if data < 1 or data > 5:
			raise forms.ValidationError("Invalid rating.")
		return data
	booking_id = forms.IntegerField(required=True)
	rating_type = forms.CharField(required=True)
	def clean_rating_type(self):
		data = self.cleaned_data['rating_type']
		list_type = ['therapist','app','session']
		if data not in list_type:
			raise forms.ValidationError("Invalid type.")
		return data
	rating_exp_livup = forms.IntegerField(required=True)

class ReportCoach(forms.Form):
	coach_id = forms.IntegerField(required=True)
	def clean_coach_id(self):
		# raise Exception('hii')
		data = self.cleaned_data['coach_id']
		check = UserProfile.objects.get(user_id=data, user_type='coach')
		if check == None:
			raise ValidationError(_('Coach is required - Coach is not available'))
		return data
	# reason = forms.CharField(required=True)