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

import datetime
import decimal
import enum
import typing

from nautilus_trader import execution
from nautilus_trader import model
from nautilus_trader import network

__all__ = [
    "POLYMARKET",
    "POLYMARKET_CLIENT_ID",
    "POLYMARKET_VENUE",
    "PolymarketDataClientConfig",
    "PolymarketDataClientFactory",
    "PolymarketDataLoader",
    "PolymarketExecutionClientConfig",
    "PolymarketExecutionClientFactory",
    "PolymarketFeeModel",
    "PolymarketInstrumentProviderConfig",
    "PolymarketPositionClient",
    "PolymarketPositionOutcome",
    "PolymarketPositionTransaction",
    "PolymarketRtdsCryptoPrice",
    "PolymarketRtdsCryptoTwap",
    "PolymarketRtdsEquityPrice",
    "PolymarketUpDownEventSlugConfig",
    "SignatureType",
]

POLYMARKET: str
POLYMARKET_CLIENT_ID: model.ClientId
POLYMARKET_VENUE: model.Venue

@typing.final
class PolymarketDataClientConfig:
    @property
    def instrument_config(self) -> PolymarketInstrumentProviderConfig | None: ...
    @property
    def base_url_http(self) -> str | None: ...
    @property
    def base_url_ws(self) -> str | None: ...
    @property
    def base_url_gamma(self) -> str | None: ...
    @property
    def base_url_data_api(self) -> str | None: ...
    @property
    def http_timeout_secs(self) -> int: ...
    @property
    def ws_timeout_secs(self) -> int: ...
    @property
    def ws_max_subscriptions(self) -> int: ...
    @property
    def update_instruments_interval_mins(self) -> int | None: ...
    @property
    def subscribe_new_markets(self) -> bool: ...
    @property
    def auto_load_missing_instruments(self) -> bool: ...
    @property
    def auto_load_debounce_ms(self) -> int: ...
    @property
    def auto_load_max_retries(self) -> int: ...
    @property
    def auto_load_retry_delay_initial_secs(self) -> float: ...
    @property
    def auto_load_retry_delay_max_secs(self) -> float: ...
    @property
    def new_market_fetch_max_concurrency(self) -> int: ...
    @property
    def resolve_poll_enabled(self) -> bool: ...
    @property
    def resolve_poll_interval_secs(self) -> int: ...
    @property
    def resolve_poll_grace_secs(self) -> int: ...
    @property
    def resolve_poll_max_wait_secs(self) -> int: ...
    @property
    def base_url_rtds(self) -> str | None: ...
    @property
    def transport_backend(self) -> network.TransportBackend: ...
    @property
    def drop_quotes_missing_side(self) -> bool: ...
    @property
    def compute_effective_deltas(self) -> bool: ...
    def __init__(
        self,
        instrument_config: PolymarketInstrumentProviderConfig | None = ...,
        base_url_http: str | None = ...,
        base_url_ws: str | None = ...,
        base_url_gamma: str | None = ...,
        base_url_data_api: str | None = ...,
        http_timeout_secs: int | None = ...,
        ws_timeout_secs: int | None = ...,
        ws_max_subscriptions: int | None = ...,
        update_instruments_interval_mins: int | None = ...,
        subscribe_new_markets: bool | None = None,
        auto_load_missing_instruments: bool | None = None,
        auto_load_debounce_ms: int | None = None,
        auto_load_max_retries: int | None = None,
        auto_load_retry_delay_initial_secs: float | None = None,
        auto_load_retry_delay_max_secs: float | None = None,
        new_market_fetch_max_concurrency: int | None = None,
        resolve_poll_enabled: bool | None = None,
        resolve_poll_interval_secs: int | None = None,
        resolve_poll_grace_secs: int | None = None,
        resolve_poll_max_wait_secs: int | None = None,
        base_url_rtds: str | None = None,
        transport_backend: network.TransportBackend | None = None,
        drop_quotes_missing_side: bool | None = None,
        proxy_url: str | None = None,
        compute_effective_deltas: bool | None = None,
    ) -> None: ...
    @property
    def has_proxy_url(self) -> bool: ...

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

