#!/usr/bin/env python3
"""
短剧《雨夜撞上陆总后》第七集 - 关键场景图片生成
"""

import json
import urllib.request
import time

COMFYUI_URL = "http://127.0.0.1:8188"

# 模型选择
BEST_MODEL = "SDXL 1.0\\9527DetailRealistic_v30.safetensors"

# 负面提示词
NEGATIVE_PROMPT = "(worst quality, low quality:1.4), deformed, distorted, disfigured, bad anatomy, bad proportions, ugly, noisy, blurry, low contrast, watermark, text, signature, cartoon, anime, 3d, painting, drawing, illustration, western features, blue eyes, blonde hair, extra fingers, malformed hands, missing limbs, floating limbs, disconnected limbs, nsfw, nude, naked"

# 第七集关键场景 (8 个)
SCENES = [
    {
        "id": "01",
        "name": "职场归来",
        "seed": 9001,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in professional business suit walking into office building, holding document folder, confident expression, three years later, career woman, modern office lobby background, cinematic lighting, photorealistic, 8k, full body shot, low angle",
        "output_prefix": "Drama_EP7_01_Career_Return_"
    },
    {
        "id": "02",
        "name": "报到重逢",
        "seed": 9002,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in business suit standing in office, handsome chinese man sitting behind desk smiling, office interior, professional atmosphere, dramatic lighting, romantic tension, photorealistic, 8k, medium shot, two characters",
        "output_prefix": "Drama_EP7_02_Office_Reunion_"
    },
    {
        "id": "03",
        "name": "会议介绍",
        "seed": 9003,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman giving presentation at conference room podium, audience applauding, professional setting, confident smile, business attire, dramatic lighting, inspirational moment, photorealistic, 8k, wide shot",
        "output_prefix": "Drama_EP7_03_Meeting_Intro_"
    },
    {
        "id": "04",
        "name": "上下级关系",
        "seed": 9004,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man standing close to woman in office, intense eye contact, professional attire, tension in air, office background, dramatic lighting, romantic atmosphere, photorealistic, 8k, medium shot, shallow depth of field",
        "output_prefix": "Drama_EP7_04_Boss_Subordinate_"
    },
    {
        "id": "05",
        "name": "真情告白",
        "seed": 9005,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man confessing love to woman, emotional expression, office interior, dramatic lighting, romantic moment, photorealistic, 8k, close-up portrait, shallow depth of field, intense eyes",
        "output_prefix": "Drama_EP7_05_Love_Confession_"
    },
    {
        "id": "06",
        "name": "餐厅约会",
        "seed": 9006,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), elegant french restaurant interior, couple sitting at table with wine glasses, romantic candlelight, man pulling chair for woman, intimate atmosphere, warm lighting, photorealistic, 8k, wide shot",
        "output_prefix": "Drama_EP7_06_Restaurant_Date_"
    },
    {
        "id": "07",
        "name": "流泪坦白",
        "seed": 9007,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman crying at restaurant table, tears on face, emotional expression, wine glass on table, romantic lighting, dramatic moment, photorealistic, 8k, close-up portrait, shallow depth of field",
        "output_prefix": "Drama_EP7_07_Tears_Confession_"
    },
    {
        "id": "08",
        "name": "重新开始",
        "seed": 9008,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), man holding woman's hand across restaurant table, intimate moment, romantic candlelight, emotional connection, warm lighting, hopeful expression, photorealistic, 8k, close-up shot, focus on hands",
        "output_prefix": "Drama_EP7_08_Fresh_Start_"
    }
]

