"""品类相关 craft 配置（灵感 F1）。

`GENRE_CRAFT`：题材 → 「语域/节奏/钩子偏好/默认字数区间/常见套路」的**文本片段**。
品类无关内核（show-don't-tell / 对话个性化 / 反注水原则）在 `write_craft.md`；
本表只装**随题材而异**的片段，由 assemble 按 `project.genre` 选片段注入缓存前缀。

字数写成**区间参考**（软引导，非每章硬目标）——具体篇幅仍按情节功能分配（见内核）。
键与前端 wizard 的 GENRES 预设对齐（玄幻/仙侠/都市/科幻/历史/悬疑）＋常见言情；
自由填写的题材命不中即优雅返回 None（不注入片段），不报错。
"""

from __future__ import annotations

from typing import Final

# 每条片段是灵活提示，不是穷举清单——覆盖语域/节奏/钩子/字数/套路等维度，供模型自行取舍。
GENRE_CRAFT: Final[dict[str, str]] = {
    "玄幻": (
        "语域偏热血爽快、画面感强；节奏偏快，冲突密集，实力成长线要清晰可感。"
        "钩子偏好等级压制、打脸反转、机缘奇遇与悬念前置。"
        "单章篇幅参考约 2500–3500 字，按情节功能弹性调整。"
        "常见套路：升级流、扮猪吃虎、系统/金手指、宗门家族争斗——用得要有新意，别照搬。"
    ),
    "仙侠": (
        "语域偏古雅大气，兼顾意境与热血；节奏中到快，以境界突破为张力节点。"
        "钩子偏好机缘造化、道心考验、恩怨情仇与天骄争锋。"
        "单章篇幅参考约 2500–3500 字，按情节功能弹性调整。"
        "常见套路：修真等级、飞升渡劫、师门情义、逆境翻盘——古意要真、别堆砌辞藻。"
    ),
    "都市": (
        "语域偏现代口语、贴近生活、爽感直接；节奏快，即时反馈要强。"
        "钩子偏好装逼打脸、身份反差、隐藏实力与逆袭翻身。"
        "单章篇幅参考约 2000–3000 字（移动端碎片阅读），按情节功能弹性调整。"
        "常见套路：扮猪吃虎、隐藏身份、都市异能、商战权斗——落点要接地气。"
    ),
    "科幻": (
        "语域偏冷静、有逻辑感、由设定驱动；节奏偏中，重悬念与推演，慎防设定倾泻。"
        "钩子偏好谜题危机、科技奇观与命运抉择。"
        "单章篇幅参考约 2500–3500 字，按情节功能弹性调整。"
        "常见套路：末世、星际、赛博、时间循环——设定服务剧情，避免大段科普打断叙事。"
    ),
    "历史": (
        "语域偏厚重考究、代入感强；节奏偏中，以权谋博弈与人物弧线为主。"
        "钩子偏好权谋算计、命运转折与家国大势。"
        "单章篇幅参考约 3000–4000 字，按情节功能弹性调整。"
        "常见套路：穿越架空、争霸天下、朝堂权谋、种田发展——细节要经得起推敲。"
    ),
    "悬疑": (
        "语域偏冷峻克制、讲究信息控制；节奏张弛有度，靠悬念与反转拉动。"
        "钩子偏好谜题、危险迫近、误导与真相错位。"
        "单章篇幅参考约 2500–3500 字，按情节功能弹性调整。"
        "常见套路：多线叙事、伏笔回收、层层反转、不可靠叙述——保持信息差，慎过早揭底。"
    ),
    "言情": (
        "语域偏细腻、注重情绪张力与关系互动；节奏偏中，以情感推拉为主线。"
        "钩子偏好暧昧拉扯、误会错过、情感转折与命运羁绊。"
        "单章篇幅参考约 2500–3500 字，按情节功能弹性调整。"
        "常见套路：先婚后爱、破镜重圆、双向奔赴、追妻火葬场——情绪外化于互动细节，别空喊。"
    ),
}


def genre_craft_fragment(genre: str | None) -> str | None:
    """按题材取 craft 片段；未指定或命不中预设题材时返回 None（不注入、不报错）。"""
    if not genre:
        return None
    return GENRE_CRAFT.get(genre)
