from google.protobuf.internal import containers as _containers
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from collections.abc import Iterable as _Iterable, Mapping as _Mapping
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union

DESCRIPTOR: _descriptor.FileDescriptor

class PlatformType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    PLATFORM_UNKNOWN: _ClassVar[PlatformType]
    PLATFORM_IOS: _ClassVar[PlatformType]
    PLATFORM_ANDROID_PLAYSTORE: _ClassVar[PlatformType]
    PLATFORM_ANDROID_SIDELOAD: _ClassVar[PlatformType]
    PLATFORM_WEB_PC: _ClassVar[PlatformType]
    PLATFORM_MACOS_DIRECT: _ClassVar[PlatformType]

class PaymentGateway(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    GATEWAY_UNKNOWN: _ClassVar[PaymentGateway]
    GATEWAY_APPLE_IAP: _ClassVar[PaymentGateway]
    GATEWAY_GOOGLE_PLAY: _ClassVar[PaymentGateway]
    GATEWAY_STRIPE: _ClassVar[PaymentGateway]
    GATEWAY_PAYPAL: _ClassVar[PaymentGateway]
    GATEWAY_CRYPTO_WEB3: _ClassVar[PaymentGateway]
    GATEWAY_LOCAL_VIETNAM: _ClassVar[PaymentGateway]

class ShopCategory(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    CAT_UNKNOWN: _ClassVar[ShopCategory]
    CAT_COINS: _ClassVar[ShopCategory]
    CAT_SKINS: _ClassVar[ShopCategory]
    CAT_ITEMS: _ClassVar[ShopCategory]
    CAT_CHESTS: _ClassVar[ShopCategory]
    CAT_PASSES: _ClassVar[ShopCategory]

class CryptoChain(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    CHAIN_UNKNOWN: _ClassVar[CryptoChain]
    CHAIN_ETHEREUM: _ClassVar[CryptoChain]
    CHAIN_ARBITRUM: _ClassVar[CryptoChain]
    CHAIN_POLYGON: _ClassVar[CryptoChain]
    CHAIN_SOLANA: _ClassVar[CryptoChain]
    CHAIN_BNB_CHAIN: _ClassVar[CryptoChain]

class CryptoToken(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    TOKEN_UNKNOWN: _ClassVar[CryptoToken]
    TOKEN_USDT: _ClassVar[CryptoToken]
    TOKEN_USDC: _ClassVar[CryptoToken]
    TOKEN_ETH: _ClassVar[CryptoToken]
    TOKEN_SOL: _ClassVar[CryptoToken]
PLATFORM_UNKNOWN: PlatformType
PLATFORM_IOS: PlatformType
PLATFORM_ANDROID_PLAYSTORE: PlatformType
PLATFORM_ANDROID_SIDELOAD: PlatformType
PLATFORM_WEB_PC: PlatformType
PLATFORM_MACOS_DIRECT: PlatformType
GATEWAY_UNKNOWN: PaymentGateway
GATEWAY_APPLE_IAP: PaymentGateway
GATEWAY_GOOGLE_PLAY: PaymentGateway
GATEWAY_STRIPE: PaymentGateway
GATEWAY_PAYPAL: PaymentGateway
GATEWAY_CRYPTO_WEB3: PaymentGateway
GATEWAY_LOCAL_VIETNAM: PaymentGateway
CAT_UNKNOWN: ShopCategory
CAT_COINS: ShopCategory
CAT_SKINS: ShopCategory
CAT_ITEMS: ShopCategory
CAT_CHESTS: ShopCategory
CAT_PASSES: ShopCategory
CHAIN_UNKNOWN: CryptoChain
CHAIN_ETHEREUM: CryptoChain
CHAIN_ARBITRUM: CryptoChain
CHAIN_POLYGON: CryptoChain
CHAIN_SOLANA: CryptoChain
CHAIN_BNB_CHAIN: CryptoChain
TOKEN_UNKNOWN: CryptoToken
TOKEN_USDT: CryptoToken
TOKEN_USDC: CryptoToken
TOKEN_ETH: CryptoToken
TOKEN_SOL: CryptoToken

class ChestDropItemProbability(_message.Message):
    __slots__ = ("item_id", "item_name_key", "rarity", "drop_chance_percent", "is_guaranteed_pity")
    ITEM_ID_FIELD_NUMBER: _ClassVar[int]
    ITEM_NAME_KEY_FIELD_NUMBER: _ClassVar[int]
    RARITY_FIELD_NUMBER: _ClassVar[int]
    DROP_CHANCE_PERCENT_FIELD_NUMBER: _ClassVar[int]
    IS_GUARANTEED_PITY_FIELD_NUMBER: _ClassVar[int]
    item_id: str
    item_name_key: str
    rarity: int
    drop_chance_percent: float
    is_guaranteed_pity: bool
    def __init__(self, item_id: _Optional[str] = ..., item_name_key: _Optional[str] = ..., rarity: _Optional[int] = ..., drop_chance_percent: _Optional[float] = ..., is_guaranteed_pity: _Optional[bool] = ...) -> None: ...

class ShopProduct(_message.Message):
    __slots__ = ("product_id", "name_i18n_key", "description_i18n_key", "category", "coin_price", "base_fiat_usd", "original_coin_price", "discount_percent", "purchase_limit_per_account", "available_until_ts", "badge_label", "chest_drop_rates")
    PRODUCT_ID_FIELD_NUMBER: _ClassVar[int]
    NAME_I18N_KEY_FIELD_NUMBER: _ClassVar[int]
    DESCRIPTION_I18N_KEY_FIELD_NUMBER: _ClassVar[int]
    CATEGORY_FIELD_NUMBER: _ClassVar[int]
    COIN_PRICE_FIELD_NUMBER: _ClassVar[int]
    BASE_FIAT_USD_FIELD_NUMBER: _ClassVar[int]
    ORIGINAL_COIN_PRICE_FIELD_NUMBER: _ClassVar[int]
    DISCOUNT_PERCENT_FIELD_NUMBER: _ClassVar[int]
    PURCHASE_LIMIT_PER_ACCOUNT_FIELD_NUMBER: _ClassVar[int]
    AVAILABLE_UNTIL_TS_FIELD_NUMBER: _ClassVar[int]
    BADGE_LABEL_FIELD_NUMBER: _ClassVar[int]
    CHEST_DROP_RATES_FIELD_NUMBER: _ClassVar[int]
    product_id: str
    name_i18n_key: str
    description_i18n_key: str
    category: ShopCategory
    coin_price: int
    base_fiat_usd: float
    original_coin_price: int
    discount_percent: int
    purchase_limit_per_account: int
    available_until_ts: int
    badge_label: str
    chest_drop_rates: _containers.RepeatedCompositeFieldContainer[ChestDropItemProbability]
    def __init__(self, product_id: _Optional[str] = ..., name_i18n_key: _Optional[str] = ..., description_i18n_key: _Optional[str] = ..., category: _Optional[_Union[ShopCategory, str]] = ..., coin_price: _Optional[int] = ..., base_fiat_usd: _Optional[float] = ..., original_coin_price: _Optional[int] = ..., discount_percent: _Optional[int] = ..., purchase_limit_per_account: _Optional[int] = ..., available_until_ts: _Optional[int] = ..., badge_label: _Optional[str] = ..., chest_drop_rates: _Optional[_Iterable[_Union[ChestDropItemProbability, _Mapping]]] = ...) -> None: ...

class GetCatalogRequest(_message.Message):
    __slots__ = ("account_id", "category", "platform", "country_code", "locale")
    ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int]
    CATEGORY_FIELD_NUMBER: _ClassVar[int]
    PLATFORM_FIELD_NUMBER: _ClassVar[int]
    COUNTRY_CODE_FIELD_NUMBER: _ClassVar[int]
    LOCALE_FIELD_NUMBER: _ClassVar[int]
    account_id: str
    category: ShopCategory
    platform: PlatformType
    country_code: str
    locale: str
    def __init__(self, account_id: _Optional[str] = ..., category: _Optional[_Union[ShopCategory, str]] = ..., platform: _Optional[_Union[PlatformType, str]] = ..., country_code: _Optional[str] = ..., locale: _Optional[str] = ...) -> None: ...

class GetCatalogResponse(_message.Message):
    __slots__ = ("products", "catalog_version", "user_country_code")
    PRODUCTS_FIELD_NUMBER: _ClassVar[int]
    CATALOG_VERSION_FIELD_NUMBER: _ClassVar[int]
    USER_COUNTRY_CODE_FIELD_NUMBER: _ClassVar[int]
    products: _containers.RepeatedCompositeFieldContainer[ShopProduct]
    catalog_version: int
    user_country_code: str
    def __init__(self, products: _Optional[_Iterable[_Union[ShopProduct, _Mapping]]] = ..., catalog_version: _Optional[int] = ..., user_country_code: _Optional[str] = ...) -> None: ...

class GetPaymentMethodsRequest(_message.Message):
    __slots__ = ("account_id", "platform", "country_code", "client_version")
    ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int]
    PLATFORM_FIELD_NUMBER: _ClassVar[int]
    COUNTRY_CODE_FIELD_NUMBER: _ClassVar[int]
    CLIENT_VERSION_FIELD_NUMBER: _ClassVar[int]
    account_id: str
    platform: PlatformType
    country_code: str
    client_version: str
    def __init__(self, account_id: _Optional[str] = ..., platform: _Optional[_Union[PlatformType, str]] = ..., country_code: _Optional[str] = ..., client_version: _Optional[str] = ...) -> None: ...

class PaymentMethodOption(_message.Message):
    __slots__ = ("gateway", "display_name", "icon_url", "is_recommended", "bonus_coin_multiplier")
    GATEWAY_FIELD_NUMBER: _ClassVar[int]
    DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int]
    ICON_URL_FIELD_NUMBER: _ClassVar[int]
    IS_RECOMMENDED_FIELD_NUMBER: _ClassVar[int]
    BONUS_COIN_MULTIPLIER_FIELD_NUMBER: _ClassVar[int]
    gateway: PaymentGateway
    display_name: str
    icon_url: str
    is_recommended: bool
    bonus_coin_multiplier: float
    def __init__(self, gateway: _Optional[_Union[PaymentGateway, str]] = ..., display_name: _Optional[str] = ..., icon_url: _Optional[str] = ..., is_recommended: _Optional[bool] = ..., bonus_coin_multiplier: _Optional[float] = ...) -> None: ...

class GetPaymentMethodsResponse(_message.Message):
    __slots__ = ("allowed_gateways", "resolved_platform", "compliance_notice")
    ALLOWED_GATEWAYS_FIELD_NUMBER: _ClassVar[int]
    RESOLVED_PLATFORM_FIELD_NUMBER: _ClassVar[int]
    COMPLIANCE_NOTICE_FIELD_NUMBER: _ClassVar[int]
    allowed_gateways: _containers.RepeatedCompositeFieldContainer[PaymentMethodOption]
    resolved_platform: PlatformType
    compliance_notice: str
    def __init__(self, allowed_gateways: _Optional[_Iterable[_Union[PaymentMethodOption, _Mapping]]] = ..., resolved_platform: _Optional[_Union[PlatformType, str]] = ..., compliance_notice: _Optional[str] = ...) -> None: ...

class CreatePaymentOrderRequest(_message.Message):
    __slots__ = ("account_id", "product_id", "platform", "gateway", "country_code", "crypto_chain", "crypto_token", "buyer_wallet_address")
    ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int]
    PRODUCT_ID_FIELD_NUMBER: _ClassVar[int]
    PLATFORM_FIELD_NUMBER: _ClassVar[int]
    GATEWAY_FIELD_NUMBER: _ClassVar[int]
    COUNTRY_CODE_FIELD_NUMBER: _ClassVar[int]
    CRYPTO_CHAIN_FIELD_NUMBER: _ClassVar[int]
    CRYPTO_TOKEN_FIELD_NUMBER: _ClassVar[int]
    BUYER_WALLET_ADDRESS_FIELD_NUMBER: _ClassVar[int]
    account_id: str
    product_id: str
    platform: PlatformType
    gateway: PaymentGateway
    country_code: str
    crypto_chain: CryptoChain
    crypto_token: CryptoToken
    buyer_wallet_address: str
    def __init__(self, account_id: _Optional[str] = ..., product_id: _Optional[str] = ..., platform: _Optional[_Union[PlatformType, str]] = ..., gateway: _Optional[_Union[PaymentGateway, str]] = ..., country_code: _Optional[str] = ..., crypto_chain: _Optional[_Union[CryptoChain, str]] = ..., crypto_token: _Optional[_Union[CryptoToken, str]] = ..., buyer_wallet_address: _Optional[str] = ...) -> None: ...

