import json
from django.db import models
from django.conf import settings

class UserPermission(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    permission = models.CharField(max_length=100)  # e.g. "view_report", "export_report"
    grant_to_all_department = models.BooleanField(default=True)

    class Meta:
        db_table = "user_permission"
        constraints = [
            models.UniqueConstraint(fields=["user", "permission"], name="unique_user_permission")
        ]

    @staticmethod
    def bulk_insert(user_id, permissions: list[str]):
        existing = set(
            UserPermission.objects.filter(user_id=user_id)
            .values_list("permission", flat=True)
        )

        # remove exists permission
        new_permission = [val for val in permissions if val not in existing]

        objs = [
            UserPermission(user_id=user_id, permission=permission)
            for permission in new_permission
        ]
        return UserPermission.objects.bulk_create(objs)