# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501

import decimal
import enum
import typing

from nautilus_trader import model
from nautilus_trader import network

__all__ = [
    "COINBASE",
    "COINBASE_CLIENT_ID",
    "COINBASE_VENUE",
    "CoinbaseDataClientConfig",
    "CoinbaseDataClientFactory",
    "CoinbaseEnvironment",
    "CoinbaseExecutionClientConfig",
    "CoinbaseExecutionClientFactory",
    "CoinbaseMarginType",
]

COINBASE: str
COINBASE_CLIENT_ID: model.ClientId
COINBASE_VENUE: model.Venue

@typing.final
class CoinbaseDataClientConfig:
    @property
    def base_url_rest(self) -> str | None: ...
    @property
    def base_url_ws(self) -> str | None: ...
    @property
    def environment(self) -> CoinbaseEnvironment: ...
    @property
    def http_timeout_secs(self) -> int: ...
    @property
    def ws_timeout_secs(self) -> int: ...
    @property
    def update_instruments_interval_mins(self) -> int: ...
    @property
    def derivatives_poll_interval_secs(self) -> int: ...
    @property
    def transport_backend(self) -> network.TransportBackend: ...
    def __init__(
        self,
        api_key: str | None = None,
        api_secret: str | None = None,
        base_url_rest: str | None = None,
        base_url_ws: str | None = None,
        proxy_url: str | None = None,
        environment: CoinbaseEnvironment | None = None,
        http_timeout_secs: int | None = None,
        ws_timeout_secs: int | None = None,
        update_instruments_interval_mins: int | None = None,
        derivatives_poll_interval_secs: int | None = None,
        transport_backend: network.TransportBackend | None = None,
    ) -> None: ...
    @property
    def has_proxy_url(self) -> bool: ...

@typing.final
class CoinbaseDataClientFactory:
    def __init__(self) -> None: ...
    def name(self) -> str: ...

@typing.final
class CoinbaseExecutionClientConfig:
    @property
    def account_id(self) -> model.AccountId: ...
    @property
    def base_url_rest(self) -> str | None: ...
    @property
    def base_url_ws(self) -> str | None: ...
    @property
    def environment(self) -> CoinbaseEnvironment: ...
    @property
    def http_timeout_secs(self) -> int: ...
    @property
    def max_retries(self) -> int: ...
    @property
    def retry_delay_initial_ms(self) -> int: ...
    @property
    def retry_delay_max_ms(self) -> int: ...
    @property
    def account_type(self) -> model.AccountType: ...
    @property
    def default_margin_type(self) -> CoinbaseMarginType | None: ...
    @property
    def default_leverage(self) -> decimal.Decimal | None: ...
    @property
    def retail_portfolio_id(self) -> str | None: ...
    @property
    def transport_backend(self) -> network.TransportBackend: ...
    def __init__(
        self,
        account_id: model.AccountId | None = None,
        api_key: str | None = None,
        api_secret: str | None = None,
        base_url_rest: str | None = None,
        base_url_ws: str | None = None,
        proxy_url: str | None = None,
        environment: CoinbaseEnvironment | None = None,
        http_timeout_secs: int | None = None,
        max_retries: int | None = None,
        retry_delay_initial_ms: int | None = None,
        retry_delay_max_ms: int | None = None,
        account_type: model.AccountType | None = None,
        default_margin_type: CoinbaseMarginType | None = None,
        default_leverage: decimal.Decimal | None = None,
        retail_portfolio_id: str | None = None,
        transport_backend: network.TransportBackend | None = None,
    ) -> None: ...
    @property
    def has_proxy_url(self) -> bool: ...

@typing.final
class CoinbaseExecutionClientFactory:
    def __init__(self) -> None: ...
    def name(self) -> str: ...

@typing.final
class CoinbaseEnvironment(enum.Enum):
    LIVE = ...
    SANDBOX = ...

    def __init__(self) -> None: ...
    def __hash__(self) -> int: ...
    @property
    def name(self) -> str: ...
    @property
    def value(self) -> int: ...

@typing.final
class CoinbaseMarginType(enum.Enum):
    CROSS = ...
    ISOLATED = ...
