# authentication/models.py
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.db import models
from django.utils import timezone
from .managers import UserManager


class User(AbstractBaseUser, PermissionsMixin):
    """
    Modèle utilisateur personnalisé utilisant l'email comme identifiant.
    """

    email = models.EmailField(unique=True)
    username = models.CharField(max_length=150, unique=True)
    first_name = models.CharField(max_length=150, blank=True, verbose_name="Prénom")
    last_name = models.CharField(
        max_length=150, blank=True, verbose_name="Nom de famille"
    )

    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(default=timezone.now)

    # Le champ utilisé pour la connexion
    USERNAME_FIELD = "email"
    # Champs requis lors de la création d'un superutilisateur via la console
    REQUIRED_FIELDS = ["username"]

    # Indiquer à Django d'utiliser notre manager personnalisé
    objects = UserManager()

    def __str__(self):
        return self.email

    def get_full_name(self):
        """Retourne le nom complet de l'utilisateur."""
        if self.first_name and self.last_name:
            return f"{self.first_name} {self.last_name}".strip()
        elif self.first_name:
            return self.first_name
        elif self.last_name:
            return self.last_name
        else:
            return self.username or self.email

    def get_short_name(self):
        """Retourne le prénom ou le nom d'utilisateur."""
        return self.first_name or self.username or self.email

    class Meta:
        db_table = "auth_user"
        verbose_name = "Utilisateur"
        verbose_name_plural = "Utilisateurs"
