# Regeneración spicy (Mirko, bunny preciso, casino/cama).
# spicy1: billiard/casino/bar. spicy2: cama nocturna. Sin playa.

import json
import pathlib
import sys

sys.path.insert(0, "Engine")
from api_client import ForgeClient

BASE = pathlib.Path(r"C:\Users\Usuario\Downloads\SD")
OUT = BASE / "Output" / "test_mirko_spicy"
OUT.mkdir(parents=True, exist_ok=True)

MASTER = """masterpiece, best quality, highly detailed, sharp focus, very aesthetic, very awa,
detailed background, score_9, score_8_up, <lora:IFL_v1.0_IL:0.7> <lora:add-detail-xl:0.5>
<lora:blackwhiplash(bwl)-guy90-Illust-Lorav3:0.6> blaash, <lora:scara2b_ill_v1.00:0.7> scara2b-style,
<lora:Add_color_ILXLv1:3>, 1girl, solo"""

NEG = ("lowres, bad anatomy, bad hands, extra fingers, missing fingers, extra limbs, missing limbs, "
       "fused fingers, poorly drawn face, poorly drawn hands, censored, mosaic censoring, bar censor, "
       "mirror, reflection, extra person, 2girls, 2boys, duplicate, gun, pistol")

MIRKO = "<lora:Mirko:0.8>, mirko, rabbit_ears, red_eyes, white_hair, very_long_hair, large_breasts, dark_skin, dark-skinned_female, mature_female, muscular_female, rabbit_tail"
BUNNY = "playboy_bunny, white_leotard, strapless_leotard, white_gloves, cuffs, black_bowtie, fishnet_pantyhose, rabbit_tail, half naked, solo"

SPICY1 = [
    ("spicy1_pool", "leaning over pool table, holding billiard cue, aiming, from side, casino, neon lights, pool table, night"),
    ("spicy1_bar", "leaning against bar, one arm on bar, smiling, indoors, club, neon lights, night, from side"),
    ("spicy1_stool", "sitting on bar stool, legs crossed, leaning forward, smiling, indoors, casino, night, from front"),
    ("spicy1_lounge", "sitting on chair, legs over armrest, lazy confident pose, indoors, lounge, night, from side"),
    ("spicy1_tray", "kneeling, holding tray, serving pose, casino, night, from front"),
    ("spicy1_neon", "standing, hand on hip, weight on one leg, smiling, indoors, nightclub, night, from front"),
]

SPICY2 = [
    ("spicy2_bed_legs", "lying, on_back, legs_up, knees to chest, stretching, indoors, bed, night, from front"),
    ("spicy2_bed_crossed", "sitting on bed edge, legs crossed, leaning forward, smiling, indoors, bedroom, night, from front"),
    ("spicy2_bed_side", "lying on side, propped on elbow, one leg bent, sultry gaze, indoors, bedroom, night, from side"),
    ("spicy2_bed_chair", "sitting on chair, legs over armrest, lazy confident pose, indoors, bedroom, night, from side"),
    ("spicy2_bed_stretch", "stretching arms up, arched back, confident expression, indoors, bedroom, night, from front"),
    ("spicy2_bed_kneel", "kneeling, sitting on heels, hands on thighs, looking up, indoors, bedroom, night, from front"),
]

client = ForgeClient("http://127.0.0.1:7860")
assert client.check_status(), "Forge no responde"

manifest = []
for name, pose in SPICY1 + SPICY2:
    prompt = (f"{MASTER}\nBREAK\n1girl, {MIRKO}, {BUNNY}\n"
              f"BREAK\n{pose}")
    images, info = client.txt2img(prompt, negative_prompt=NEG, width=832, height=1216,
                                  steps=28, cfg_scale=6.0, seed=-1)
    for j, img in enumerate(images, 1):
        fname = f"{name}_{j:02d}.png"
        (OUT / fname).write_bytes(img)
        manifest.append({"file": fname, "test": name, "pose": pose, "outfit": BUNNY,
                         "prompt": prompt, "seed": info.get("seed")})
        print(f"[OK] {fname} seed={info.get('seed')}")

(OUT / "manifest.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=1), encoding="utf-8")
print(f"[OK] {OUT} ({len(manifest)} imgs)")
