from django.db import models


class EsExamRequirementUnavailability(models.Model):
    exam_requirement = models.ForeignKey("api.EsExamRequirement", on_delete=models.CASCADE)
    time_slot = models.BigIntegerField(db_comment="Time slot in 30-minute units")
    created_by = models.BigIntegerField(null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_by = models.BigIntegerField(null=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = "es_exam_requirement_unavailability"
        constraints = [
            models.UniqueConstraint(
                fields=["exam_requirement", "time_slot"],
                name="unique_exam_requirement_timestamp",
            )
        ]

    @staticmethod
    def bulk_insert(exam_requirement_id, insert_list: list[int], user_id=None):
        existing = set(
            EsExamRequirementUnavailability.objects.filter(exam_requirement_id=exam_requirement_id)
            .values_list("time_slot", flat=True)
        )

        new_list = [val for val in insert_list if val not in existing]

        objs = [
            EsExamRequirementUnavailability(
                exam_requirement_id=exam_requirement_id,
                time_slot=item,
                created_by=user_id,
                updated_by=user_id,
            )
            for item in new_list
        ]
        return EsExamRequirementUnavailability.objects.bulk_create(objs)

    def __str__(self):
        return f"{self.exam_requirement_id}-{self.time_slot}"