"""Permissões baseadas no perfil (role) do utilizador.

As permissões são verificadas pelo backend em cada operação — não são apenas
botões na interface. Os perfis seguem o PRD (secção 5.2).
"""

from rest_framework.permissions import BasePermission

from apps.accounts.models import Role


class IsAdmin(BasePermission):
    """Apenas administradores."""

    message = "Requer perfil de administrador."

    def has_permission(self, request, view):
        user = request.user
        return bool(user and user.is_authenticated and user.role == Role.ADMIN)


class IsSupervisorOrAdmin(BasePermission):
    """Supervisores e administradores."""

    message = "Requer perfil de supervisor ou administrador."

    def has_permission(self, request, view):
        user = request.user
        return bool(
            user
            and user.is_authenticated
            and user.role in (Role.SUPERVISOR, Role.ADMIN)
        )


class IsOperatorOrAbove(BasePermission):
    """Operadores, supervisores e administradores."""

    message = "Requer perfil de operador, supervisor ou administrador."

    def has_permission(self, request, view):
        user = request.user
        return bool(
            user
            and user.is_authenticated
            and user.role in (Role.OPERATOR, Role.SUPERVISOR, Role.ADMIN)
        )


class IsActiveUser(BasePermission):
    """Qualquer utilizador autenticado e ativo (consulta)."""

    def has_permission(self, request, view):
        user = request.user
        return bool(user and user.is_authenticated and user.is_active)
