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
# from trainer.models import *
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)
	country_code = models.CharField(max_length=100,null=True)
	phone_number = models.CharField(max_length=100,null=True)
	city = models.CharField(max_length=100,null=True)
	country = 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)
	fcm_token = models.CharField(max_length=250,null=True)
	country_name_code = models.CharField(max_length=250,null=True)
	dob = models.CharField(max_length=250,null=True)
	address = 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=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)
	user_stripe_id = models.CharField(max_length=100,null=True)
	document_status = models.CharField(max_length=100,null=True)
	role=models.CharField(max_length=100,null=True)
	is_account_deleted = models.BooleanField(default=False)
	bank_account_name = models.CharField(max_length=150, null=True)
	bank_account_number = models.CharField(max_length=50, null=True)
	bank_name = models.CharField(max_length=150, null=True)
	bank_ifsc_code = models.CharField(max_length=50, null=True)
	bank_swift_code = models.CharField(max_length=50, null=True)
	is_verified = models.BooleanField(default=False)
	wallet_money=models.IntegerField(null=True,default=0)
	total_earning=models.IntegerField(null=True,default=0)
	total_withdrawl=models.IntegerField(null=True,default=0)
	status =  models.BooleanField(default=True,null=True)
	average_rating= models.CharField(max_length=50,default=0)
	is_route_percentage= models.IntegerField(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'

class UserDocument(models.Model):
	user = models.ForeignKey(AppUser, on_delete=models.CASCADE)
	rejection_reason = models.TextField(null=True, blank=True)

	document = models.FileField(upload_to='user_documents/')
	uploaded_at = models.DateTimeField(auto_now_add=True)
	class Meta:
		db_table = 'user_document'

# Create your models here.
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)
	card_type = models.CharField(max_length=200,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 AddTravel(models.Model):
	user=models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
	name = models.CharField(max_length=100, null=True, blank=True)
	country_code = models.CharField(max_length=100, null=True, blank=True)
	country_name_code = models.CharField(max_length=100, null=True, blank=True)
	phone_number = models.CharField(max_length=20, null=True, blank=True)
	travelling_from = models.CharField(max_length=100, null=True, blank=True)
	travelling_to = models.CharField(max_length=100, null=True, blank=True)
	travel_status = models.CharField(max_length=100, null=True, blank=True)
	image_url=models.CharField(max_length=100000, null=True, blank=True)
	departure_date = models.DateField(null=True, blank=True)
	departure_time = models.DateTimeField(null=True, blank=True)
	total_capacity=models.CharField(max_length=50,null=True)
	arrival_date = models.DateField(null=True, blank=True)
	arrival_time = models.DateTimeField(null=True, blank=True)
	city = models.CharField(max_length=100,null=True)
	country = models.CharField(max_length=100,null=True)
	sender_country = models.CharField(max_length=100,null=True)
	sender_city = models.CharField(max_length=100,null=True)
	latitude = models.CharField(max_length=100,null=True)
	longitude = models.CharField(max_length=100,null=True)
	payment =  models.IntegerField(null=True)
	transport_mode = models.CharField(max_length=100, null=True, blank=True)
	is_money_credited = models.BooleanField(default=False)
	price_per_kg = models.DecimalField(max_digits=12, decimal_places=2, default=0.0, null=True, blank=True)
	money_left = models.IntegerField(null=True)
	editable = models.BooleanField(default=True)

	description = models.TextField(null=True, blank=True)
	end_date = models.DateTimeField(null=True)

	
	class Meta:
		db_table = 'add_travel'



class TravellerRequests(models.Model):
	sender=models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True,related_name='sent_requests')
	traveller=models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True,related_name='received_requests')
	route=models.ForeignKey(AddTravel,on_delete=models.CASCADE,null=True)
	req_status=models.CharField(max_length=50,null=True)
	payment_status=models.CharField(max_length=50,null=True)
	name=models.CharField(max_length=50,null=True)
	phone_number=models.CharField(max_length=50,null=True)
	parcel_drop_off_address=models.CharField(max_length=15000,null=True)
	recepient_email=models.CharField(max_length=50,null=True)
	recepient_phone_number=models.CharField(max_length=50,null=True)
	recepient_name=models.CharField(max_length=50,null=True)
	recepient_country_code=models.CharField(max_length=50,null=True)
	pickup_image = models.CharField(max_length=244,null=True)
	dropoff_image = models.CharField(max_length=244,null=True)
	country=models.CharField(max_length=50,null=True)
	city=models.CharField(max_length=50,null=True)
	sender_country=models.CharField(max_length=50,null=True)
	sender_city=models.CharField(max_length=50,null=True)
	order_status=models.CharField(max_length=10000,null=True)
	weight_parcel=models.CharField(max_length=50,null=True)
	parcel_description=models.CharField(max_length=5000,null=True)
	created_at = models.DateTimeField(auto_now_add=True)  
	updated_at = models.DateTimeField(auto_now=True)      
	end_date=models.DateTimeField(null=True)
	otp = models.IntegerField(null=True)
	rating=models.CharField(max_length=10000,null=True)
	review=models.TextField(null=True)


	class Meta:
		db_table = 'traveller_requests'
		




class MyRoute(models.Model):
	requests=models.ForeignKey(TravellerRequests,on_delete=models.CASCADE,null=True)
	payment=models.CharField(max_length=10000,null=True)
	payment_status=models.CharField(max_length=10000,null=True)
	order_status=models.CharField(max_length=10000,null=True)
	pickup_image = models.CharField(max_length=244,null=True)
	dropoff_image = models.CharField(max_length=244,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 = 'my_route'

class ConversationUsers(models.Model):
	user_one = models.ForeignKey(AppUser, on_delete=models.CASCADE,related_name='user_one')
	user_two = models.ForeignKey(AppUser, on_delete=models.CASCADE,related_name='user_two')
	twilio_channel_sid = models.CharField(max_length=255, blank=True, null=True)
	user_deleted = models.ManyToManyField(AppUser, related_name='all_deleted_users', blank=True)
	last_message = models.DateTimeField(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 = 'conversation_users'

class RatingReview(models.Model):
	requests=models.ForeignKey(TravellerRequests,on_delete=models.CASCADE,null=True)
	user=models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
	rating=models.CharField(max_length=10000,null=True)
	review=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 = 'rating_review'


class RequestedMoney(models.Model):
	user=models.ForeignKey(AppUser,on_delete=models.CASCADE,null=True)
	requested_money = models.IntegerField(null=True)
	available_balance=models.IntegerField(null=True)
	total_balance=models.IntegerField(null=True)
	rejection_reason = models.TextField(null=True, blank=True)
	created_at = models.DateTimeField(auto_now_add=True)  
	updated_at = models.DateTimeField(auto_now=True)      
	end_date=models.DateTimeField(null=True)
	transaction_status= models.CharField(null=True)


	class Meta:
		db_table = 'request_money'


class UserNotifications(models.Model):
	user = models.ForeignKey(AppUser, 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 = "enduser_notifications"



class HelpSupportUser(models.Model):
	user = models.ForeignKey(AppUser,on_delete = models.CASCADE)   
	title =  models.CharField(max_length = 200, null= True) 
	description = models.TextField()
	reply = models.TextField()
	reply_date = models.DateTimeField(null=True)
	ticket_id = models.CharField(max_length=200,null = True)
	rejection_reason = models.TextField(null=True, blank=True)
	status = models.CharField(default='Pending',max_length = 200)
	start_date = models.DateTimeField(auto_now_add=True)
	end_date = models.DateTimeField(null=True)

	class Meta:
		db_table = "help_support_user"

