from django.db import models
from django.contrib.auth.models import AbstractUser

class User_Profile(AbstractUser):
    username = models.CharField(max_length=100, unique=False, blank=True, null=True)
    email=models.EmailField(verbose_name='Email',max_length=255,unique=True)
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    organisation = models.CharField(max_length=200, blank=True, null=True)
    profile_pic = models.FileField(upload_to='profile_pics', blank=True, null=True)
    phone=models.CharField(max_length=10, null=True, blank=True)
    employee_id = models.CharField(max_length=50, null=True, blank=True)
    job_title = models.CharField(max_length=255, null=True, blank=True)
    date_of_birth = models.DateField(null=True, blank=True)
    address = models.CharField(max_length=500, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    # objects = EmployeeManager()

    USERNAME_FIELD='email'
    REQUIRED_FIELDS= ['first_name','username']

    def __str__(self):
        if self.first_name and self.last_name:
            return f"{self.first_name} {self.last_name}"
        else:
            return self.email
        
    @property
    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"
        
class Documents(models.Model):
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    name = models.CharField(max_length=200, blank=True, null=True)
    document = models.FileField(upload_to='documents',blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user}-{self.name}"

class Signature(models.Model):
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    initial = models.FileField(upload_to='initials',blank=True, null=True)
    signature = models.FileField(upload_to='signatures',blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

class Stamp(models.Model):
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    stamp = models.FileField(upload_to='stamps',blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

class sign_documents(models.Model):
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    main_document = models.ForeignKey(Documents, on_delete=models.CASCADE, blank=True, null=True)
    document = models.FileField(upload_to='sign documents',blank=True, null=True)
    name = models.CharField(max_length=200, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user}-{self.name}"

class prepare_documents(models.Model):
    main_document = models.ForeignKey(Documents, on_delete=models.CASCADE, blank=True, null=True)
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    document = models.FileField(upload_to='prepare documents',blank=True, null=True)
    name = models.CharField(max_length=200, blank=True, null=True)
    sign_positions = models.JSONField(blank=True,null=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user}-{self.name}"

class Recipients_sign_documents(models.Model):
    main_document = models.ForeignKey(prepare_documents, on_delete=models.CASCADE, blank=True, null=True)
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    document = models.FileField(upload_to='recipient sign documents',blank=True, null=True)
    name = models.CharField(max_length=200, blank=True, null=True)
    recipient = models.CharField(max_length=200, blank=True,null=True)
    link = models.URLField(max_length=500, blank=True, null=True)
    is_sign = models.BooleanField(default=False)
    sign_at = models.DateTimeField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.recipient}-{self.name}"

class Notification(models.Model):
    user = models.EmailField(max_length=255, blank=True, null=True)
    message = models.TextField(null=True, blank=True)
    link = models.URLField(max_length=500, blank=True, null=True)
    created = models.DateTimeField(auto_now=False, auto_now_add=True, null=True, blank=True)

    def __str__(self):
        return self.message

class mark_read_notifications(models.Model):
    notif = models.ForeignKey(Notification, on_delete=models.CASCADE, blank=True, null=True)
    user = models.ForeignKey(User_Profile, on_delete=models.CASCADE, blank=True, null=True)
    status = models.BooleanField(default=False)

    def __str__(self):
        return self.notif.message

