from django.db import models
from user_app.models import AppUser
from django.core.validators import  MinValueValidator


# Create your models here.
class Trainer(models.Model):
	full_name = models.CharField(max_length=100,null=True)
	email = models.EmailField(max_length=100,null=True)
	email_verified = models.BooleanField(default=False)
	otp = models.IntegerField(null=True)
	password = models.CharField(max_length=250,null=True)
	gender = models.EmailField(max_length=30,null=True)
	age = models.IntegerField(null=True)
	fcm_token = models.CharField(max_length=250,null=True)
	device_type = models.CharField(max_length=50,null=True)
	provider_id = models.CharField(max_length=250,null=True)
	social_id = models.CharField(max_length=250,null=True)
	image = models.CharField(max_length=250,null=True)
	total_experience = models.CharField(max_length=30,null=True)
	address = models.CharField(max_length=244,null=True)
	latitude = models.CharField(max_length=244,null=True)
	longitude = models.CharField(max_length=244,null=True)
	speciality = models.TextField(null=True)
	description = models.TextField(null=True)
	is_profile_completed = models.BooleanField(default=False)
	notification_status = models.BooleanField(default=True)
	is_account_deleted = models.BooleanField(default=False)
	status =  models.BooleanField(default=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date = models.DateTimeField(null=True)
	is_favourite= models.BooleanField(default=False)

	class Meta:
		db_table = 'trainer'


class Exercise(models.Model):
	trainer = models.ForeignKey(Trainer,on_delete=models.CASCADE)
	name = models.CharField(max_length=250,null=True)
	description = models.TextField(blank=True,null=True)
	image = models.CharField(max_length=250,null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date = models.DateTimeField(null=True)

	class Meta:
		db_table = 'exercise'


class SubExercise(models.Model):
	exercise = models.ForeignKey(Exercise,on_delete=models.CASCADE)
	name = models.CharField(max_length=250,null=True)
	description = models.TextField(blank=True,null=True)
	comments = models.TextField(blank=True,null=True)
	note = models.TextField(blank=True,null=True)
	focus_area = models.TextField(blank=True,null=True)
	sets = models.IntegerField(null=True)
	reps = models.IntegerField(null=True)
	weight =  models.IntegerField(null=True)
	youtube_link = models.CharField(max_length=250,null=True)
	video_link = models.CharField(max_length=250,null=True)
	images = models.TextField(null=True)
	videos = models.TextField(null=True)
	is_completed=models.BooleanField(default=False)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date = models.DateTimeField(null=True)

	class Meta:
		db_table = 'sub_exercise'



class Videos(models.Model):
	trainer = models.ForeignKey(Trainer,on_delete=models.CASCADE)
	title = models.CharField(max_length=250,null=True)
	media_type = models.CharField(max_length=250,null=True)
	media_url = models.CharField(max_length=250,null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date = models.DateTimeField(null=True)

	class Meta:
		db_table = 'videos'

	
class Students(models.Model):
	app_user = models.ForeignKey(AppUser, on_delete=models.CASCADE)
	trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE)
	status = models.BooleanField(default=True)
	follow_request_status = models.BooleanField(default=False) 
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date = models.DateTimeField(null=True)

	class Meta:
		db_table = 'students'




class TrainerNotification(models.Model):
	trainer = models.ForeignKey(Trainer,on_delete = models.CASCADE) 
	message = models.TextField(null=True)
	is_read = models.BooleanField(default=False,null=True)
	type = models.CharField(max_length=100,null=True)
	start_date = models.DateTimeField(auto_now_add=True,null=False)
	end_date = models.DateTimeField(null=True)

	class Meta:
		db_table = "trainer_notifications"




class TrainerFriends(models.Model):
	from_user = models.ForeignKey(Trainer, on_delete=models.CASCADE, related_name='from_trainer')
	to_user = models.ForeignKey(Trainer, on_delete=models.CASCADE, related_name='to_trainer')
	accepted = models.BooleanField(default=False)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'trainer_friends'


class Assesments(models.Model):
	trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE, related_name='trainer')
	name = models.CharField(max_length=200,null = True)
	exercise = models.ForeignKey(SubExercise, on_delete=models.CASCADE)
	completion_time = models.DurationField(null=True)
	repetitions = models.IntegerField(null=True)
	sets = models.IntegerField(null=True)
	weight = models.FloatField(null=True)
	results = models.FloatField(null=True)
	notes = models.TextField(null=True)
	next_assessment_date = models.DateField(null=True)
	youtube_link = models.CharField(max_length=250,null=True)
	images = models.TextField(null =True)
	videos = models.TextField(null = True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)


	class Meta:
		db_table = 'assessments'



class StudentAssessment(models.Model):
	student = models.ForeignKey(Students,on_delete=models.CASCADE)
	assessment = models.ForeignKey(Assesments,on_delete=models.CASCADE)
	assessment_progress = models.CharField(max_length=200,null = True,default='pending')
	total_attempt = models.PositiveIntegerField(default=0)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'StudentAssessment'



class WorkoutPlan(models.Model):
	trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE)
	name = models.CharField(max_length=250,null=True)
	goal = models.CharField(max_length=250,null=True)
	description = models.TextField(null=True)
	notes = models.TextField(null=True)
	image = models.CharField(max_length=250,null=True)
	duration_type = models.CharField(max_length=100,null=True)
	duration_minutes = models.FloatField(null=True)
	duration_weeks = models.PositiveIntegerField(default=0)
	work_access = models.CharField(default='public',max_length=200,null = True)
	likes=models.IntegerField(default=0,validators=[
			MinValueValidator(0)
		])
	
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)
	is_favourite=models.BooleanField(default=False)


	class Meta:
		db_table = 'workout_plan'

