#!/usr/bin/env python3
"""D188 资产图生成脚本 - 即梦 Seedream 4.0"""
import os, json, time, urllib.request, urllib.error

# 读取API密钥
env_path = os.path.expanduser("~/Documents/guanghulab-local-secrets/shortdrama-api.env")
api_key = None
with open(env_path) as f:
    for line in f:
        if line.startswith("VOLCENGINE_API_KEY="):
            api_key = line.strip().split("=", 1)[1]
            break

if not api_key:
    print("❌ 未找到API密钥")
    exit(1)

API_URL = "https://ark.cn-beijing.volces.com/api/v3/images/generations"
HEADERS = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
SAVE_DIR = "/Volumes/JZAO/光湖项目/苏白短剧/生成图片/D188-资产测试"

# 资产列表
ASSETS = [
    {
        "id": "ENV-002",
        "name": "百宗会广场俯瞰全景",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，高空俯瞰视角的巨大广场，广场上人山人海，沿路树立着众多豪华大气的宗门招牌，每个招牌下都有排队的人群，古风修仙建筑风格，热闹繁华的百宗大会场景，整体色调明亮，画面干净，无清晰可读文字，无水印。",
        "negative": "真人，现代元素，俯视角度过低，画面拥挤杂乱，文字清晰可辨，水印，低画质",
    },
    {
        "id": "ENV-003",
        "name": "百宗会天道宗摊位近景",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，百宗会广场的角落位置，立着一块老旧破损的木质牌匾，旁边立着一块简易广告牌，地面有落叶，整体氛围略显寒酸冷清，背景是模糊的广场人群，前景留出人物站位空间，画面干净，无清晰可读文字，无水印。",
        "negative": "豪华建筑，鎏金装饰，人群清晰占比过大，现代材质，文字清晰，水印，低画质",
    },
    {
        "id": "ENV-004",
        "name": "百宗会灵霄宗摊位近景",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，气派非凡的宗门摊位，上方悬挂着豪华牌匾，下方立着数块告示牌，摊位前排着一眼望不到头的长队，周围人群密集，整体华丽精致，与寒酸宗门形成强烈反差，画面干净，无清晰可读文字，无水印。",
        "negative": "破旧简陋，人数稀少，材质廉价，文字清晰可辨，真人面孔，水印，低画质",
    },
    {
        "id": "CHAR-001",
        "name": "苏白-男主",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，18 岁少年男主，面容俊朗清秀，眼神明亮，身穿简约素白长衫，站姿挺拔，双手自然垂于身侧，全身立绘，纯色浅灰背景，服饰干净整洁，少年感十足，画面清晰，无文字，无水印。",
        "negative": "真人写实，苍老油腻，衣物破损，复杂花纹，表情凶狠，背景杂乱，水印，低画质",
    },
    {
        "id": "CHAR-002",
        "name": "诸葛风-男二",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，18 岁少年，面容方正淳朴，眼神隐忍坚毅，身穿粗麻破旧布衣，身形挺拔，全身立绘，纯色浅灰背景，底层少年落魄感，肤色偏健康小麦色，画面清晰，无文字，无水印。",
        "negative": "华丽服饰，油光满面，骄纵神态，锦衣玉食，真人质感，水印，低画质",
    },
    {
        "id": "CHAR-003",
        "name": "王执事-灵霄宗执事",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，中年男子，面色刻薄势利，眼神鄙夷，身穿蓝色修仙执事服，站姿倨傲，全身立绘，纯色浅灰背景，官吏感十足，画面清晰，无文字，无水印。",
        "negative": "年轻俊朗，和善神态，破旧衣物，布衣材质，真人面孔，水印，低画质",
    },
    {
        "id": "CHAR-004",
        "name": "路人龙套组",
        "prompt": "3D 国风仙侠漫剧风格，三渲二卡通渲染，三位不同样貌的成年男性路人，分别穿灰、青、棕三色普通修仙服饰，表情各异，嘲讽、好奇、疑惑，站姿自然，全身立绘，纯色浅灰背景，样貌普通无记忆点，画面清晰，无文字，无水印。",
        "negative": "主角脸，华丽服饰，夸张表情，真人质感，背景杂乱，水印，低画质",
    },
]

def generate_and_save(asset):
    """生成单张资产图并保存"""
    filename = f"{asset['id']}-{asset['name']}.jpeg"
    filepath = os.path.join(SAVE_DIR, filename)

    print(f"\n{'='*50}")
    print(f"🎨 生成: {asset['id']} - {asset['name']}")

    payload = {
        "model": "doubao-seedream-4-0-250828",
        "prompt": asset["prompt"],
        "negative_prompt": asset["negative"],
        "size": "1280x720",
        "n": 1,
    }

    try:
        data = json.dumps(payload).encode("utf-8")
        req = urllib.request.Request(API_URL, data=data, headers=HEADERS, method="POST")
        with urllib.request.urlopen(req, timeout=120) as resp:
            result = json.loads(resp.read().decode("utf-8"))

        img_url = result["data"][0]["url"]
        img_size = result["data"][0]["size"]
        tokens = result["usage"]["total_tokens"]

        print(f"  📐 尺寸: {img_size} | Token: {tokens}")

        # 下载图片
        urllib.request.urlretrieve(img_url, filepath)

        print(f"  ✅ 已保存: {filename}")
        return True

    except Exception as e:
        print(f"  ❌ 失败: {e}")
        return False

# 主流程
print("🚀 D188 资产图批量生成")
print(f"📁 保存路径: {SAVE_DIR}")
print(f"🎯 共 {len(ASSETS)} 张待生成")

results = []
for asset in ASSETS:
    ok = generate_and_save(asset)
    results.append((asset["id"], asset["name"], ok))
    time.sleep(1)  # 避免请求过快

# 汇总
print(f"\n{'='*50}")
print("📋 生成结果汇总:")
for aid, name, ok in results:
    status = "✅" if ok else "❌"
    print(f"  {status} {aid} - {name}")

success = sum(1 for _, _, ok in results if ok)
print(f"\n完成: {success}/{len(results)}")
