"""兼容层：选约逻辑已迁至 strategy.selection；OKX 解析在 exchange.okx.parse。"""

from __future__ import annotations

from typing import Any

from ..exchange.expiry import expiry_ms_from_ymd
from ..exchange.okx.parse import (
    parse_option_inst_id,
    safe_float,
)
from ..exchange.types import OptionPair
from ..strategy.selection import (
    hours_until_expiry,
    list_eligible_expiry_ymds as _list_eligible,
    next_session_expiry_ymd,
    option_leverage,
    pick_atm_strike,
    select_option_pair as _select_pair,
    normalize_contracts,
)

__all__ = [
    "expiry_ms_from_ymd",
    "hours_until_expiry",
    "list_eligible_expiry_ymds",
    "next_session_expiry_ymd",
    "option_leverage",
    "parse_option_inst_id",
    "pick_atm_strike",
    "safe_float",
    "select_option_pair",
]


def select_option_pair(
    instruments: list[dict[str, Any]],
    *,
    mark_px: float,
    expiry_ymd: str | None = None,
    min_hours: float | None = None,
    now=None,
    option_side: str | None = None,
) -> OptionPair | None:
    contracts = normalize_contracts(instruments)
    return _select_pair(
        contracts,
        mark_px=mark_px,
        expiry_ymd=expiry_ymd,
        min_hours=min_hours,
        now=now,
        option_side=option_side,
    )


def list_eligible_expiry_ymds(
    instruments: list[dict[str, Any]],
    *,
    min_hours: float,
    now=None,
) -> list[str]:
    return _list_eligible(normalize_contracts(instruments), min_hours=min_hours, now=now)
