from django.db import models

from django.contrib.auth.models import AbstractUser
# from django.utils.translation import ugettext_lazy as _
from .managers import *
from django.utils import timezone

# Create your models here.

class SoftDeleteManager(models.Manager):
    """Manager to exclude soft deleted records by default."""
    def get_queryset(self):
        return super().get_queryset().filter(deleted_at__isnull=True)

class User(AbstractUser):
    username = None
    email = models.EmailField(unique=True) 
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    objects = CustomUserManager()
    STATUS_CHOICES = [
        ('registered','Registered'),
        ('otp verified','Otp Verified'),
        ('document uploaded','Document Uploaded'),
        ('rejected','Rejected'),
        ('inactive','Inactive'),
        ('approved','Approved'),
        ('reuploaded document','Reuploaded document')
    ]

    is_vendor = models.BooleanField(default=False) 
    main_category = models.ForeignKey("product.MainCategory",on_delete=models.DO_NOTHING,related_name='vendor_main_category', blank=True, null=True)
    is_buyer = models.BooleanField(default=False)
    full_name = models.CharField(max_length=100, null = True, blank = True)
    phone = models.CharField(max_length=20, null = True, blank = True)
    address = models.CharField(max_length=200, null = True, blank = True)
    apartment_number = models.CharField(max_length=50, null = True, blank = True)
    street_name = models.CharField(max_length=100, null = True, blank = True)
    city = models.CharField(max_length=100, null = True, blank = True)
    state = models.CharField(max_length=100, null = True, blank = True)
    zip_code = models.CharField(max_length=10, null=True, blank = True)
    t_and_c = models.BooleanField(default=False)
    location = models.TextField(null=True, blank=True)
    lat = models.FloatField(default=0.00)
    long = models.FloatField(default=0.00)
    otp = models.IntegerField(null = True, blank = True)
    otp_verified = models.BooleanField(default = False, null = True)
    withdraw_otp = models.IntegerField(null = True, blank = True)
    withdraw_otp_at = models.DateTimeField(auto_now=False, auto_now_add=False, blank=True, null=True)
    # withdraw_otp_verified = models.BooleanField(default = False, blank=True, null=True)
    shop_name = models.CharField(max_length=255,default='')
    doc1 = models.FileField(upload_to='e360/docs/', null=True, blank=True,default='')
    doc2 = models.FileField(upload_to='e360/docs/', null=True, blank=True,default='')
    doc3 = models.FileField(upload_to='e360/docs/', null=True, blank=True,default='')
    doc4 = models.FileField(upload_to='e360/docs/', null=True, blank=True,default='')
    image = models.ImageField(upload_to='e360/images/',default='',null=True,blank=True)
    is_document = models.BooleanField(default=False) 
    reason=models.TextField(default='',blank=True,null=True)  
    design=models.JSONField(default=dict,blank=True,null=True)
    count=models.IntegerField(default=0)
    status = models.CharField(
        max_length=50,
        choices=STATUS_CHOICES,
        default='registered',blank=True,null=True)
    created_at = models.DateTimeField(default=timezone.now)
    sso_id=models.CharField(max_length=255, null=True, blank=True, default='')
    referral_code = models.CharField(max_length=10, unique=True, blank=True, null=True)
    referred_by = models.ForeignKey('self', null=True, blank=True, on_delete=models.DO_NOTHING)
    total_points = models.IntegerField(default=0)
    device = models.ForeignKey("notification.Device", on_delete=models.SET_NULL, related_name='buyer_device', blank=True, null=True)

    # remember_me = models.BooleanField(default=False)
    # device_ip=models.TextField(default='',blank=True,null=True)

    class Meta:
        ordering = ['-created_at']
    




    




