#!/usr/bin/env python3
"""IC-Light FC pipeline — proper lighting integration for product shots."""
import json, requests, uuid

API = "http://127.0.0.1:8188"
CLIENT_ID = str(uuid.uuid4())

def submit(prompt_dict, label=""):
    r = requests.post(f"{API}/prompt", json={"prompt": prompt_dict, "client_id": CLIENT_ID})
    if r.status_code == 200:
        pid = r.json().get("prompt_id","?")
        print(f"✅ [{label}]: {pid}")
        return pid
    else:
        print(f"❌ [{label}]: {r.status_code} {r.text[:400]}")

def make_iclight_prompt(input_image, pos_text, save_prefix, seed=42):
    return {
        "1":  {"class_type": "LoadImage",               "inputs": {"image": input_image}},
        "2":  {"class_type": "BiRefNetRMBG",             "inputs": {"image": ["1",0], "model": "BiRefNet-general"}},
        "3":  {"class_type": "ICLightApplyMaskGrey",     "inputs": {"image": ["2",0], "alpha": ["2",1]}},
        "4":  {"class_type": "CheckpointLoaderSimple",   "inputs": {"ckpt_name": "RealisticVision_V6_fp16.safetensors"}},
        "5":  {"class_type": "LoadAndApplyICLightUnet",  "inputs": {"model": ["4",0], "model_path": "iclight_sd15_fc_unet_ldm.safetensors"}},
        "6":  {"class_type": "CLIPTextEncode",           "inputs": {"text": pos_text, "clip": ["4",1]}},
        "7":  {"class_type": "CLIPTextEncode",           "inputs": {"text": "blurry, low quality, watermark, deformed, dark, ugly, harsh shadows, flat lighting", "clip": ["4",1]}},
        "8":  {"class_type": "VAEEncode",                "inputs": {"pixels": ["3",0], "vae": ["4",2]}},
        "9":  {"class_type": "ICLightConditioning",      "inputs": {"positive": ["6",0], "negative": ["7",0], "vae": ["4",2], "foreground": ["8",0], "multiplier": 1.0}},
        "10": {"class_type": "KSampler",                 "inputs": {"model": ["5",0], "positive": ["9",0], "negative": ["9",1], "latent_image": ["9",2], "seed": seed, "steps": 25, "cfg": 2.0, "sampler_name": "dpmpp_2m", "scheduler": "karras", "denoise": 1.0}},
        "11": {"class_type": "VAEDecode",                "inputs": {"samples": ["10",0], "vae": ["4",2]}},
        "12": {"class_type": "SaveImage",                "inputs": {"images": ["11",0], "filename_prefix": save_prefix}},
    }

# ── Olay Regenerist 10 ────────────────────────────────────────────────────────
olay_scenes = [
    ("Olay Regenerist cream jar, luxury marble bathroom countertop, soft natural window light, elegant skincare display, photorealistic", "olay/icl_marble",  101),
    ("Olay Regenerist cream jar, wooden spa shelf surrounded by green eucalyptus plants, warm diffused light, zen wellness aesthetic, photorealistic", "olay/icl_spa",     102),
    ("Olay Regenerist cream jar, modern bathroom vanity, bright morning sunlight, clean minimal aesthetic, editorial cosmetics photography", "olay/icl_morning", 103),
    ("Olay Regenerist cream jar, dark moody luxury surface, dramatic soft rim lighting, premium skincare brand aesthetic, photorealistic", "olay/icl_moody",   104),
]

print("=== Olay ===")
for pos, prefix, seed in olay_scenes:
    submit(make_iclight_prompt("olay_product.jpg", pos, prefix, seed), prefix.split("/")[1])

# ── Power Bank ────────────────────────────────────────────────────────────────
pb_scenes = [
    ("portable power bank charger, outdoor rocky mountain trail, dramatic golden hour sunlight, adventure travel photography, photorealistic", "powerbank/icl_outdoor", 201),
    ("portable power bank charger, dark carbon fiber desk, blue LED accent lighting, tech workspace, premium gadget photography", "powerbank/icl_desk",    202),
    ("portable power bank charger, travel flat lay on world map, warm cafe light, passport and coffee nearby, wanderlust lifestyle photography", "powerbank/icl_travel",  203),
    ("portable power bank charger, studio gradient background, dramatic centred spotlight, clean hero product shot, photorealistic", "powerbank/icl_hero",   204),
]

print("=== Power Bank ===")
for pos, prefix, seed in pb_scenes:
    submit(make_iclight_prompt("powerbank.jpg", pos, prefix, seed), prefix.split("/")[1])

print("\nAll queued — view at http://fred:8188")
