#!/usr/bin/env python3
"""
手动选题 → 完整生产流程（封面 + 内页）

用法:
  cd ~/project && ~/project/we-mp-rss-main/venv/bin/python3 single_topic_injection.py

原理: 绕过 daily_xhs_topics.py 的 DeepSeek AI 选题生成，直接用手工构造的
      topic dict 调用 generate_cover() 和 generate_inner_page() 渲染图片。

输出:
  ~/.hermes/articles/YYYY-MM-DD/
    ├── YYYYMMDD-cover-{idx}.png   封面
    ├── YYYYMMDD-inner-{idx}-1.png 内页1
    ├── YYYYMMDD-inner-{idx}-2.png 内页2
    └── YYYY-MM-DD-选题{idx}.md    完整文案+结构

修改: 修改下方 topic 变量中的内容后即可运行。需要调整的字段:
  - 标题行1/2/3 (封面三行文字)
  - 标签 (六选一)
  - 文案 (小红书正文)
  - 内页 (页数组, 每页包含标题+区块列表)
"""
import sys
from pathlib import Path
from datetime import datetime, timezone, timedelta

CST = timezone(timedelta(hours=8))
PROJECT_ROOT = Path("/home/ubuntu/project")
ARTICLES_DIR = Path.home() / ".hermes" / "articles"

sys.path.insert(0, str(PROJECT_ROOT / "scripts"))
from daily_xhs_topics import generate_cover, generate_inner_page

# ═══════════════════════════════════════════════════════════
# 修改这里 ↓
# ═══════════════════════════════════════════════════════════

topic = {
    "选题": "选题说明（一句话）",
    "标题行1": "第1行白",
    "标题行2": "第2行白",
    "标题行3": "第3行橙",
    "标签": "考生服务",  # 六选一: 政策资讯|热点话题|院校介绍|考生服务|考前辅导|专业介绍
    "标签列表": ["#标签1", "#标签2", "#标签3", "#标签4", "#标签5"],
    "选题理由": "...",
    "文案": (
        "🚨钩子开头（制造好奇或焦虑）\n\n"
        "正文短段落 + emoji 装饰\n"
        "每段不超过3行\n\n"
        "结尾 CTA 互动引导\n"
    ),
    "内页": [
        {
            "标题": "第1页标题 ≤12字",
            "区块": [
                {"类型": "引言", "内容": "一句话点明本页价值"},
                # 8种区块类型: 引言/数据卡/表格/分析/行动/步骤/清单/对比条
                # 每种区块的内容格式见下方示例
            ]
        },
        {
            "标题": "第2页标题",
            "区块": []
        }
    ]
}

# ═══════════════════════════════════════════════════════════
# 区块类型参考（删掉注释后填入上方 topic）
# ═══════════════════════════════════════════════════════════
#
# {"类型": "引言", "内容": "一句话点明本页价值..."},
#
# {"类型": "数据卡", "内容": [
#     {"标签": "指标名", "数值": "数字", "说明": "一句话解读"},
#     {"标签": "指标名2", "数值": "数字2", "说明": "一句话解读2"},
# ]},
#
# {"类型": "表格", "内容": [
#     {"标签": "行1", "数值": "值1", "说明": "补充说明"},
#     {"标签": "行2", "数值": "值2", "说明": "补充说明"},
# ]},
#
# {"类型": "分析", "内容": "对数据做解读的文字..."},
#
# {"类型": "行动", "内容": [
#     {"标签": "行动1", "说明": "具体做什么"},
#     {"标签": "行动2", "说明": "具体做什么"},
# ]},
#
# {"类型": "步骤", "内容": [
#     {"标签": "①", "说明": "第一步做什么"},
#     {"标签": "②", "说明": "第二步做什么"},
# ]},
#
# {"类型": "清单", "内容": [
#     {"标签": "必做/避坑", "说明": "详细说明"},
#     {"标签": "另一个", "说明": "详细说明"},
# ]},
#
# {"类型": "对比条", "内容": [
#     {"标签": "A项", "数值": "286"},
#     {"标签": "B项", "数值": "246"},
# ]},

# ═══════════════════════════════════════════════════════════
# 执行渲染（不需要修改以下代码）
# ═══════════════════════════════════════════════════════════

print("🎨 开始生产...")
today = datetime.now(CST).strftime("%Y-%m-%d")
topic_dir = ARTICLES_DIR / today
topic_dir.mkdir(parents=True, exist_ok=True)

idx = 1
for f in sorted(topic_dir.glob("*.png")):
    name = f.stem
    parts = name.split("-")
    if len(parts) >= 2 and parts[0] == today.replace("-", ""):
        try:
            idx = max(idx, int(parts[-1]) + 1)
        except:
            pass

print(f"📁 输出目录: {topic_dir} (序号 {idx})")

cover_path = generate_cover(topic, str(topic_dir), index=idx)
inner_paths = generate_inner_page(topic, str(topic_dir), index=idx)
if isinstance(inner_paths, str):
    inner_paths = [inner_paths]

# save markdown
md_path = topic_dir / f"{today}-选题{idx}.md"
lines = [
    f"# 小红书选题 #{idx}",
    f"**日期**: {today}",
    f"**选题**: {topic['选题']}",
    f"**标签**: {topic['标签']}",
    f"",
    f"## 封面",
    f"**{topic['标题行1']} | {topic['标题行2']} | {topic['标题行3']}**",
]
if cover_path:
    lines.append(f"**📱 封面图**: `{cover_path}`")
if inner_paths:
    for ip in inner_paths:
        lines.append(f"**📄 内页图**: `{ip}`")
lines.append(f"")
lines.append(f"## 小红书文案")
lines.append(f"")
lines.append(topic.get("文案", ""))
lines.append(f"")
tags = topic.get("标签列表", [])
if tags:
    lines.append(f"**🏷️ 标签**: {' '.join(tags)}")
lines.append(f"")
lines.append("---")
for i, page in enumerate(topic.get("内页", [])):
    lines.append(f"### 内页{i+1}: {page.get('标题', '?')}")
    for b in page.get("区块", []):
        btype = b.get("类型") or b.get("type", "?")
        bcontent = b.get("内容") or b.get("content", "")
        if isinstance(bcontent, list):
            lines.append(f"- **{btype}** ({len(bcontent)}项)")
        else:
            lines.append(f"- **{btype}**: {str(bcontent)[:100]}")

md_path.write_text("\n".join(lines), encoding="utf-8")
print(f"📝 Markdown: {md_path}")
print(f"✅ 完成！封面: {cover_path}")
for ip in (inner_paths or []):
    print(f"   内页: {ip}")
