from django.db import models
from authentication.models import User
from django.utils import timezone

class BaseModel(models.Model):
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='%(class)s_created', null=True, blank=True)
    updated_by = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='%(class)s_updated', null=True, blank=True)
    deleted_by = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='%(class)s_deleted', null=True, blank=True)

    created_at = models.DateTimeField(auto_now_add=True,null=True)
    updated_at = models.DateTimeField(auto_now=True,null=True)
    deleted_at = models.DateTimeField(null=True, blank=True)

    class Meta:
        abstract = True

class UserInfo(BaseModel): 
    user = models.OneToOneField(User, on_delete=models.CASCADE,related_name='userinfo')
    first_name = models.CharField(max_length=255 )
    last_name = models.CharField(max_length=255 )
    is_active = models.BooleanField(default=True)
    country = models.CharField(max_length=255)
    state = models.CharField(max_length=255)
    city = models.CharField(max_length=255)
    street = models.CharField(max_length=255)
    post_code = models.CharField(max_length=11)
    email = models.EmailField(max_length=255)
    designation = models.CharField(max_length=21)
    phone1 = models.CharField(max_length=21)
    
    soft_deleted = models.BooleanField(default=False)
   
    def soft_delete(self):
        self.soft_deleted = True
        self.deleted_at = timezone.now()
        self.is_active = False
        self.save()
        
    def get_role_name(self):
        role_dict = dict(self.ROLE_CHOICES)
        return role_dict.get(self.role, 'Unknown')
        
    def get_status(self):
        return "Active" if self.is_active else "Inactive"
        
       
    def __str__(self):
       return str(self.user)
       
    @property   
    def get_name(self):
        return f"{self.first_name} {self.last_name}"   
       
    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"