from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.


class User(AbstractUser):
    """
    Custom user model for the company website.
    """

    email = models.EmailField(
        unique=True
    )

    profile_image = models.ImageField(
        upload_to="users/profiles/",
        blank=True,
        null=True
    )

    bio = models.TextField(
        blank=True
    )

    is_author = models.BooleanField(
        default=False
    )

    created_at = models.DateTimeField(
        auto_now_add=True
    )

    updated_at = models.DateTimeField(
        auto_now=True
    )

    
    class Meta:
        db_table = 'users'  # Clean table name
        verbose_name = 'User'
        verbose_name_plural = 'Users'
        indexes = [
            models.Index(fields=['username']),
            models.Index(fields=['email']),
        ]
    
    def __str__(self):
        return self.get_full_name() or self.username
    
    @property
    def display_name(self):
        """Return full name or username"""
        return self.get_full_name() or self.username
    
    @property
    def author_bio(self):
        """Return bio or default text"""
        return self.bio or f"Writing about rendering technology at {self.display_name}"
    
    
    def save(self, *args, **kwargs):
        self.full_clean()  # Run validation
        super().save(*args, **kwargs)