class Web3OrderDetails(_message.Message):
    __slots__ = ("merchant_vault_address", "required_amount_atomic", "required_amount_human", "token_contract_address", "chain_id", "nonce", "expires_at_ts", "eip712_domain_json")
    MERCHANT_VAULT_ADDRESS_FIELD_NUMBER: _ClassVar[int]
    REQUIRED_AMOUNT_ATOMIC_FIELD_NUMBER: _ClassVar[int]
    REQUIRED_AMOUNT_HUMAN_FIELD_NUMBER: _ClassVar[int]
    TOKEN_CONTRACT_ADDRESS_FIELD_NUMBER: _ClassVar[int]
    CHAIN_ID_FIELD_NUMBER: _ClassVar[int]
    NONCE_FIELD_NUMBER: _ClassVar[int]
    EXPIRES_AT_TS_FIELD_NUMBER: _ClassVar[int]
    EIP712_DOMAIN_JSON_FIELD_NUMBER: _ClassVar[int]
    merchant_vault_address: str
    required_amount_atomic: str
    required_amount_human: float
    token_contract_address: str
    chain_id: int
    nonce: int
    expires_at_ts: int
    eip712_domain_json: str
    def __init__(self, merchant_vault_address: _Optional[str] = ..., required_amount_atomic: _Optional[str] = ..., required_amount_human: _Optional[float] = ..., token_contract_address: _Optional[str] = ..., chain_id: _Optional[int] = ..., nonce: _Optional[int] = ..., expires_at_ts: _Optional[int] = ..., eip712_domain_json: _Optional[str] = ...) -> None: ...

