from asyncio.constants import DEBUG_STACK_DEPTH
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 JobFunctions(models.Model):
    title = 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 = "job_function"


class JobLevel(models.Model):
    title = 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 = "job_level"

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)
    first_name              = models.CharField(max_length=255, null=False)
    last_name               = models.CharField(max_length=255, null=False)
    username                = models.CharField(max_length=255, null=False)
    avatar                  = models.CharField(max_length=255,null=True)
    status                  = models.SmallIntegerField(default=1, null=False)
    user_stripe_id          = models.CharField(max_length=100,null=True)
    job_level               = models.ForeignKey(JobLevel,on_delete = models.CASCADE,null=True)   
    job_function            = models.ForeignKey(JobFunctions,on_delete = models.CASCADE,null=True)   
    is_superuser            = models.BooleanField(default=False)
    is_user                 = models.BooleanField(default=False)
    device_token            = models.CharField(max_length=244,null=True)
    device_type             = models.CharField(max_length=244,null=True)
    fcm_token               = models.CharField(max_length=244,null=True)
    forgot_password_link    = models.CharField(max_length =255,null=True)
    social_token            = models.CharField(max_length=255,null=True)
    register_otp            = models.CharField(max_length=10,null=True)
    is_otp_verified         = models.BooleanField(default=False,null=True)
    otp_created_at          = models.DateTimeField(null=True)
    has_subscription        = models.BooleanField(default=False)
    investment_research_count = models.IntegerField(default=0,null=True)
    address                 = models.CharField(max_length =255,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 ServiceFeedback(models.Model):
    first_name = models.CharField(max_length=100,null=True)
    last_name = models.CharField(max_length=100,null=True)
    quality = models.CharField(max_length=100,null=True)
    comment  =  models.TextField(null=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)


    class Meta:
        db_table = "service_feedback"




class SubscriptionPlans(models.Model):
    subscription_name = models.CharField(max_length=100,null=True)
    subscription_description = models.TextField(null=True)
    duration = models.CharField(max_length=30,null=True)
    price =  models.FloatField(null=True)
    unlock_real  = models.CharField(max_length=100,default=False)
    investment_tool = models.CharField(max_length=100,default=False)
    status = models.BooleanField(default=True)
    start_date = models.DateTimeField(auto_now_add=True)
    end_date = models.DateTimeField(null=True)

    class Meta:
        db_table = "subscription_plans"



class BlogsCategory(models.Model):
    name =  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 = "blogs_category"



class Blogs(models.Model):
    blog_image = models.CharField(max_length=244,null=True)
    category = models.ForeignKey(BlogsCategory,on_delete = models.CASCADE,null=True)   
    user = models.ForeignKey(User, on_delete=models.CASCADE,null=True) 
    title =  models.TextField(max_length=244,null=True)
    content =  models.TextField(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 = "blogs"



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

    class Meta:
        db_table = "investment_edu_category"



class InvestmentEducationSubCategory(models.Model):
    category = models.ForeignKey(InvestmentEducationCategory,on_delete = models.CASCADE,null=True) 
    name =  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 = "investment_edu_subcategory"



class InvestmentEducationContent(models.Model):
    sub_category = models.ForeignKey(InvestmentEducationSubCategory,on_delete = models.CASCADE,null=True) 
    title =  models.CharField(max_length=244,null=True)
    content =  models.TextField(null=True)
    video = 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 = "investment_edu_content"


class QuizModel(models.Model):
    question = models.TextField(null = True)
    op1 = models.CharField(max_length=200,null=True)
    op2 = models.CharField(max_length=200,null=True)
    op3 = models.CharField(max_length=200,null=True)
    op4 = models.CharField(max_length=200,null=True)
    ans = models.CharField(max_length=200,null=True)
    
    class Meta:
        db_table = "quiz_model"




class InvestmentResearch(models.Model):
    research_image = models.CharField(max_length=244,null=True)
    video = models.CharField(max_length=244,null=True)
    title =  models.TextField(max_length=244,null=True)
    content =  models.TextField(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 = "investment_research"