from rest_framework.permissions import SAFE_METHODS, BasePermission

from apps.usuarios.permissions import is_admin_user


class CanEditBoletas(BasePermission):
    def has_permission(self, request, view):
        user = getattr(request, "user", None)
        if not user or not user.is_authenticated:
            return False

        if request.method in SAFE_METHODS:
            return bool(
                is_admin_user(user)
                or user.has_perm("expediente.view")
                or user.has_perm("boletas.view_boleta")
                or user.has_perm("boletas.create")
                or user.has_perm("boletas.generate")
                or user.has_perm("boletas.edit")
                or user.has_perm("boletas.delete")
            )

        action = getattr(view, "action", None)
        perm = "boletas.edit"
        if action == "create":
            perm = "boletas.create"
        elif action == "imprimir_masivo":
            perm = "boletas.generate"
        elif action in {"update", "partial_update"}:
            perm = "boletas.edit"
        elif action == "destroy":
            perm = "boletas.delete"

        return bool(is_admin_user(user) or user.has_perm(perm))
