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


class User(AbstractUser):
    pass


class UniquelyNamedModelManager(models.Manager):
    def get_by_natural_key(self, name: str):
        return self.get(name=name)


class UniquelyNamedModel(models.Model):
    name = models.CharField(
        max_length=100,
        blank=False,
        null=False,
        unique=True,
        verbose_name="nom",
    )
    objects = UniquelyNamedModelManager()

    class Meta:
        abstract = True
        ordering = ["name"]

    def __str__(self):
        return self.name

    def natural_key(self):
        return (self.name,)


class DocumentedModel(models.Model):
    url = models.URLField(blank=True, null=False, verbose_name="url")

    class Meta:
        abstract = True
