from typing import Any
from django.db.models import QuerySet, Manager
from .models import Token


class TokenQueryset(QuerySet[Token]):
    def get_expired(self) -> "TokenQueryset":
        ...

    def bulk_refresh(self) -> "TokenQueryset":
        ...

    def require_scopes(self, scope_string: str | list) -> "TokenQueryset":
        ...

    def require_scopes_exact(self, scope_string: str | list) -> "TokenQueryset":
        ...

    def require_valid(self) -> "TokenQueryset":
        ...

    def equivalent_to(self, token: Token) -> "TokenQueryset":
        ...

    def filter(self, *args: Any, **kwargs: Any) -> "TokenQueryset":
        ...

    def exclude(self, *args: Any, **kwargs: Any) -> "TokenQueryset":
        ...

    def order_by(self, *field_names: str) -> "TokenQueryset":
        ...

    def annotate(self, *args: Any, **kwargs: Any) -> "TokenQueryset":
        ...

    def select_related(self, *fields: str) -> "TokenQueryset":
        ...

    def prefetch_related(self, *lookups: str) -> "TokenQueryset":
        ...

    def distinct(self, *field_names: str) -> "TokenQueryset":
        ...

    def none(self) -> "TokenQueryset":
        ...

    def all(self) -> "TokenQueryset":
        ...


class TokenManager(Manager[Token]):
    def get_queryset(self) -> "TokenQueryset":
        ...

    def require_scopes(self, scope_string: str | list) -> "TokenQueryset":
        ...

    def filter(self, *args: Any, **kwargs: Any) -> "TokenQueryset":
        ...

    def exclude(self, *args: Any, **kwargs: Any) -> "TokenQueryset":
        ...

    def order_by(self, *field_names: str) -> "TokenQueryset":
        ...

    def annotate(self, *args: Any, **kwargs: Any) -> "TokenQueryset":
        ...

    def select_related(self, *fields: str) -> "TokenQueryset":
        ...

    def prefetch_related(self, *lookups: str) -> "TokenQueryset":
        ...

    def distinct(self, *field_names: str) -> "TokenQueryset":
        ...

    def none(self) -> "TokenQueryset":
        ...

    def all(self) -> "TokenQueryset":
        ...
