from rest_framework.permissions import BasePermission

from apps.usuarios.permissions import is_admin_user


class CanViewTraspaso(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("traspasos.view_traspaso"))
        )


class CanCreateTraspaso(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("traspasos.add_traspaso")))


class CanOperateTraspaso(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("traspasos.change_traspaso"))
        )


class CanAcceptWithDifference(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("traspasos.aceptar_con_diferencia"))
        )


class CanRegisterAjuste(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("traspasos.registrar_ajuste"))
        )


class CanOpenDisputa(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("traspasos.abrir_disputa"))
        )
