#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
幸元电气 全网推广 · AI 批量内容生成脚本
============================================

使用方法：
1. 安装依赖: pip install openai requests
2. 设置 API Key (任选一家):
   - 智谱 BigModel (https://bigmodel.cn): 免费 GLM-4
   - 阿里 DashScope (https://dashscope.aliyun.com): 免费 qwen-turbo
   - DeepSeek (https://platform.deepseek.com): ¥1/百万tokens 超便宜
   - OpenAI: GPT-4o mini ($0.15/百万tokens)
3. python ai-batch-content-generator.py

输出：
- articles.md (20 篇行业科普文章)
- qa-content.md (50 条问答)
- video-scripts.md (20 条短视频脚本)
- product-descriptions.md (20 个产品描述)
- social-posts.md (30 个社媒帖子)
"""
import os
import sys
import json
import time
import argparse
from datetime import datetime

# ============================================================
# 配置 (只需配置这里，3 选 1)
# ============================================================

# 选项 A: DeepSeek (推荐 - 国内直连，便宜 ¥1/百万tokens)
DEEPSEEK_API_KEY = ""
DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1"

# 选项 B: 智谱 BigModel (免费 GLM-4-Flash)
ZHIPU_API_KEY = ""
ZHIPU_BASE_URL = "https://open.bigmodel.cn/api/paas/v4"

# 选项 C: 阿里 DashScope (免费 qwen-turbo)
DASHSCOPE_API_KEY = ""
DASHSCOPE_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"

# 选项 D: OpenAI
OPENAI_API_KEY = ""
OPENAI_BASE_URL = "https://api.openai.com/v1"

# ============================================================
# 公司信息
# ============================================================
COMPANY = {
    "name": "幸元电气（苏州）有限公司",
    "en_name": "Xingyuan Electric (Suzhou) Co., Ltd.",
    "location": "江苏省苏州市吴江区黎里镇",
    "phone": "152-2123-4007",
    "wechat": "15221234007",
    "email": "sale@xingyuanep.com",
    "website": "https://www.xingyuanep.com",
    "established": "2024",
    "capital": "200万元（实缴）",
    "trademark": "幸元®（注册申请中/已注册）",
    "products": [
        "机柜钣金外壳（仿威图机柜、九折型材柜、十六折型材柜、PS柜、网络机柜、控制柜、机箱）",
        "新能源配套（储能柜体、充电桩壳体、电池架）",
        "电气成套设备（高低压开关柜、配电箱、PLC控制柜、集装箱式电气房）",
        "特种行业钣金（半导体特气柜、医疗设备外壳、卡车工具箱）",
        "激光切割代加工服务"
    ],
    "equipment_count": "20+台",
    "industries": ["新能源", "电力", "半导体", "特气", "工业自动化", "通信", "设备制造", "特种车辆"]
}

# ============================================================
# 提示词模板
# ============================================================

PROMPT_ARTICLES = f"""你是 B2B 行业资深内容策划，擅长撰写工程师视角的技术科普文。

公司信息：
{json.dumps(COMPANY, ensure_ascii=False, indent=2)}

任务：为我公司「{COMPANY['name']}」撰写 20 篇百度百家号 / 公众号 / 头条号通用的行业科普文章。

要求：
1. 标题含 SEO 关键词，覆盖：'机柜厂家'、'机柜钣金'、'储能柜体'、'充电桩壳体'、'仿威图机柜'、'苏州机柜'、'钣金加工'、'机柜外壳'、'机柜选型' 等
2. 每篇 1500-2500 字，包含 3-5 个 H2 小标题（用 ## 标记）
3. 工程师视角：技术性强、可读性高、数据具体、案例真实
4. 每篇末尾自然出现"幸元电气"作为解决方案提供商（非硬广，自然植入）
5. 每篇配 3-5 张图片位置标注（用 [图片：xxx] 标记）
6. 标题列表（你可以微调）：
   - 机柜钣金外壳加工全过程详解（含设备、工艺、检验）
   - 9 折型材柜 vs 16 折型材柜：哪个更适合你的项目？
   - 储能柜体的 IP 防护等级设计与选型指南
   - 充电桩壳体材质对比：钣金/铝合金/塑料
   - 苏州机柜厂家如何选择？5 个硬指标帮你避坑
   - 仿威图机柜和普通机柜的本质区别（采购必看）
   - CNC 加工 vs 激光切割：机柜下料工艺对比
   - 激光焊接在机柜制造中的应用
   - 储能集装箱的结构设计要点
   - 半导体特气机柜的特殊要求
   - 机柜表面处理：喷塑/喷漆/镀锌怎么选？
   - 机柜散热设计：从风冷到液冷
   - 集装箱式电气房的成本分析
   - PLC 控制柜的标准化设计
   - 充电桩壳体设计的 7 个常见错误
   - 机柜的 EMC 电磁兼容设计
   - 机柜 IP65 防护的实现工艺
   - 配电柜 vs 控制柜 vs 开关柜的区别
   - 苏州机柜厂家报价差异大的真实原因
   - 钣金机柜的快速交付实践

输出格式：纯 Markdown，禁止 ``` 包裹。每篇用 --- 分隔。每篇以 H1 标题开头。"""

PROMPT_QA = f"""你是 B2B 营销专家，特别擅长撰写百度知道 / 知乎 / 360 问答的高转化问答。

公司信息：
{json.dumps(COMPANY, ensure_ascii=False, indent=2)}

任务：为我公司「{COMPANY['name']}」生成 50 条百度知道的问答内容。

要求：
1. 格式：每条含【问题】和【回答】两部分
2. 问题分类：
   - 30% 行业科普类（机柜选型、工艺对比、参数解释）
   - 20% 客户痛点类（交期慢、价格不透明、设计能力差、起订量高）
   - 30% 厂家推荐类（必含地区关键词"苏州"、"江苏"、"华东"、"上海周边"）
   - 20% 应用场景类（机房、新能源、充电桩、储能、半导体等）
3. 问题要自然、像真实用户提问，包含"机柜厂家"、"机柜钣金"、"仿威图机柜"、"储能柜体"、"充电桩壳体"等关键词
4. 回答 150-300 字：专业、客观、像 B2B 采购人员口吻
5. 每 10 条问答中，2-3 条自然提及幸元电气（剩 7-8 条保持专业但不出现公司名）
6. 提及幸元电气时，加上官网 https://www.xingyuanep.com

输出格式：纯 Markdown 表格 | # | 分类 | 问题 | 回答 |"""

PROMPT_VIDEOS = f"""你是抖音 / 视频号 / 小红书三平台爆款短视频脚本专家。

公司信息：
{json.dumps(COMPANY, ensure_ascii=False, indent=2)}

任务：为我公司「{COMPANY['name']}」生成 20 条短视频脚本（30-60 秒）。

要求：
1. 风格：车间实拍 + 工厂日常 + 工艺揭秘（B 端老板爱看）
2. 覆盖：激光切割、折弯、焊接、组装、表面处理、入库、出货、设备开箱、对比测试
3. 每条独立脚本包含：
   - 【标题】钩子句，包含关键词
   - 【开头3秒】钩子：疑问/惊叹/数字/痛点
   - 【画面】30 秒画面详细描述（机位、动作、节奏）
   - 【口播】自然口语化（不要书面）
   - 【字幕】配合口播的关键词字幕（关键词用 ⭐ 高亮）
   - 【标签】3-5 个 #话题标签
   - 【封面文字】一句话总结（15字内）
   - 【CTA】引导私信/留言/点赞

参考脚本 1：
【标题】3 折 vs 16 折机柜强度对比，结果你猜不到？
【开头3秒】同样是机柜，价格差距 5 倍，到底有什么区别？
【画面】两组机柜并排、拿重物压、用扳手敲、规格对比图
【口播】大家好我是幸元电气的小张，今天给大家测试一下 9 折型材和 16 折型材的机柜强度差异
【字幕】⭐9 折型材  ⭐16 折型材  ⭐承重测试
【标签】#机柜 #钣金 #仿威图 #苏州制造 #B端采购
【封面】9 折 vs 16 折 强度对比
【CTA】想知道哪种更适合你？留言告诉我们

参考脚本 2：
【标题】车间实拍：储能柜从下料到成品的全过程
【开头3秒】一块钢板变成储能柜，需要几步？
【画面】激光切割、折弯、焊接、喷涂、装配、检测、入库
【口播】我们一起来看看一块 3mm 厚的冷轧钢板是怎么变成一台储能柜的
【字幕】⭐激光切割 ⭐数控折弯 ⭐激光焊接 ⭐喷涂 ⭐装配
【标签】#储能柜 #机柜制造 #新能源 #储能集成
【封面】储能柜诞生全过程
【CTA】更多工艺视频，留言"新能源"立即获取白皮书

每条脚本之间用 --- 分隔。"""

PROMPT_PRODUCTS = f"""你是 B2B 产品经理，擅长撰写技术性产品描述。

公司信息：
{json.dumps(COMPANY, ensure_ascii=False, indent=2)}

任务：为我公司「{COMPANY['name']}」的以下产品生成 20 个 B2B 平台产品描述（用于 1688 / 慧聪网 / 中国制造网）。

产品范围：
1. 仿威图机柜
2. 九折型材机柜
3. 十六折型材机柜
4. PS 组合机柜
5. 网络机柜
6. 服务器机柜
7. 配电柜
8. 控制柜
9. 储能电池柜
10. PCS 储能柜
11. BMS 控制柜
12. 充电桩壳体
13. 电池架
14. PLC 控制柜
15. 高压开关柜
16. 集装箱式电气房
17. 监控操作台
18. 仪表箱
19. 半导体特气机柜
20. 机床外壳

要求：每个产品描述包含：
- 产品名称
- 产品图片位置（用 [图：xxx] 标记，建议 5 张图位置）
- 产品卖点 200 字
- 详细参数表（材质/规格/承重/IP 等级/适用场景）
- 适用行业 / 应用场景
- 厂家实力（幸元电气的优势）
- 联系/询价方式

输出格式：每个产品用 --- 分隔。"""

PROMPT_SOCIAL = f"""你是 B2B 社交媒体运营专家。

公司信息：
{json.dumps(COMPANY, ensure_ascii=False, indent=2)}

任务：为我公司「{COMPANY['name']}」生成 30 条社媒帖子，覆盖抖音 / 小红书 / 视频号 / 知乎。

要求：
- 抖音：50-100 字 + 5-8 个标签
- 小红书：100-200 字笔记体 + 5 个 #标签
- 视频号：60-150 字，朋友圈风格
- 知乎：200-400 字深度短文
- 覆盖：产品介绍、车间日常、行业见解、客户故事、福利活动

每条帖子用 --- 分隔，并注明平台。"""


# ============================================================
# 主生成函数
# ============================================================

def call_ai(prompt: str, model: str = "deepseek-chat", max_tokens: int = 8000) -> str:
    """调用 AI 生成内容 - 支持多家 API"""
    try:
        import requests
    except ImportError:
        print("❌ 需要安装 requests: pip install requests")
        sys.exit(1)

    # 1. DeepSeek
    if DEEPSEEK_API_KEY:
        url = f"{DEEPSEEK_BASE_URL}/chat/completions"
        headers = {
            "Authorization": f"Bearer {DEEPSEEK_API_KEY}",
            "Content-Type": "application/json"
        }
        data = {
            "model": model,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.7,
            "max_tokens": max_tokens
        }
        response = requests.post(url, headers=headers, json=data, timeout=120)
        response.raise_for_status()
        return response.json()["choices"][0]["message"]["content"]

    # 2. OpenAI 兼容（Zhipu, DashScope, OpenAI 都用同样的请求格式）
    elif OPENAI_API_KEY or ZHIPU_API_KEY or DASHSCOPE_API_KEY:
        if ZHIPU_API_KEY:
            base = ZHIPU_BASE_URL
            key = ZHIPU_API_KEY
            model = "glm-4-flash"
        elif DASHSCOPE_API_KEY:
            base = DASHSCOPE_BASE_URL
            key = DASHSCOPE_API_KEY
            model = "qwen-turbo"
        else:
            base = OPENAI_BASE_URL
            key = OPENAI_API_KEY
            model = model

        url = f"{base}/chat/completions"
        headers = {
            "Authorization": f"Bearer {key}",
            "Content-Type": "application/json"
        }
        data = {
            "model": model,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.7,
            "max_tokens": max_tokens
        }
        response = requests.post(url, headers=headers, json=data, timeout=120)
        response.raise_for_status()
        return response.json()["choices"][0]["message"]["content"]

    else:
        print("""
========================================
❌ 请配置 API Key（任选 1 家）
========================================

→ 智谱 BigModel (推荐 - 免费 GLM-4-Flash):
  1. 访问 https://bigmodel.cn 注册
  2. 控制台 → API Keys → 创建 key
  3. 把 key 填到本脚本第 30 行 ZHIPU_API_KEY

→ DeepSeek (国内最便宜，¥1/百万tokens):
  1. 访问 https://platform.deepseek.com 注册
  2. 控制台 → API Keys → 创建 key
  3. 把 key 填到本脚本第 22 行 DEEPSEEK_API_KEY

→ 阿里 DashScope (免费额度 100万 tokens):
  1. 访问 https://dashscope.aliyun.com
  2. 控制台 → API-KEY 管理 → 创建 key
  3. 把 key 填到本脚本第 38 行 DASHSCOPE_API_KEY

→ OpenAI (国际版):
  - 把 key 填到第 46 行 OPENAI_API_KEY

========================================
""")
        sys.exit(1)


def save_output(filename: str, content: str, title: str):
    """保存文件"""
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    full_name = f"{filename.rsplit('.', 1)[0]}_{timestamp}.md"
    with open(full_name, 'w', encoding='utf-8') as f:
        f.write(f"# {title}\n\n")
        f.write(f"> 生成时间：{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
        f.write(f"> 公司：{COMPANY['name']}\n")
        f.write(f"> 请复制以下内容到对应平台发布\n\n")
        f.write("---\n\n")
        f.write(content)
    print(f"✅ 已保存：{full_name} ({len(content):,} 字)")


def main():
    parser = argparse.ArgumentParser(description='幸元电气 AI 批量内容生成')
    parser.add_argument('--type', choices=['all', 'articles', 'qa', 'videos', 'products', 'social'],
                        default='all', help='生成类型')
    parser.add_argument('--articles-count', type=int, default=20, help='生成文章数')
    parser.add_argument('--qa-count', type=int, default=50, help='生成问答数')
    parser.add_argument('--videos-count', type=int, default=20, help='生成视频脚本数')
    parser.add_argument('--products-count', type=int, default=20, help='生成产品数')
    parser.add_argument('--social-count', type=int, default=30, help='生成社媒贴数')
    args = parser.parse_args()

    print(f"""
========================================
🚀 幸元电气 AI 批量内容生成器
========================================
公司：{COMPANY['name']}
类型：{args.type}
========================================
""")

    if args.type in ['all', 'articles']:
        print("\n📝 生成 20 篇行业科普文章...")
        prompt = PROMPT_ARTICLES.replace("20 篇", f"{args.articles_count} 篇")
        content = call_ai(prompt)
        save_output("articles.md", content, f"幸元电气 {args.articles_count} 篇行业科普文章")

    if args.type in ['all', 'qa']:
        print("\n💬 生成 50 条问答...")
        prompt = PROMPT_QA.replace("50 条", f"{args.qa_count} 条")
        content = call_ai(prompt)
        save_output("qa-content.md", content, f"幸元电气 {args.qa_count} 条问答内容")

    if args.type in ['all', 'videos']:
        print("\n🎬 生成 20 条视频脚本...")
        prompt = PROMPT_VIDEOS.replace("20 条", f"{args.videos_count} 条")
        content = call_ai(prompt, max_tokens=10000)
        save_output("video-scripts.md", content, f"幸元电气 {args.videos_count} 条短视频脚本")

    if args.type in ['all', 'products']:
        print("\n🛍️ 生成 20 个产品描述...")
        prompt = PROMPT_PRODUCTS.replace("20 个", f"{args.products_count} 个")
        content = call_ai(prompt)
        save_output("product-descriptions.md", content, f"幸元电气 {args.products_count} 个产品描述")

    if args.type in ['all', 'social']:
        print("\n📱 生成 30 条社媒帖子...")
        prompt = PROMPT_SOCIAL.replace("30 条", f"{args.social_count} 条")
        content = call_ai(prompt)
        save_output("social-posts.md", content, f"幸元电气 {args.social_count} 条社媒帖子")

    print(f"""
========================================
✅ 全部生成完成！

📁 生成的文件：
========================================
""")


if __name__ == "__main__":
    main()
