#!/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": 10001,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman waking up in bed, holding phone to ear, sleepy expression, morning light through window, bedroom interior, casual pajamas, romantic moment, photorealistic, 8k, close-up portrait, shallow depth of field",
        "output_prefix": "Drama_EP8_01_Phone_Call_"
    },
    {
        "id": "02",
        "name": "办公室甜蜜",
        "seed": 10002,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man and beautiful chinese woman in office, man standing close to woman, intimate conversation, professional attire, office background, romantic tension, warm lighting, photorealistic, 8k, medium shot, two characters",
        "output_prefix": "Drama_EP8_02_Office_Sweet_"
    },
    {
        "id": "03",
        "name": "精心打扮",
        "seed": 10003,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), beautiful chinese woman in light blue dress standing in front of mirror, adjusting dress, white high heels, bedroom interior, getting ready for date, happy expression, soft lighting, photorealistic, 8k, full body shot, mirror reflection",
        "output_prefix": "Drama_EP8_03_Getting_Ready_"
    },
    {
        "id": "04",
        "name": "楼下等候",
        "seed": 10004,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man leaning against black sports car, waiting outside apartment building, evening setting, looking up expectantly, street lights, romantic atmosphere, photorealistic, 8k, wide shot, low angle",
        "output_prefix": "Drama_EP8_04_Waiting_Downstairs_"
    },
    {
        "id": "05",
        "name": "海边餐厅",
        "seed": 10005,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), romantic seaside restaurant at night, ocean view, candlelit tables, elegant interior, couple entering restaurant, warm lighting, romantic atmosphere, photorealistic, 8k, wide shot, evening scene",
        "output_prefix": "Drama_EP8_05_Seaside_Restaurant_"
    },
    {
        "id": "06",
        "name": "烛光告白",
        "seed": 10006,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple sitting at candlelit dinner table, wine glasses, romantic lighting, man looking at woman with deep love, woman emotional with tears, intimate moment, photorealistic, 8k, close-up shot, shallow depth of field",
        "output_prefix": "Drama_EP8_06_Candlelight_Confession_"
    },
    {
        "id": "07",
        "name": "海边求婚",
        "seed": 10007,
        "width": 832,
        "height": 1216,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), handsome chinese man kneeling on one knee on seaside boardwalk, holding engagement ring, moonlight on ocean, romantic proposal scene, woman surprised and emotional, night scene, photorealistic, 8k, medium shot, dramatic lighting",
        "output_prefix": "Drama_EP8_07_Beach_Proposal_"
    },
    {
        "id": "08",
        "name": "幸福相拥",
        "seed": 10008,
        "width": 1216,
        "height": 832,
        "prompt": "(masterpiece, best quality, ultra-detailed:1.3), couple embracing on seaside boardwalk at night, moonlight on ocean, man holding woman tightly, happy expressions, romantic atmosphere, sea breeze, warm lighting, photorealistic, 8k, medium shot, intimate moment",
        "output_prefix": "Drama_EP8_08_Happy_Embrace_"
    }
]

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_EP8_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()