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


class CustomUserManager(UserManager):
    def create_superuser(self, **kwargs):
        return super().create_superuser("foo", **kwargs)


class User(AbstractUser):
    username = None
    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    class Meta:
        constraints = [
            models.UniqueConstraint(name="unique_user_email", fields=["email"]),
        ]

    def __init__(self, *args, username=None, **kwargs):
        super().__init__(*args, **kwargs)


class Membre(models.Model):
    nom = models.CharField("Nom", max_length=40)
    prenom = models.CharField("Prénom", max_length=40)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    avatar = models.ImageField("Avatar", upload_to="avatars", blank=True)
    rue = models.CharField("Rue", max_length=80, blank=True)
    npa = models.CharField("NPA", max_length=5, blank=True)
    localite = models.CharField("Localité", max_length=40, blank=True)
    tel1 = models.CharField("Tél. 1", max_length=20, blank=True)
    tel2 =models.CharField("Tél. 2", max_length=20, blank=True)

    def __str__(self):
        return f"{self.nom} {self.prenom}"


class Agenda(models.Model):
    titre = models.CharField("Titre", max_length=150)
    lieu = models.CharField("Lieu", max_length=80, blank=True)
    date_heure = models.DateTimeField("Date/heure")
    infos = models.TextField("Informations")
    prive = models.BooleanField(
        "Privé", default=False, help_text=(
            "Un évènement privé ne peut être consulté que par les membres de "
            "l'association, tandis qu'un évènement public est visible de tous."
        )
    )

    def __str__(self):
        return f"{self.titre} {self.date_heure}"


class Document(models.Model):
    fichier = models.FileField("Fichier", upload_to="documents", blank=True)
    url = models.URLField("URL", blank=True)
    quand = models.DateField("Date")
    titre = models.CharField("Titre", max_length=150)
    infos = models.TextField("Infos", blank=True)
    prive = models.BooleanField(
        "Privé", default=False, help_text=(
            "Un document privé ne peut être consulté que par les membres de "
            "l'association, tandis qu'un document public est visible de tous."
        )
    )

    def __str__(self):
        return f"{self.titre} {self.date}"