class WorkoutComments(models.Model):
		user=models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
		workout=models.ForeignKey(WorkoutPlan,on_delete=models.CASCADE)
		is_liked=models.BooleanField(default=False)
		comment=models.CharField(max_length=200)
		created_at = models.DateTimeField(auto_now_add=True)
		updated_at = models.DateTimeField(auto_now=True)
		end_date =  models.DateTimeField(null=True)
		class Meta:
			db_table = 'workout_comments'


class WorkoutWeek(models.Model):
	plan = models.ForeignKey(WorkoutPlan, on_delete=models.CASCADE)
	week_number = models.PositiveIntegerField(default=1)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'workout_plan_week'

class WorkoutDay(models.Model):
	WEEKDAYS = [
		('Monday', 'Monday'),
		('Tuesday', 'Tuesday'),
		('Wednesday', 'Wednesday'),
		('Thursday', 'Thursday'),
		('Friday', 'Friday'),
		('Saturday', 'Saturday'),
		('Sunday', 'Sunday'),
	]
	week = models.ForeignKey(WorkoutWeek, on_delete=models.CASCADE)
	name = models.CharField(max_length=10, choices=WEEKDAYS)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'workout_plan_day'

class PlanExercise(models.Model):
	day = models.ForeignKey(WorkoutDay, on_delete=models.CASCADE)
	body_part = models.TextField(null=True)
	exercise_data = models.JSONField(null=True) 
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'workout_plan_exercise'



class StudentWorkOutPlan(models.Model):
	student = models.ForeignKey(Students,on_delete=models.CASCADE)
	workout = models.ForeignKey(WorkoutPlan,on_delete=models.CASCADE)
	workout_progress = models.CharField(max_length=200,null = True,default='pending')
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'student_workout_plan'

class Conversation(models.Model):
	student = models.ForeignKey(AppUser,on_delete=models.CASCADE)
	trainer = models.ForeignKey(Trainer,on_delete=models.CASCADE)
	conversation_room_name=models.CharField(max_length=200,null=True)
	conversation_room_id=models.CharField(max_length=244)
	student_twilio_id=models.CharField(max_length=244)
	trainer_twilio_id=models.CharField(max_length=244)
	is_read=models.BooleanField(default=False,null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
			db_table = 'conversations'


class CreateStudentFeedback(models.Model):
	student = models.ForeignKey(Students,on_delete=models.CASCADE)
	trainer = models.ForeignKey(Trainer,on_delete=models.CASCADE)
	workout= models.ForeignKey(WorkoutPlan,on_delete=models.CASCADE)
	feedback=models.CharField(max_length=100)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
			db_table = 'student feedback'

class TrainerBankDetails(models.Model):
	trainer = models.ForeignKey(Trainer,on_delete=models.CASCADE)
	account_number=models.CharField(max_length=100,null=True)
	routing_number=models.CharField(max_length=100,null=True)
	account_type=models.CharField(max_length=100,null=True)
	bank_name=models.CharField(max_length=100,null=True)
	holder_name=models.CharField(max_length=100,null=True)
	address=models.CharField(max_length=100,null=True)
	phone_number=models.CharField(max_length=100,null=True)
	created_at = models.DateTimeField(auto_now_add=True,null=True)
	updated_at = models.DateTimeField(auto_now=True,null=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
			db_table = 'trainer account details'

class TrainerWallet(models.Model):
	trainer = models.ForeignKey(Trainer,on_delete = models.CASCADE)
	amount = models.IntegerField(null=True)
	start_date = models.DateTimeField(auto_now_add=True)
	end_date =  models.DateTimeField(null=True)

	class Meta:
		db_table = 'trainer_wallet'

class Requestmoney(models.Model):
	trainer=models.ForeignKey(Trainer,on_delete = models.CASCADE)
	requested_money=models.CharField(max_length=200)
	created_at = models.DateTimeField(auto_now_add=True,null=True)
	end_date =  models.DateTimeField(null=True)
	status=models.CharField(max_length=50)

	class Meta:
		db_table = 'request_money'