class CreatePaymentOrderResponse(_message.Message):
    __slots__ = ("order_id", "success", "error_message", "amount_fiat", "currency_code", "web3_details", "gateway_client_token")
    ORDER_ID_FIELD_NUMBER: _ClassVar[int]
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int]
    AMOUNT_FIAT_FIELD_NUMBER: _ClassVar[int]
    CURRENCY_CODE_FIELD_NUMBER: _ClassVar[int]
    WEB3_DETAILS_FIELD_NUMBER: _ClassVar[int]
    GATEWAY_CLIENT_TOKEN_FIELD_NUMBER: _ClassVar[int]
    order_id: str
    success: bool
    error_message: str
    amount_fiat: float
    currency_code: str
    web3_details: Web3OrderDetails
    gateway_client_token: str
    def __init__(self, order_id: _Optional[str] = ..., success: _Optional[bool] = ..., error_message: _Optional[str] = ..., amount_fiat: _Optional[float] = ..., currency_code: _Optional[str] = ..., web3_details: _Optional[_Union[Web3OrderDetails, _Mapping]] = ..., gateway_client_token: _Optional[str] = ...) -> None: ...

class VerifyPaymentReceiptRequest(_message.Message):
    __slots__ = ("account_id", "order_id", "gateway", "receipt_payload", "tx_hash", "chain_id")
    ACCOUNT_ID_FIELD_NUMBER: _ClassVar[int]
    ORDER_ID_FIELD_NUMBER: _ClassVar[int]
    GATEWAY_FIELD_NUMBER: _ClassVar[int]
    RECEIPT_PAYLOAD_FIELD_NUMBER: _ClassVar[int]
    TX_HASH_FIELD_NUMBER: _ClassVar[int]
    CHAIN_ID_FIELD_NUMBER: _ClassVar[int]
    account_id: str
    order_id: str
    gateway: PaymentGateway
    receipt_payload: str
    tx_hash: str
    chain_id: int
    def __init__(self, account_id: _Optional[str] = ..., order_id: _Optional[str] = ..., gateway: _Optional[_Union[PaymentGateway, str]] = ..., receipt_payload: _Optional[str] = ..., tx_hash: _Optional[str] = ..., chain_id: _Optional[int] = ...) -> None: ...

class VerifyPaymentReceiptResponse(_message.Message):
    __slots__ = ("order_id", "verified", "error_message", "product_id", "delivered_coins", "delivered_item_uuids", "processed_timestamp")
    ORDER_ID_FIELD_NUMBER: _ClassVar[int]
    VERIFIED_FIELD_NUMBER: _ClassVar[int]
    ERROR_MESSAGE_FIELD_NUMBER: _ClassVar[int]
    PRODUCT_ID_FIELD_NUMBER: _ClassVar[int]
    DELIVERED_COINS_FIELD_NUMBER: _ClassVar[int]
    DELIVERED_ITEM_UUIDS_FIELD_NUMBER: _ClassVar[int]
    PROCESSED_TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
    order_id: str
    verified: bool
    error_message: str
    product_id: str
    delivered_coins: int
    delivered_item_uuids: _containers.RepeatedScalarFieldContainer[str]
    processed_timestamp: int
    def __init__(self, order_id: _Optional[str] = ..., verified: _Optional[bool] = ..., error_message: _Optional[str] = ..., product_id: _Optional[str] = ..., delivered_coins: _Optional[int] = ..., delivered_item_uuids: _Optional[_Iterable[str]] = ..., processed_timestamp: _Optional[int] = ...) -> None: ...
