from django.db import models


class EsSessionInvigilator(models.Model):
    session = models.ForeignKey("api.EsSession", on_delete=models.CASCADE, null=True)
    invigilator = models.ForeignKey("api.EsInvigilator", on_delete=models.CASCADE, null=True)
    is_floating = models.SmallIntegerField(default=0)
    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_session_invigilator"
        constraints = [
            models.UniqueConstraint(fields=["session", "invigilator"], name="unique_session_invigilator")
        ]

    @staticmethod
    def bulk_insert(session_id, insert_list: list[int], user_id=None, is_floating=0):
        existing = set(
            EsSessionInvigilator.objects.filter(session_id=session_id)
            .values_list("invigilator_id", flat=True)
        )

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

        objs = [
            EsSessionInvigilator(
                session_id=session_id,
                invigilator_id=item,
                is_floating=is_floating,
                created_by=user_id,
                updated_by=user_id,
            )
            for item in new_list
        ]
        return EsSessionInvigilator.objects.bulk_create(objs)

    def __str__(self):
        return f"{self.session_id}-{self.invigilator_id}"