def submit_prompt(scene):
    """提交单个场景到 ComfyUI"""
    prompt_data = {
        "prompt": {
            "3": {
                "class_type": "KSampler",
                "inputs": {
                    "cfg": 7.0,
                    "denoise": 1,
                    "latent_image": ["5", 0],
                    "model": ["4", 0],
                    "negative": ["7", 0],
                    "positive": ["6", 0],
                    "sampler_name": "dpmpp_2m",
                    "scheduler": "karras",
                    "seed": scene["seed"],
                    "steps": 30
                }
            },
            "4": {
                "class_type": "CheckpointLoaderSimple",
                "inputs": {
                    "ckpt_name": BEST_MODEL
                }
            },
            "5": {
                "class_type": "EmptyLatentImage",
                "inputs": {
                    "batch_size": 1,
                    "height": scene["height"],
                    "width": scene["width"]
                }
            },
            "6": {
                "class_type": "CLIPTextEncode",
                "inputs": {
                    "clip": ["4", 1],
                    "text": scene["prompt"]
                }
            },
            "7": {
                "class_type": "CLIPTextEncode",
                "inputs": {
                    "clip": ["4", 1],
                    "text": NEGATIVE_PROMPT
                }
            },
            "8": {
                "class_type": "VAEDecode",
                "inputs": {
                    "samples": ["3", 0],
                    "vae": ["4", 2]
                }
            },
            "9": {
                "class_type": "SaveImage",
                "inputs": {
                    "filename_prefix": scene["output_prefix"],
                    "images": ["8", 0]
                }
            }
        }
    }
    
    try:
        req = urllib.request.Request(
            f'{COMFYUI_URL}/prompt',
            data=json.dumps(prompt_data).encode('utf-8'),
            headers={'Content-Type': 'application/json'},
            method='POST'
        )
        
        with urllib.request.urlopen(req, timeout=10) as response:
            result = json.loads(response.read().decode('utf-8'))
            return True, result.get('prompt_id', 'unknown')
    except Exception as e:
        return False, str(e)

def main():
    print("=" * 70)
    print("🎬 短剧《雨夜撞上陆总后》第七集 - 场景图生成")
    print("=" * 70)
    print(f"\n📦 使用模型:{BEST_MODEL}")
    print(f"📊 场景数量:{len(SCENES)} 个")
    print("=" * 70)
    
    # 检查 ComfyUI 连接
    print("\n📡 检查 ComfyUI 连接...")
    try:
        req = urllib.request.Request(f'{COMFYUI_URL}/queue', method='GET')
        with urllib.request.urlopen(req, timeout=5) as response:
            queue = json.loads(response.read().decode('utf-8'))
            print(f"✅ ComfyUI 连接成功")
            print(f"   当前队列:{len(queue.get('queue_running', []))} 运行中,{len(queue.get('queue_pending', []))} 等待中")
    except Exception as e:
        print(f"❌ 无法连接 ComfyUI: {e}")
        return
    
    # 提交所有场景
    print("\n" + "=" * 70)
    print("🚀 开始提交生成任务...")
    print("=" * 70)
    
    success_count = 0
    for i, scene in enumerate(SCENES, 1):
        print(f"\n[{i}/{len(SCENES)}] {scene['name']}")
        
        success, result = submit_prompt(scene)
        
        if success:
            print(f"   ✅ 提交成功 (Prompt ID: {result})")
            success_count += 1
        else:
            print(f"   ❌ 提交失败:{result}")
        
        time.sleep(0.5)
    
    print("\n" + "=" * 70)
    print("📊 生成结果")
    print("=" * 70)
    print(f"✅ 成功:{success_count}/{len(SCENES)}")
    
    if success_count > 0:
        print(f"\n💾 图片将保存到:ComfyUI/output/")
        print(f"   文件名前缀:Drama_EP7_XX_场景名_")
        print(f"\n🌐 查看进度:http://127.0.0.1:8188")
    
    print("\n" + "=" * 70)
    
    # 显示场景列表
    print("\n📋 场景清单:")
    print("-" * 70)
    for scene in SCENES:
        print(f"  {scene['id']}. {scene['name']} - {scene['output_prefix']}")
    print("-" * 70)

if __name__ == "__main__":
    main()