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

import decimal
import typing

from nautilus_trader import model

__all__ = [
    "BETFAIR",
    "BETFAIR_CLIENT_ID",
    "BETFAIR_VENUE",
    "BetfairDataClientConfig",
    "BetfairDataClientFactory",
    "BetfairExecutionClientConfig",
    "BetfairExecutionClientFactory",
]

BETFAIR: str
BETFAIR_CLIENT_ID: model.ClientId
BETFAIR_VENUE: model.Venue

@typing.final
class BetfairDataClientConfig:
    @property
    def account_currency(self) -> str: ...
    @property
    def request_rate_per_second(self) -> int: ...
    @property
    def default_min_notional(self) -> decimal.Decimal | None: ...
    @property
    def event_type_ids(self) -> list[str] | None: ...
    @property
    def event_type_names(self) -> list[str] | None: ...
    @property
    def event_ids(self) -> list[str] | None: ...
    @property
    def country_codes(self) -> list[str] | None: ...
    @property
    def market_types(self) -> list[str] | None: ...
    @property
    def market_ids(self) -> list[str] | None: ...
    @property
    def min_market_start_time(self) -> str | None: ...
    @property
    def max_market_start_time(self) -> str | None: ...
    @property
    def stream_host(self) -> str | None: ...
    @property
    def stream_port(self) -> int | None: ...
    @property
    def stream_heartbeat_secs(self) -> int | None: ...
    @property
    def stream_heartbeat_timeout_secs(self) -> int | None: ...
    @property
    def stream_reconnect_delay_initial_ms(self) -> int: ...
    @property
    def stream_reconnect_delay_max_ms(self) -> int: ...
    @property
    def stream_use_tls(self) -> bool: ...
    @property
    def stream_conflate_ms(self) -> int | None: ...
    @property
    def subscription_delay_secs(self) -> int: ...
    @property
    def subscribe_race_data(self) -> bool: ...
    @property
    def subscribe_cricket_data(self) -> bool: ...
    def __init__(
        self,
        account_currency: str | None = None,
        username: str | None = None,
        password: str | None = None,
        app_key: str | None = None,
        proxy_url: str | None = None,
        request_rate_per_second: int = 5,
        default_min_notional: decimal.Decimal | None = None,
        event_type_ids: typing.Sequence[int] | None = None,
        event_type_names: typing.Sequence[str] | None = None,
        event_ids: typing.Sequence[int] | None = None,
        country_codes: typing.Sequence[str] | None = None,
        market_types: typing.Sequence[str] | None = None,
        market_ids: typing.Sequence[str] | None = None,
        min_market_start_time: str | None = None,
        max_market_start_time: str | None = None,
        stream_host: str | None = None,
        stream_port: int | None = None,
        stream_heartbeat_secs: int | None = None,
        stream_heartbeat_timeout_secs: int | None = None,
        stream_reconnect_delay_initial_ms: int = 2000,
        stream_reconnect_delay_max_ms: int = 30000,
        stream_use_tls: bool = True,
        stream_conflate_ms: int | None = None,
        subscription_delay_secs: int | None = None,
        subscribe_race_data: bool = False,
        subscribe_cricket_data: bool = False,
    ) -> None: ...
    @property
    def username(self) -> str | None: ...
    @property
    def has_proxy_url(self) -> bool: ...

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

@typing.final
class BetfairExecutionClientConfig:
    @property
    def account_id(self) -> model.AccountId: ...
    @property
    def account_currency(self) -> str: ...
    @property
    def request_rate_per_second(self) -> int: ...
    @property
    def order_request_rate_per_second(self) -> int: ...
    @property
    def stream_host(self) -> str | None: ...
    @property
    def stream_port(self) -> int | None: ...
    @property
    def stream_heartbeat_secs(self) -> int | None: ...
    @property
    def stream_heartbeat_timeout_secs(self) -> int | None: ...
    @property
    def stream_reconnect_delay_initial_ms(self) -> int: ...
    @property
    def stream_reconnect_delay_max_ms(self) -> int: ...
    @property
    def stream_use_tls(self) -> bool: ...
    @property
    def stream_market_ids_filter(self) -> list[str] | None: ...
    @property
    def ignore_external_orders(self) -> bool: ...
    @property
    def calculate_account_state(self) -> bool: ...
    @property
    def request_account_state_secs(self) -> int: ...
    @property
    def reconcile_market_ids_only(self) -> bool: ...
    @property
    def reconcile_market_ids(self) -> list[str] | None: ...
    @property
    def use_market_version(self) -> bool: ...
    @property
    def stream_gap_recovery_lookback_mins(self) -> int: ...
    def __init__(
        self,
        account_id: model.AccountId | None = None,
        account_currency: str | None = None,
        username: str | None = None,
        password: str | None = None,
        app_key: str | None = None,
        proxy_url: str | None = None,
        request_rate_per_second: int = 5,
        order_request_rate_per_second: int = 20,
        stream_host: str | None = None,
        stream_port: int | None = None,
        stream_heartbeat_secs: int | None = None,
        stream_heartbeat_timeout_secs: int | None = None,
        stream_reconnect_delay_initial_ms: int = 2000,
        stream_reconnect_delay_max_ms: int = 30000,
        stream_use_tls: bool = True,
        stream_market_ids_filter: typing.Sequence[str] | None = None,
        ignore_external_orders: bool = False,
        calculate_account_state: bool = True,
        request_account_state_secs: int = 300,
        reconcile_market_ids_only: bool = False,
        reconcile_market_ids: typing.Sequence[str] | None = None,
        use_market_version: bool = False,
        stream_gap_recovery_lookback_mins: int = 10,
    ) -> None: ...
    @property
    def username(self) -> str | None: ...
    @property
    def has_proxy_url(self) -> bool: ...

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