from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
# from admin_panel.models import Roles
# 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)
    isd_code                = models.CharField(max_length=20,null=True)
    phone_number            = models.CharField(max_length=255, null=False)
    full_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_buyer                = models.BooleanField(default=False)
    is_seller               = models.BooleanField(default=False)
    otp_generated           = models.CharField(max_length=10, null=False)
    otp_created_at          = models.DateTimeField(null=True)
    is_otp_verified         = models.BooleanField(default=False)
    is_profile_completed    = models.BooleanField(default=False)
    forgot_password_otp     = models.CharField(max_length =255,null=True)
    forgot_password_link    = models.CharField(max_length =255,null=True)
    token                   = models.CharField(max_length=255,null=True)
    device_type             = models.CharField(max_length=250,null=True)
    device_token            = models.CharField(max_length=250,null=True)
    notification_enabled    = models.BooleanField(default=True)
    role                    = models.IntegerField(null=True)
    role_name               = 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 Buyer(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    customer_id = models.CharField(max_length=100,null=True)
    stripe_customer_id  = models.CharField(max_length=100,null=True)
    first_name = models.CharField(max_length=100,null=True)
    last_name = models.CharField(max_length=100,null=True)
    wallet_amount = models.IntegerField(default=0,null=True)
    dob = models.CharField(max_length=100,null=True)


    class Meta:
        db_table = 'buyer'


class Addresses(models.Model):
    address_label   = models.CharField(max_length=255,null=True)
    name            = models.CharField(max_length=255,null=True)
    address_line    = models.TextField(null=True)
    country         = models.CharField(max_length=100,null=True)
    state           = models.CharField(max_length=100,null=True)
    city            = models.CharField(max_length=100,null=True)
    latitude        = models.TextField(null=True)
    longitude       = models.TextField(null=True)
    pin_code        = models.CharField(max_length=10,null=True)
    isd_code        = models.CharField(max_length=10,null=True)
    phone_number    = models.CharField(max_length=20,null=True)
    user            = models.ForeignKey(User,on_delete=models.CASCADE)
    is_default      = models.BooleanField(default=False,null=True)
    start_date      = models.DateTimeField(auto_now_add=True)
    end_date        = models.DateTimeField(null=True)

    class Meta:
        db_table = 'addresses'


