"""Shared Stock Oracle client helpers for ORB/intraday workflows."""
from __future__ import annotations

from libs.common.config import Settings
from libs.oracle_client import OracleClient


_INTRADAY_ORACLE_MIN_TIMEOUT = 90.0


def intraday_oracle_timeout(settings: Settings) -> float:
    """Return a safer timeout for heavy ORB historical bulk requests.

    Oracle may spend tens of seconds inside upstream Alpaca retries. The global
    default timeout (`stock_oracle_timeout=30`) is fine for lighter PIT lookups
    but too short for ORB multi-ticker intraday batches, which can trigger
    client-side timeouts and singleton retry cascades.
    """
    return max(float(settings.stock_oracle_timeout), _INTRADAY_ORACLE_MIN_TIMEOUT)


def make_intraday_oracle_client(settings: Settings) -> OracleClient:
    """Build an Oracle client tuned for ORB/intraday research workloads."""
    return OracleClient(
        base_url=settings.stock_oracle_url,
        timeout=intraday_oracle_timeout(settings),
    )
