# all relation table if need customize, will put in this file
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models

from backend import settings

class EsInvigilatorSettingRole(models.Model):
    id = models.BigAutoField(primary_key=True)
    setting = models.ForeignKey("api.EsInvigilatorSetting", on_delete=models.CASCADE)
    role = models.ForeignKey("api.EsInvigilatorRole", on_delete=models.CASCADE)

    class Meta:
        db_table = "es_invigilator_setting_role"
        constraints = [
            models.UniqueConstraint(fields=["setting", "role"], name="unique_invigilator_setting_role")
        ]


class EsInvigilatorInvigilatorRole(models.Model):
    id = models.BigAutoField(primary_key=True)
    invigilator = models.ForeignKey("api.EsInvigilator",on_delete=models.CASCADE)
    role = models.ForeignKey("api.EsInvigilatorRole", on_delete=models.CASCADE)

    class Meta:
        db_table = "es_invigilator_invigilator_role"
        constraints = [
            models.UniqueConstraint(fields=["invigilator", "role"], name="unique_invigilator_role")
        ]


class EsInvigilatorSuitability(models.Model):
    invigilator = models.ForeignKey("api.EsInvigilator", on_delete=models.CASCADE)
    suitability = models.ForeignKey("api.EsSuitability", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "es_invigilator_suitability"
        unique_together = ("invigilator", "suitability")


class EsLocationSuitability(models.Model):
    location = models.ForeignKey("api.EsLocation", on_delete=models.CASCADE)
    suitability = models.ForeignKey("api.EsSuitability", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "es_location_suitability"
        unique_together = ("location", "suitability")


class EsExamRequirementInvigilatorSuitability(models.Model):
    exam_requirement = models.ForeignKey("api.EsExamRequirement", on_delete=models.CASCADE)
    suitability = models.ForeignKey("api.EsSuitability", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "es_exam_requirement_invigilator_suitability"
        unique_together = ("exam_requirement", "suitability")


class EsExamRequirementLocationSuitability(models.Model):
    exam_requirement = models.ForeignKey("api.EsExamRequirement", on_delete=models.CASCADE)
    suitability = models.ForeignKey("api.EsSuitability", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "es_exam_requirement_location_suitability"
        unique_together = ("exam_requirement", "suitability")


class EsExamActivityInvigilatorSuitability(models.Model):
    exam_activity = models.ForeignKey("api.EsExamActivity", on_delete=models.CASCADE)
    suitability = models.ForeignKey("api.EsSuitability", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "es_exam_activity_invigilator_suitability"
        unique_together = ("exam_activity", "suitability")


class EsExamActivityLocationSuitability(models.Model):
    exam_activity = models.ForeignKey("api.EsExamActivity", on_delete=models.CASCADE)
    suitability = models.ForeignKey("api.EsSuitability", on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "es_exam_activity_location_suitability"
        unique_together = ("exam_activity", "suitability")

class UserRole(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    role = models.ForeignKey("api.role", on_delete=models.CASCADE)

    class Meta:
        db_table = "user_role"
        constraints = [
            models.UniqueConstraint(fields=["user", "role"], name="unique_user_role")
        ]
