from rest_framework.permissions import BasePermission

# Ids de TipoUsuario (ver frontend: 1 Administrador, 2 Entrenador, 3 Atleta)
TIPO_ADMIN = 1
TIPO_ENTRENADOR = 2


def tipo_id(user):
    return getattr(user, "tipo_id", None) if user and user.is_authenticated else None


def is_admin(user):
    return tipo_id(user) == TIPO_ADMIN


def is_staff_member(user):
    return tipo_id(user) in (TIPO_ADMIN, TIPO_ENTRENADOR)


def is_self_or_staff(user, user_id):
    """El propio usuario, o un administrador/entrenador del club."""
    try:
        return bool(user and user.is_authenticated and (user.id == int(user_id) or is_staff_member(user)))
    except (TypeError, ValueError):
        return False


class IsClubAdmin(BasePermission):
    """Solo administradores del club."""
    message = "No tienes permisos para realizar esta acción"

    def has_permission(self, request, view):
        return is_admin(request.user)


class IsClubStaff(BasePermission):
    """Administradores y entrenadores."""
    message = "No tienes permisos para realizar esta acción"

    def has_permission(self, request, view):
        return is_staff_member(request.user)
