from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.utils.html import strip_tags
# Create your models here.


class UserManager(BaseUserManager):

    def _create_user(self, email, password):
        email = self.normalize_email(email)
        user = self.model(email=email)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, email, password):
        return self._create_user(email, password)


# Company profile Model
class User(AbstractBaseUser, PermissionsMixin):
    email                   = models.CharField(max_length=254, unique=True,null=True)
    phone_number            = models.CharField(max_length=255, null=False)
    otp                     = models.IntegerField(null=True)
    is_otp_verified         = models.BooleanField(default=False)
    first_name              = models.CharField(max_length=255, null=False)
    last_name               = models.CharField(max_length=255, null=False)
    avatar                  = models.CharField(max_length=255,null=True)
    status                  = models.SmallIntegerField(default=1, null=False)
    is_superuser            = models.BooleanField(default=False)
    is_user                 = models.BooleanField(default=False)
    is_worker               = models.BooleanField(default=False)
    is_worker_approved      = models.IntegerField(default=0)
    device_token            = models.CharField(max_length=244,null=True)
    forgot_password_link    = models.CharField(max_length =244,null=True)
    social_token            = models.CharField(max_length=244,null=True)
    email_verify_link       = models.CharField(max_length=244,null=True)
    is_email_verified       = models.BooleanField(default=False,null=True)
    is_profile_completed    = models.BooleanField(default=False,null=True)
    user_stripe_id          = models.CharField(max_length=100,null=True)
    bank_details_filled     = models.BooleanField(default=False,null=True) 
    address                 = models.CharField(max_length =244,null=True)
    notification_enable     = models.BooleanField(default=True,null=True)
    ratings                 = models.FloatField(default=0,null=True)
    latitude                = models.CharField(max_length=244,null=True)
    longitude               = models.CharField(max_length=244,null=True)
    experience              = models.CharField(max_length =244,null=True)
    gender                  = models.CharField(max_length=244,null=True)
    dob                     = models.CharField(max_length=244,null=True)
    is_active               = models.BooleanField(default=True)
    start_date              = models.DateTimeField(auto_now_add=True)
    end_date                = models.DateTimeField(null=True)

    class Meta:
        db_table = "user"

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []
    objects = UserManager()




class ContentPages(models.Model):
    page_type = models.CharField(max_length = 100, null = True)
    title =  models.CharField(max_length = 244, null= True)
    content  = models.TextField()
    status = models.BooleanField(default=True,null=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)


    class Meta:
        db_table = "content_pages"


class Faq(models.Model):
    title = models.CharField(max_length = 200,null=True)
    content =  models.TextField()
    status = models.BooleanField(default=True)
    start_date = models.DateTimeField(auto_now_add=True,null=False)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "faq"



class AdminNotifications(models.Model):
    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 = "admin_notifications"


class HelpSupport(models.Model):
    user = models.ForeignKey(User,on_delete = models.CASCADE)   
    title =  models.CharField(max_length = 200, null= True) 
    description = models.TextField()
    reply = models.TextField()
    reply_date = models.DateTimeField(null=True)
    status = models.BooleanField(default=False,null=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "help_support"




class Category(models.Model):
    name =  models.CharField(max_length = 244,null=True)
    image =  models.CharField(max_length = 244,null=True)
    status =  models.BooleanField(default=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "category"

class SubCategory(models.Model):
    category =models.ForeignKey(Category,on_delete = models.CASCADE)   
    name =  models.CharField(max_length = 244,null=True)
    image =  models.CharField(max_length = 244,null=True)
    status =  models.BooleanField(default=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "sub_category"



class FetaureService(models.Model):
    sub_category = models.ForeignKey(Category,on_delete = models.CASCADE)
    status =  models.BooleanField(default=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "feature_service"



class AdminRefundRequest(models.Model):
    booking = models.ForeignKey('user_panel.UserBookings', on_delete=models.CASCADE)
    refund_amount = models.IntegerField(max_length=100,null=True)
    cancellation_charges = models.CharField(max_length=100, null=True)
    status = models.CharField(max_length=100, default='Pending')
    date_processed = 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 = 'admin_refund_request'



class BannerManagement(models.Model):
    banner_title = models.CharField(max_length=244,null=True)
    image = models.CharField(max_length=244,null=True)
    status =  models.BooleanField(default=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = 'banner_management'


class OtherSettings(models.Model):
    platform_fee = models.IntegerField(default=0,null = True)
    admin_commission =  models.IntegerField(default=0,null = True)

    class Meta:
        db_table = 'other_settings'