"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import builtins
import collections.abc
import cosmos.base.v1beta1.coin_pb2
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import sys
import typing

if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

class _AuthorizationType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _AuthorizationTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_AuthorizationType.ValueType], builtins.type):
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    AUTHORIZATION_TYPE_UNSPECIFIED: _AuthorizationType.ValueType  # 0
    """AUTHORIZATION_TYPE_UNSPECIFIED specifies an unknown authorization type"""
    AUTHORIZATION_TYPE_DELEGATE: _AuthorizationType.ValueType  # 1
    """AUTHORIZATION_TYPE_DELEGATE defines an authorization type for Msg/Delegate"""
    AUTHORIZATION_TYPE_UNDELEGATE: _AuthorizationType.ValueType  # 2
    """AUTHORIZATION_TYPE_UNDELEGATE defines an authorization type for Msg/Undelegate"""
    AUTHORIZATION_TYPE_REDELEGATE: _AuthorizationType.ValueType  # 3
    """AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate"""

class AuthorizationType(_AuthorizationType, metaclass=_AuthorizationTypeEnumTypeWrapper):
    """AuthorizationType defines the type of staking module authorization type

    Since: cosmos-sdk 0.43
    """

AUTHORIZATION_TYPE_UNSPECIFIED: AuthorizationType.ValueType  # 0
"""AUTHORIZATION_TYPE_UNSPECIFIED specifies an unknown authorization type"""
AUTHORIZATION_TYPE_DELEGATE: AuthorizationType.ValueType  # 1
"""AUTHORIZATION_TYPE_DELEGATE defines an authorization type for Msg/Delegate"""
AUTHORIZATION_TYPE_UNDELEGATE: AuthorizationType.ValueType  # 2
"""AUTHORIZATION_TYPE_UNDELEGATE defines an authorization type for Msg/Undelegate"""
AUTHORIZATION_TYPE_REDELEGATE: AuthorizationType.ValueType  # 3
"""AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate"""
global___AuthorizationType = AuthorizationType

@typing_extensions.final
class StakeAuthorization(google.protobuf.message.Message):
    """StakeAuthorization defines authorization for delegate/undelegate/redelegate.

    Since: cosmos-sdk 0.43
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing_extensions.final
    class Validators(google.protobuf.message.Message):
        """Validators defines list of validator addresses."""

        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        ADDRESS_FIELD_NUMBER: builtins.int
        @property
        def address(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
        def __init__(
            self,
            *,
            address: collections.abc.Iterable[builtins.str] | None = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["address", b"address"]) -> None: ...

    MAX_TOKENS_FIELD_NUMBER: builtins.int
    ALLOW_LIST_FIELD_NUMBER: builtins.int
    DENY_LIST_FIELD_NUMBER: builtins.int
    AUTHORIZATION_TYPE_FIELD_NUMBER: builtins.int
    @property
    def max_tokens(self) -> cosmos.base.v1beta1.coin_pb2.Coin:
        """max_tokens specifies the maximum amount of tokens can be delegate to a validator. If it is
        empty, there is no spend limit and any amount of coins can be delegated.
        """
    @property
    def allow_list(self) -> global___StakeAuthorization.Validators:
        """allow_list specifies list of validator addresses to whom grantee can delegate tokens on behalf of granter's
        account.
        """
    @property
    def deny_list(self) -> global___StakeAuthorization.Validators:
        """deny_list specifies list of validator addresses to whom grantee can not delegate tokens."""
    authorization_type: global___AuthorizationType.ValueType
    """authorization_type defines one of AuthorizationType."""
    def __init__(
        self,
        *,
        max_tokens: cosmos.base.v1beta1.coin_pb2.Coin | None = ...,
        allow_list: global___StakeAuthorization.Validators | None = ...,
        deny_list: global___StakeAuthorization.Validators | None = ...,
        authorization_type: global___AuthorizationType.ValueType = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["allow_list", b"allow_list", "deny_list", b"deny_list", "max_tokens", b"max_tokens", "validators", b"validators"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["allow_list", b"allow_list", "authorization_type", b"authorization_type", "deny_list", b"deny_list", "max_tokens", b"max_tokens", "validators", b"validators"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["validators", b"validators"]) -> typing_extensions.Literal["allow_list", "deny_list"] | None: ...

global___StakeAuthorization = StakeAuthorization
