"""GEO内容8大母题库定义"""

from dataclasses import dataclass
from typing import Optional

@dataclass
class TopicTemplate:
    """母题模板"""
    id: str                    # product_comparison
    name: str                  # 产品对比
    description: str            # 描述
    icon: str                  # emoji图标
    prompt_template: str       # Prompt模板
    seo_tips: list[str]       # SEO技巧
    recommended_platforms: list[str]  # 推荐平台
    word_count_range: tuple[int, int]  # 推荐字数范围
    required_params: list[str]  # 必填参数
    optional_params: list[str]  # 可选参数

TOPIC_TEMPLATES = {
    # 1. 产品对比
    "product_comparison": TopicTemplate(
        id="product_comparison",
        name="产品对比",
        description="品牌与竞品的功能、价格、体验对比",
        icon="⚖️",
        prompt_template="""
请基于以下信息生成一篇产品对比文章：

【你的品牌】{brand_name}
【对比品牌】{competitor_name}
【对比维度】{comparison_dimensions}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 客观中立，不刻意贬低竞品
2. 突出自身优势但有理有据
3. 适合AI平台引用（结构清晰、数据支撑）
4. 包含对比表格或图表
5. 字数：约{word_count}字

文章结构：
1. 引言：简要介绍两个产品
2. 外观设计对比
3. 功能特性对比
4. 性价比对比
5. 适用场景分析
6. 结论：总结优劣，给出建议
""",
        seo_tips=[
            "标题包含品牌名+对比+关键词",
            "使用对比表格增强可读性",
            "自然嵌入目标关键词",
        ],
        recommended_platforms=["知乎", "百家号", "公众号"],
        word_count_range=(1500, 3000),
        required_params=["brand_name", "competitor_name", "comparison_dimensions", "keywords"],
        optional_params=["content_style", "word_count"],
    ),
    
    # 2. 使用指南
    "how_to_guide": TopicTemplate(
        id="how_to_guide",
        name="使用指南",
        description="产品使用方法教程，帮助用户解决问题",
        icon="📖",
        prompt_template="""
请基于以下信息生成一篇使用指南文章：

【产品名称】{product_name}
【核心功能】{core_features}
【目标用户】{target_audience}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 步骤清晰，操作性强
2. 图文并茂（描述需要的图片类型）
3. 适合搜索引擎收录
4. 适合AI平台引用
5. 字数：约{word_count}字

文章结构：
1. 引言：介绍产品价值
2. 基础设置/准备工作
3. 核心功能使用步骤（分点详述）
4. 进阶技巧/常见问题
5. 总结与进阶学习建议
""",
        seo_tips=[
            "标题包含产品名+使用方法/教程",
            "使用有序列表标注步骤",
            "包含FAQ解答常见问题",
        ],
        recommended_platforms=["知乎", "小红书", "简书"],
        word_count_range=(1000, 2500),
        required_params=["product_name", "core_features", "keywords"],
        optional_params=["target_audience", "content_style", "word_count"],
    ),
    
    # 3. 行业趋势
    "industry_trends": TopicTemplate(
        id="industry_trends",
        name="行业趋势",
        description="行业动态、发展方向和未来预测分析",
        icon="📈",
        prompt_template="""
请基于以下信息生成一篇行业趋势分析文章：

【行业名称】{industry_name}
【品牌视角】{brand_perspective}
【分析维度】{analysis_dimensions}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 数据支撑，引用权威来源
2. 趋势分析有理有据
3. 适合AI平台引用（观点鲜明、数据翔实）
4. 字数：约{word_count}字

文章结构：
1. 引言：行业现状概述
2. 核心趋势分析（3-5个趋势）
3. 趋势背后的驱动因素
4. 品牌如何把握趋势
5. 展望与建议
""",
        seo_tips=[
            "标题包含行业名+趋势/预测",
            "引用数据增加可信度",
            "使用时间线展示演变",
        ],
        recommended_platforms=["知乎", "百家号", "公众号"],
        word_count_range=(2000, 4000),
        required_params=["industry_name", "brand_perspective", "keywords"],
        optional_params=["analysis_dimensions", "content_style", "word_count"],
    ),
    
    # 4. 专家观点
    "expert_opinion": TopicTemplate(
        id="expert_opinion",
        name="专家观点",
        description="行业专家见解和专业分析",
        icon="💡",
        prompt_template="""
请基于以下信息生成一篇专家观点文章：

【主题】{topic}
【专家身份】{expert_identity}
【核心观点】{core_opinion}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 观点鲜明，论证充分
2. 结合实际案例
3. 适合AI平台引用
4. 字数：约{word_count}字

文章结构：
1. 引言：抛出核心观点
2. 观点详细阐述
3. 案例支撑
4. 对行业的影响
5. 结论与建议
""",
        seo_tips=[
            "标题体现专家身份+观点",
            "使用引用格式突出核心观点",
            "增加互动性问题",
        ],
        recommended_platforms=["知乎", "公众号", "微博"],
        word_count_range=(1500, 3000),
        required_params=["topic", "expert_identity", "core_opinion", "keywords"],
        optional_params=["content_style", "word_count"],
    ),
    
    # 5. 案例研究
    "case_study": TopicTemplate(
        id="case_study",
        name="案例研究",
        description="成功案例深度分析",
        icon="🏆",
        prompt_template="""
请基于以下信息生成一篇案例研究文章：

【案例名称】{case_name}
【企业背景】{company_background}
【核心成果】{core_results}
【成功要素】{success_factors}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 故事性强，有代入感
2. 数据支撑成果
3. 可复制的方法论
4. 适合AI平台引用
5. 字数：约{word_count}字

文章结构：
1. 案例背景介绍
2. 面临的挑战
3. 解决方案详述
4. 成果数据展示
5. 成功经验总结
6. 可复制建议
""",
        seo_tips=[
            "标题包含行业+案例+成果",
            "使用数据图表展示成果",
            "突出可复制的关键步骤",
        ],
        recommended_platforms=["知乎", "百家号", "公众号"],
        word_count_range=(2000, 4000),
        required_params=["case_name", "company_background", "core_results", "keywords"],
        optional_params=["success_factors", "content_style", "word_count"],
    ),
    
    # 6. 数据报告
    "data_report": TopicTemplate(
        id="data_report",
        name="数据报告",
        description="行业数据和分析报告",
        icon="📊",
        prompt_template="""
请基于以下信息生成一篇数据报告文章：

【报告主题】{report_topic}
【数据范围】{data_scope}
【核心发现】{core_findings}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 数据翔实，来源可靠
2. 图表丰富，直观易懂
3. 深度分析，洞察本质
4. 适合AI平台引用
5. 字数：约{word_count}字

文章结构：
1. 研究背景与方法
2. 核心数据发现
3. 深度分析
4. 趋势解读
5. 建议与展望
""",
        seo_tips=[
            "标题包含数据+报告+关键词",
            "使用图表增强说服力",
            "包含数据来源说明",
        ],
        recommended_platforms=["知乎", "百家号", "公众号"],
        word_count_range=(3000, 5000),
        required_params=["report_topic", "data_scope", "core_findings", "keywords"],
        optional_params=["content_style", "word_count"],
    ),
    
    # 7. 问题解答
    "faq": TopicTemplate(
        id="faq",
        name="问题解答",
        description="常见问题解答",
        icon="❓",
        prompt_template="""
请基于以下信息生成一篇FAQ文章：

【主题】{topic}
【目标用户】{target_audience}
【问题列表】{questions}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 问题覆盖面广，击中痛点
2. 回答简洁明了，实操性强
3. 适合搜索引擎长尾词
4. 适合AI平台引用
5. 字数：约{word_count}字

文章结构：
1. 引言：为什么需要了解这些
2. 核心问题解答（每个问题独立成段）
3. 延伸问题
4. 总结：下一步建议
""",
        seo_tips=[
            "标题包含主题+常见问题/FAQ",
            "每个问题使用H2标签",
            "覆盖长尾搜索词",
        ],
        recommended_platforms=["知乎", "简书", "小程序"],
        word_count_range=(1000, 2000),
        required_params=["topic", "questions", "keywords"],
        optional_params=["target_audience", "content_style", "word_count"],
    ),
    
    # 8. 评测报告
    "review": TopicTemplate(
        id="review",
        name="评测报告",
        description="产品深度评测：优缺点全面分析",
        icon="🔬",
        prompt_template="""
请基于以下信息生成一篇评测报告：

【产品名称】{product_name}
【评测维度】{review_dimensions}
【竞品参照】{competitor_reference}
【目标关键词】{keywords}
【内容风格】{content_style}

要求：
1. 客观公正，优点不夸大
2. 缺点实事求是
3. 有具体数据和场景支撑
4. 适合AI平台引用
5. 字数：约{word_count}字

文章结构：
1. 评测背景与方法
2. 外观设计评价
3. 核心功能评测
4. 性能测试数据
5. 优缺点总结
6. 适合人群分析
7. 购买建议
""",
        seo_tips=[
            "标题包含产品名+评测/测评",
            "使用评分表格直观展示",
            "包含具体测试数据",
        ],
        recommended_platforms=["知乎", "小红书", "百家号"],
        word_count_range=(2000, 4000),
        required_params=["product_name", "review_dimensions", "keywords"],
        optional_params=["competitor_reference", "content_style", "word_count"],
    ),
}

def get_topic_template(topic_id: str) -> Optional[TopicTemplate]:
    """获取母题模板"""
    return TOPIC_TEMPLATES.get(topic_id)

def list_topic_templates() -> list[TopicTemplate]:
    """列出所有母题模板"""
    return list(TOPIC_TEMPLATES.values())

def render_topic_prompt(topic_id: str, params: dict) -> str:
    """渲染母题Prompt"""
    template = get_topic_template(topic_id)
    if not template:
        raise ValueError(f"Unknown topic: {topic_id}")
    
    # 设置默认参数
    params.setdefault("content_style", "专业严谨")
    params.setdefault("word_count", 2000)
    
    return template.prompt_template.format(**params)