from typing import NotRequired, TypedDict

from ldnode.calculator.schemas.enumerations import SecurityType


class GlobalBacktestSettings(TypedDict):
    """全局回测设置（所有策略共享）"""

    start_date: str    # 回测开始日期，格式 YYYY-MM-DD
    end_date: str      # 回测结束日期，格式 YYYY-MM-DD
    initial_capital: float  # 初始资金
    commission: float  # 手续费（单边，如 0.001 表示万一）
    benchmark: str     # 基准标识（传给各策略的 benchmark 字段）


class StrategyEntry(TypedDict):
    """单个待比较策略的配置"""

    security_type: SecurityType  # 品种类型（1=CB 可转债，2=STK 股票，3=ETF）
    label: str        # 策略展示名称，同一请求内必须唯一
    core_config: dict  # 策略核心配置（不含 global settings，由调用方填写）


class StrategyCorrelationParameters(TypedDict):
    """策略相关性分析入参"""

    task_id: str                        # 任务 ID
    global_settings: GlobalBacktestSettings  # 全局回测设置
    strategies: list[StrategyEntry]     # 待比较的策略列表，至少 2 个
    rolling_period: int                 # 滚动相关系数的窗口大小（单位：期）
    storage_keys: NotRequired[dict]     # 可选：自定义 COS 存储路径
