"""应用 8：维客线索整理 Prompt 模板。

接收 App3（消费分析）和 App6（备注分析）的全部线索，
整合去重后输出统一维客线索。

分类标签限定 6 个枚举值（与 member_retention_clue CHECK 约束一致）：
客户基础、消费习惯、玩法偏好、促销偏好、社交关系、重要反馈。

合并规则：
- 相似线索合并，providers 以逗号分隔
- 其余线索原文返回
- 最小改动原则
"""

from __future__ import annotations

import json


def build_prompt(context: dict) -> list[dict]:
    """构建 App8 维客线索整理 Prompt。

    Args:
        context: 包含以下字段：
            - site_id: int
            - member_id: int
            - app3_clues: list[dict] — App3 产出的线索列表
            - app6_clues: list[dict] — App6 产出的线索列表
            - app3_generated_at: str | None — App3 线索生成时间
            - app6_generated_at: str | None — App6 线索生成时间

    Returns:
        消息列表 [{"role": "system", ...}, {"role": "user", ...}]
    """
    member_id = context["member_id"]
    app3_clues = context.get("app3_clues", [])
    app6_clues = context.get("app6_clues", [])
    app3_generated_at = context.get("app3_generated_at")
    app6_generated_at = context.get("app6_generated_at")

    system_content = {
        "task": "整合去重来自消费分析和备注分析的维客线索，输出统一线索列表。",
        "app_id": "app8_consolidation",
        "rules": {
            "category_enum": [
                "客户基础", "消费习惯", "玩法偏好",
                "促销偏好", "社交关系", "重要反馈",
            ],
            "merge_strategy": (
                "相似线索合并为一条，providers 以逗号分隔（如 '系统,张三'）；"
                "不相似的线索原文保留，不做修改。最小改动原则。"
            ),
            "output_format": {
                "clues": [
                    {
                        "category": "枚举值（6 选 1）",
                        "summary": "一句话摘要",
                        "detail": "详细说明",
                        "emoji": "表情符号",
                        "providers": "提供者（逗号分隔）",
                    }
                ]
            },
        },
        "input": {
            "app3_clues": {
                "source": "消费数据分析（App3）",
                "generated_at": app3_generated_at,
                "clues": app3_clues,
            },
            "app6_clues": {
                "source": "备注分析（App6）",
                "generated_at": app6_generated_at,
                "clues": app6_clues,
            },
        },
    }

    user_content = (
        f"请整合会员 {member_id} 的维客线索。\n"
        "输入包含两个来源的线索：App3（消费数据分析）和 App6（备注分析）。\n"
        "规则：\n"
        "1. 相似线索合并为一条，providers 字段以逗号分隔多个提供者\n"
        "2. 不相似的线索原文保留\n"
        "3. category 必须是：客户基础、消费习惯、玩法偏好、促销偏好、社交关系、重要反馈 之一\n"
        "4. 每条线索包含 category、summary、detail、emoji、providers 五个字段\n"
        "5. 最小改动原则，尽量保留原始表述"
    )

    return [
        {"role": "system", "content": json.dumps(system_content, ensure_ascii=False)},
        {"role": "user", "content": user_content},
    ]
