from django.db import models
from django.db.models.functions import UUID4


class School(models.Model):
    name = models.CharField(max_length=100)


class Parent(models.Model):
    name = models.CharField(max_length=100)


class Child(models.Model):
    mother = models.ForeignKey(Parent, models.CASCADE, related_name="mothers_children")
    father = models.ForeignKey(Parent, models.CASCADE, related_name="fathers_children")
    school = models.ForeignKey(School, models.CASCADE)
    name = models.CharField(max_length=100)

    class Meta:
        constraints = [
            models.UniqueConstraint("mother", "father", name="unique_parents"),
        ]


class ParentUUIDPk(models.Model):
    uuid = models.UUIDField(primary_key=True, db_default=UUID4(), editable=False)

    class Meta:
        required_db_features = {
            "supports_uuid4_function_in_default",
            "supports_expression_defaults",
        }


class ChildUUIDPk(models.Model):
    parent = models.ForeignKey(ParentUUIDPk, models.CASCADE)
    name = models.CharField(max_length=100)

    class Meta:
        required_db_features = {
            "supports_uuid4_function_in_default",
            "supports_expression_defaults",
        }


class Poet(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Poem(models.Model):
    poet = models.ForeignKey(Poet, models.CASCADE)
    name = models.CharField(max_length=100)

    class Meta:
        unique_together = ("poet", "name")

    def __str__(self):
        return self.name
