from __future__ import annotations

from app.features.personalized_reco.scoring.types import Scene, ScoreConfig


_DEFAULTS: dict[Scene, ScoreConfig] = {
    # 来源：设计说明文档/個性化推薦算法規則.md（V1 建议权重）
    "feed": ScoreConfig(
        w_need=0.35,
        w_emotion=0.20,
        w_stage=0.15,
        w_context=0.30,
        # Feed 默认不启用不确定性惩罚（可按需开启）
        enable_uncertainty_penalty=False,
    ),
    "push": ScoreConfig(
        w_need=0.45,
        w_emotion=0.35,
        w_stage=0.15,
        w_context=0.05,
        # Push 默认启用不确定性惩罚
        enable_uncertainty_penalty=True,
    ),
    "widget": ScoreConfig(
        w_need=0.25,
        w_emotion=0.25,
        w_stage=0.30,
        w_context=0.20,
        # Widget 默认不启用不确定性惩罚（可按需开启）
        enable_uncertainty_penalty=False,
        widget_emotion_soft_range=(0.4, 0.8),
        widget_emotion_penalty_gamma=0.25,
    ),
}


def get_default_config(scene: Scene) -> ScoreConfig:
    """
    获取指定场景的默认打分参数（返回副本，避免被意外修改）。
    """

    base = _DEFAULTS[scene]
    return ScoreConfig.model_validate(base.model_dump())

