from shutil import make_archive
from django.db import models
from django.contrib.auth.models import User
from django.db.models.deletion import CASCADE, SET_NULL, DO_NOTHING
from admin_panel.models import DiscoverSubCategory

# Create your models here.

class AppUser(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)
	phone_number = models.CharField(max_length=100,null=True)
	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)
	current_weight = models.DecimalField(max_digits=10, decimal_places=2,null=True)
	target_weight = models.DecimalField(max_digits=10, decimal_places=2,null=True)
	weight_unit = models.CharField(max_length=5, choices=[("kg", "Kilograms"), ("lbs", "Pounds")], default="kg")
	current_height = models.IntegerField(null=True,)
	height_unit = models.CharField(max_length=2, choices=[("cm", "Centimeters"), ("ft", "Feet")], default="cm")
	focus_area = models.TextField(null=True)
	main_goal = models.TextField(null=True)
	current_body_shape = models.CharField(max_length=100,null=True)
	fitness_level = models.CharField(max_length=100,null=True)
	medical_condition = models.TextField(null=True)
	allergies_exclusions = models.TextField(null=True)
	fcm_token = models.CharField(max_length=250,null=True)
	device_type = models.CharField(max_length=50,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)
	provider_id = models.CharField(max_length=250,null=True)
	social_id = models.CharField(max_length=250,null=True)
	image = models.CharField(max_length=244,null=True)
	stripe_id=models.CharField(max_length=500,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)

	class Meta:
		db_table = 'app_user'



class AppUserNotification(models.Model):
	user = models.ForeignKey(AppUser,on_delete = models.CASCADE) 
	message = models.TextField(null=True)
	is_read = models.BooleanField(default=False,null=True)
	notification_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 = "user_notifications"



class Friends(models.Model):
	from_user = models.ForeignKey(AppUser, on_delete=models.CASCADE, related_name='from_user')
	to_user = models.ForeignKey(AppUser, on_delete=models.CASCADE, related_name='to_user')
	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 = 'friends'


	
class AssessmentAttempt(models.Model):
	user = models.ForeignKey(AppUser,on_delete = models.CASCADE) 
	assessment = models.ForeignKey("trainer.StudentAssessment", on_delete=models.CASCADE)
	attempt_number = models.PositiveIntegerField(default=0)
	completion_time = models.DurationField(null=True)
	repetitions = models.IntegerField(null=True)
	sets = models.IntegerField(null=True)
	weight = models.FloatField(null=True)
	completed_date = models.DateField(null=True)
	complete_percent =  models.FloatField(default=0,null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)

	class Meta:
		db_table = 'assessment_attempt'


class WorkoutAttempt(models.Model):
	user = models.ForeignKey(AppUser,on_delete = models.CASCADE) 
	workout = models.ForeignKey("trainer.StudentWorkOutPlan", on_delete=models.CASCADE)
	exercise_data=models.CharField(max_length=50000,null=True)
	workout_week=models.CharField(max_length=50,null=True)
	workout_day=models.CharField(max_length=50,null=True)
	attempt_number = models.PositiveIntegerField(default=0)
	completion_time = models.DurationField(null=True)
	repetitions = models.IntegerField(null=True)
	sets = models.IntegerField(null=True)
	weight = models.FloatField(null=True)
	completed_date = models.DateField(null=True)
	complete_percent =  models.FloatField(default=0,null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)

	class Meta:
		db_table = 'workout_attempt'


class PublicWorkoutAttempt(models.Model):
	user = models.ForeignKey(AppUser,on_delete = models.CASCADE) 
	workout = models.ForeignKey("trainer.WorkOutPlan", on_delete=models.CASCADE)
	exercise_data=models.CharField(max_length=50000,null=True)
	workout_week=models.CharField(max_length=50,null=True)
	workout_day=models.CharField(max_length=50,null=True)
	attempt_number = models.PositiveIntegerField(default=0)
	completion_time = models.DurationField(null=True)
	repetitions = models.IntegerField(null=True)
	sets = models.IntegerField(null=True)
	weight = models.FloatField(null=True)
	completed_date = models.DateField(null=True)
	complete_percent =  models.FloatField(default=0,null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)

	class Meta:
		db_table = 'public_workout_attempt'

class FavouriteDiscoverSubCategory(models.Model):
		user=models.ForeignKey(AppUser,on_delete=models.CASCADE)
		discover_sub_category=models.ForeignKey(DiscoverSubCategory,on_delete=models.CASCADE)
		is_deleted=models.BooleanField(default=False)
		created_at = models.DateTimeField(auto_now_add=True)
		updated_at = models.DateTimeField(auto_now=True)
	
		class Meta:
			db_table = 'favourite_sub_category'
   

class WeightReport(models.Model):
	user=models.ForeignKey(AppUser,on_delete=models.CASCADE)
	weight = models.FloatField(max_length=200,null = True)
	date = models.DateField(null=True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)

	class Meta:
		db_table = 'weight_report'  
  
class BmiReport(models.Model):
	user=models.ForeignKey(AppUser,on_delete=models.CASCADE)
	weight = models.FloatField(max_length=200,null = True)
	height = models.FloatField(max_length=200,null = True)
	bmi =  models.CharField(max_length=200,null = True)
	bmi_value =  models.CharField(max_length=200,null = True)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)

	class Meta:
		db_table = 'bmi_report'  


class CaloriesData(models.Model):
	user=models.ForeignKey(AppUser,on_delete=models.CASCADE)
	total_calories=models.CharField(max_length=1000)
	created_at = models.DateTimeField(auto_now_add=True)
	updated_at = models.DateTimeField(auto_now=True)

	class Meta:
		db_table = 'calories_data'

class UserCards(models.Model):
	user = models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
	card_id = models.CharField(max_length=100,null=True)
	exp_month = models.CharField(max_length=100,null=True)
	exp_year = models.CharField(max_length=100,null=True)
	the_user_stripe = models.CharField(max_length=100,null=True)
	last_digits = models.CharField(max_length=100,null=True)
	is_default = 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 = 'user_cards'


class UserTranscations(models.Model):
	trainer = models.ForeignKey('trainer.Trainer',on_delete=models.CASCADE,null=True)
	transcation_id = models.CharField(max_length=100,default='',null=True)
	user = models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
	amount =  models.DecimalField(max_digits=10, decimal_places=2, default=0)
	txn_id = models.CharField(max_length=250,default='',null=True)
	recipet_url = models.CharField(max_length=250,default='',null=True) #got
	payment_mode = models.CharField(max_length=100,default='',null=True)#got
	transcation_type = models.CharField(max_length=100,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 = 'user_transcation'

class UserIsExerciseWorkout(models.Model):
	user = models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
	exercise = models.ForeignKey('trainer.PlanExercise',on_delete=models.CASCADE,null=True)
	sub_exercise = models.ForeignKey('trainer.SubExercise',on_delete=models.CASCADE,null=True)
	workout = models.ForeignKey('trainer.WorkoutPlan',on_delete=models.CASCADE,null=True)
	is_completed=models.BooleanField(default=False)
	workout_week=models.CharField(max_length=50,null=True)
	workout_day=models.CharField(max_length=50,null=True)
	workout_type=models.CharField(max_length=50,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 = 'completed_exercise_status'