@typing.final
class PolymarketExecutionClientConfig:
    @property
    def account_id(self) -> model.AccountId: ...
    @property
    def funder(self) -> str | None: ...
    @property
    def signature_type(self) -> SignatureType: ...
    @property
    def base_url_http(self) -> str | None: ...
    @property
    def base_url_ws(self) -> str | None: ...
    @property
    def base_url_data_api(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_enabled(self) -> bool: ...
    @property
    def transport_backend(self) -> network.TransportBackend: ...
    @property
    def instrument_config(self) -> PolymarketInstrumentProviderConfig | None: ...
    def __init__(
        self,
        account_id: str | None = None,
        private_key: str | None = None,
        api_key: str | None = None,
        api_secret: str | None = None,
        passphrase: str | None = None,
        funder: str | None = None,
        signature_type: SignatureType | None = None,
        base_url_http: str | None = None,
        base_url_ws: str | None = None,
        base_url_data_api: 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_enabled: bool | None = None,
        transport_backend: network.TransportBackend | None = None,
        proxy_url: str | None = None,
        instrument_config: PolymarketInstrumentProviderConfig | None = None,
    ) -> None: ...
    @property
    def has_proxy_url(self) -> bool: ...

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

@typing.final
class PolymarketFeeModel(execution.FeeModel):
    def __new__(cls) -> typing.Self: ...
    def get_commission(
        self,
        order: typing.Any,
        fill_quantity: model.Quantity,
        fill_px: model.Price,
        instrument: typing.Any,
    ) -> model.Money: ...

@typing.final
class PolymarketInstrumentProviderConfig:
    @property
    def load_all(self) -> bool: ...
    @property
    def load_ids(self) -> list[model.InstrumentId] | None: ...
    @property
    def filters(self) -> dict[str, str] | None: ...
    @property
    def event_slugs(self) -> list[str] | None: ...
    @property
    def market_slugs(self) -> list[str] | None: ...
    @property
    def event_slug_builder(self) -> PolymarketUpDownEventSlugConfig | None: ...
    @property
    def series_ids(self) -> list[int] | None: ...
    @property
    def log_warnings(self) -> bool: ...
    @property
    def use_gamma_markets(self) -> bool: ...
    def __init__(
        self,
        load_all: bool | None = None,
        load_ids: typing.Sequence[model.InstrumentId] | None = None,
        filters: typing.Mapping[str, str] | None = None,
        event_slugs: typing.Sequence[str] | None = None,
        market_slugs: typing.Sequence[str] | None = None,
        event_slug_builder: PolymarketUpDownEventSlugConfig | None = None,
        log_warnings: bool | None = None,
        use_gamma_markets: bool | None = None,
        series_ids: typing.Sequence[int] | None = None,
    ) -> None: ...

@typing.final
class PolymarketRtdsCryptoPrice:
    @property
    def symbol(self) -> str: ...
    @property
    def value(self) -> typing.Any: ...
    @property
    def price_timestamp_ms(self) -> int: ...
    @property
    def message_timestamp_ms(self) -> int: ...
    @property
    def ts_event(self) -> int: ...
    @property
    def ts_init(self) -> int: ...
    def __new__(
        cls,
        symbol: str,
        value: typing.Any,
        price_timestamp_ms: int,
        message_timestamp_ms: int,
        ts_event: int,
        ts_init: int,
    ) -> PolymarketRtdsCryptoPrice: ...
    def to_json(self) -> str: ...
    @classmethod
    def from_json(cls, data: typing.Any) -> typing.Any: ...

@typing.final
class PolymarketRtdsCryptoTwap:
    @property
    def symbol(self) -> str: ...
    @property
    def window_seconds(self) -> int: ...
    @property
    def value(self) -> typing.Any: ...
    @property
    def observation_timestamp_ms(self) -> int: ...
    @property
    def message_timestamp_ms(self) -> int: ...
    @property
    def ts_event(self) -> int: ...
    @property
    def ts_init(self) -> int: ...
    def __new__(
        cls,
        symbol: str,
        window_seconds: int,
        value: typing.Any,
        observation_timestamp_ms: int,
        message_timestamp_ms: int,
        ts_event: int,
        ts_init: int,
    ) -> PolymarketRtdsCryptoTwap: ...
    def to_json(self) -> str: ...
    @classmethod
    def from_json(cls, data: typing.Any) -> typing.Any: ...

@typing.final
class PolymarketRtdsEquityPrice:
    @property
    def symbol(self) -> str: ...
    @property
    def value(self) -> typing.Any: ...
    @property
    def full_accuracy_value(self) -> typing.Any: ...
    @property
    def price_timestamp_ms(self) -> int: ...
    @property
    def message_timestamp_ms(self) -> int: ...
    @property
    def received_at_ms(self) -> typing.Any: ...
    @property
    def is_carried_forward(self) -> bool: ...
    @property
    def ts_event(self) -> int: ...
    @property
    def ts_init(self) -> int: ...
    def __new__(
        cls,
        symbol: str,
        value: typing.Any,
        full_accuracy_value: typing.Any,
        price_timestamp_ms: int,
        message_timestamp_ms: int,
        received_at_ms: typing.Any,
        is_carried_forward: bool,
        ts_event: int,
        ts_init: int,
    ) -> PolymarketRtdsEquityPrice: ...
    def to_json(self) -> str: ...
    @classmethod
    def from_json(cls, data: typing.Any) -> typing.Any: ...

@typing.final
class PolymarketUpDownEventSlugConfig:
    @property
    def assets(self) -> list[str]: ...
    @property
    def interval_mins(self) -> int: ...
    @property
    def periods(self) -> int: ...
    @property
    def start_offset_periods(self) -> int: ...
    def __init__(
        self,
        assets: typing.Sequence[str] | None = None,
        interval_mins: int | None = None,
        periods: int | None = None,
        start_offset_periods: int | None = None,
    ) -> None: ...

@typing.final
class PolymarketDataLoader:
    @staticmethod
    def query_market_by_slug(
        slug: str, base_url_gamma: str | None = None, timeout_secs: int = 10
    ) -> typing.Any: ...
    @staticmethod
    def query_market_details(
        condition_id: str, base_url_http: str | None = None, timeout_secs: int = 10
    ) -> typing.Any: ...
    @staticmethod
    def query_event_by_slug(
        slug: str, base_url_gamma: str | None = None, timeout_secs: int = 10
    ) -> typing.Any: ...
    @staticmethod
    def query_markets(
        filters: typing.Any | None = None, base_url_gamma: str | None = None, timeout_secs: int = 10
    ) -> typing.Any: ...
    @staticmethod
    def query_events(
        filters: typing.Any | None = None, base_url_gamma: str | None = None, timeout_secs: int = 10
    ) -> typing.Any: ...
    @staticmethod
    def query_tags(base_url_gamma: str | None = None, timeout_secs: int = 10) -> typing.Any: ...
    @staticmethod
    def query_search(
        query: str,
        events_status: str | None = None,
        events_tag: str | None = None,
        sort: str | None = None,
        ascending: bool | None = None,
        limit_per_type: int | None = None,
        page: int | None = None,
        keep_closed_markets: bool | None = None,
        base_url_gamma: str | None = None,
        timeout_secs: int = 10,
    ) -> typing.Any: ...
    @staticmethod
    def from_market_slug(
        slug: str,
        token_index: int = 0,
        base_url_http: str | None = None,
        base_url_gamma: str | None = None,
        base_url_data_api: str | None = None,
        timeout_secs: int = 10,
    ) -> typing.Any: ...
    @staticmethod
    def from_event_slug(
        slug: str,
        token_index: int = 0,
        base_url_http: str | None = None,
        base_url_gamma: str | None = None,
        base_url_data_api: str | None = None,
        timeout_secs: int = 10,
    ) -> typing.Any: ...
    @property
    def instrument(self) -> model.BinaryOption: ...
    @property
    def token_id(self) -> str: ...
    @property
    def condition_id(self) -> str: ...
    @property
    def resolution_metadata(self) -> typing.Any: ...
    def load_trades(
        self,
        start: datetime.datetime | None = None,
        end: datetime.datetime | None = None,
        limit: int | None = None,
    ) -> typing.Any: ...

@typing.final
class PolymarketPositionClient:
    def __init__(
        self,
        private_key: str | None = None,
        funder: str | None = None,
        relayer_api_key: str | None = None,
        relayer_api_key_address: str | None = None,
        base_url_relayer: str | None = None,
        base_url_clob: str | None = None,
        timeout_secs: int | None = None,
        proxy_url: str | None = None,
        base_url_rpc: str | None = None,
    ) -> None: ...
    def split_position(self, condition_id: str, amount: decimal.Decimal) -> typing.Any: ...
    def merge_positions(self, condition_id: str, amount: decimal.Decimal) -> typing.Any: ...
    def redeem_positions(self, condition_id: str) -> typing.Any: ...

@typing.final
class PolymarketPositionOutcome:
    @property
    def status(self) -> str: ...
    @property
    def transaction_id(self) -> str: ...
    @property
    def transaction_hash(self) -> str | None: ...
    @property
    def error_msg(self) -> str | None: ...

@typing.final
class PolymarketPositionTransaction:
    @property
    def transaction_id(self) -> str: ...
    def wait(self) -> typing.Any: ...

@typing.final
class SignatureType(enum.Enum):
    Eoa = ...
    PolyProxy = ...
    PolyGnosisSafe = ...
    Poly1271 = ...
