from django.contrib.auth.models import Group
from rest_framework.permissions import BasePermission


ADMIN_GROUP_NAME = "Administrador"


def is_admin_user(user) -> bool:
    if not user or not user.is_authenticated:
        return False
    if user.is_superuser:
        return True
    return Group.objects.filter(user=user, name=ADMIN_GROUP_NAME).exists()


class IsAdmin(BasePermission):
    def has_permission(self, request, view):
        return is_admin_user(getattr(request, "user", None))


class IsSuperUser(BasePermission):
    def has_permission(self, request, view):
        user = getattr(request, "user", None)
        return bool(user and user.is_authenticated and user.is_superuser)


class CanGenerateBoletas(BasePermission):
    def has_permission(self, request, view):
        user = getattr(request, "user", None)
        return bool(
            user
            and user.is_authenticated
            and (is_admin_user(user) or user.has_perm("boletas.generate"))
        )
