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

import datetime
import decimal
import enum
import typing

from nautilus_trader import model
from nautilus_trader import network

__all__ = [
    "AX",
    "AX_CLIENT_ID",
    "AX_VENUE",
    "AxDataClientConfig",
    "AxDataClientFactory",
    "AxEnvironment",
    "AxExecutionClientConfig",
    "AxExecutionClientFactory",
    "AxMarketDataLevel",
]

AX: str
AX_CLIENT_ID: model.ClientId
AX_VENUE: model.Venue

@typing.final
class AxDataClientConfig:
    @property
    def environment(self) -> AxEnvironment: ...
    @property
    def base_url_http(self) -> str | None: ...
    @property
    def base_url_ws_public(self) -> str | None: ...
    @property
    def base_url_ws_private(self) -> str | None: ...
    @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 heartbeat_interval_secs(self) -> int: ...
    @property
    def recv_window_ms(self) -> int: ...
    @property
    def update_instruments_interval_mins(self) -> int: ...
    @property
    def funding_rate_poll_interval_mins(self) -> int: ...
    @property
    def transport_backend(self) -> network.TransportBackend: ...
    def __init__(
        self,
        api_key: str | None = None,
        api_secret: str | None = None,
        environment: AxEnvironment | None = None,
        base_url_http: str | None = None,
        base_url_ws_public: str | None = None,
        base_url_ws_private: str | None = None,
        proxy_url: str | 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,
        heartbeat_interval_secs: int | None = None,
        recv_window_ms: int | None = None,
        update_instruments_interval_mins: int | None = None,
        funding_rate_poll_interval_mins: int | None = None,
        transport_backend: network.TransportBackend | None = None,
    ) -> None: ...
    @property
    def has_proxy_url(self) -> bool: ...

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

@typing.final
class AxExecutionClientConfig:
    @property
    def account_id(self) -> model.AccountId: ...
    @property
    def environment(self) -> AxEnvironment: ...
    @property
    def base_url_http(self) -> str | None: ...
    @property
    def base_url_orders(self) -> str | None: ...
    @property
    def base_url_ws_private(self) -> str | None: ...
    @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 heartbeat_interval_secs(self) -> int: ...
    @property
    def recv_window_ms(self) -> int: ...
    @property
    def cancel_on_disconnect(self) -> bool: ...
    @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,
        environment: AxEnvironment | None = None,
        base_url_http: str | None = None,
        base_url_orders: str | None = None,
        base_url_ws_private: str | None = None,
        proxy_url: str | 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,
        heartbeat_interval_secs: int | None = None,
        recv_window_ms: int | None = None,
        cancel_on_disconnect: bool | None = None,
        transport_backend: network.TransportBackend | None = None,
    ) -> None: ...
    @property
    def has_proxy_url(self) -> bool: ...

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

@typing.final
class AxHttpClient:
    def __init__(
        self,
        base_url: str | None = None,
        orders_base_url: str | None = None,
        timeout_secs: int = 60,
        max_retries: int = 3,
        retry_delay_ms: int = 1000,
        retry_delay_max_ms: int = 10000,
        proxy_url: str | None = None,
    ) -> None: ...
    @staticmethod
    def with_credentials(
        api_key: str,
        api_secret: str,
        base_url: str | None = None,
        orders_base_url: str | None = None,
        timeout_secs: int = 60,
        max_retries: int = 3,
        retry_delay_ms: int = 1000,
        retry_delay_max_ms: int = 10000,
        proxy_url: str | None = None,
    ) -> AxHttpClient: ...
    @property
    def base_url(self) -> str: ...
    @property
    def api_key_masked(self) -> str: ...
    def cancel_all_requests(self) -> None: ...
    def cancel_all_orders(self, instrument_id: model.InstrumentId) -> typing.Any: ...
    def cache_instrument(self, instrument: typing.Any) -> None: ...
    def authenticate(
        self, api_key: str, api_secret: str, expiration_seconds: int = 86400
    ) -> typing.Any: ...
    def authenticate_auto(self, expiration_seconds: int = 86400) -> typing.Any: ...
    def request_instruments(
        self, maker_fee: decimal.Decimal | None = None, taker_fee: decimal.Decimal | None = None
    ) -> typing.Any: ...
    def request_trade_ticks(
        self,
        instrument_id: model.InstrumentId,
        limit: int | None = None,
        start: datetime.datetime | None = None,
        end: datetime.datetime | None = None,
    ) -> typing.Any: ...
    def request_bars(
        self,
        bar_type: model.BarType,
        start: datetime.datetime | None = None,
        end: datetime.datetime | None = None,
    ) -> typing.Any: ...
    def request_book_snapshot(
        self, instrument_id: model.InstrumentId, depth: int | None = None
    ) -> typing.Any: ...
    def request_funding_rates(
        self,
        instrument_id: model.InstrumentId,
        start: datetime.datetime | None = None,
        end: datetime.datetime | None = None,
    ) -> typing.Any: ...
    def request_account_state(self, account_id: model.AccountId) -> typing.Any: ...
    def request_order_status(
        self,
        account_id: model.AccountId,
        instrument_id: model.InstrumentId,
        order_side: model.OrderSide,
        order_type: model.OrderType,
        time_in_force: model.TimeInForce,
        client_order_id: model.ClientOrderId | None = None,
        venue_order_id: model.VenueOrderId | None = None,
    ) -> typing.Any: ...
    def request_order_status_reports(
        self,
        account_id: model.AccountId,
        client_order_ids: typing.Sequence[model.ClientOrderId] | None = None,
    ) -> typing.Any: ...
    def request_fill_reports(self, account_id: model.AccountId) -> typing.Any: ...
    def request_position_reports(self, account_id: model.AccountId) -> typing.Any: ...
    def preview_aggressive_limit_order(
        self, instrument_id: model.InstrumentId, quantity: model.Quantity, side: model.OrderSide
    ) -> typing.Any: ...

@typing.final
class AxEnvironment(enum.Enum):
    SANDBOX = ...
    PRODUCTION = ...

    @property
    def name(self) -> str: ...
    @property
    def value(self) -> int: ...
    @classmethod
    def from_str(cls, data: typing.Any) -> AxEnvironment: ...

@typing.final
class AxMarketDataLevel(enum.Enum):
    LEVEL1 = ...
    LEVEL2 = ...
    LEVEL3 = ...
    TRADES = ...

    @property
    def name(self) -> str: ...
    @property
    def value(self) -> int: ...
    @classmethod
    def from_str(cls, data: typing.Any) -> AxMarketDataLevel: ...
