"""
Batch test: personajes_base aleatorios + pose_ai + scene_ai
"""
import requests, base64, random, time
from pathlib import Path

FORGE_URL = "http://127.0.0.1:7860"
BASE_DIR = Path(r"C:\Users\Usuario\Downloads\NEW")
OUTPUT = BASE_DIR / "Output" / "batch_ai_wildcards"
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>, age up, mature female,"
NEG = "lowres, bad anatomy, bad hands, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name, bad feet, multiple views, splits, 2girls, extra people"

# Load data
chars = [l.strip() for l in (BASE_DIR / "Archivos" / "personajes.txt").read_text(encoding="utf-8").splitlines() if l.strip()]
poses = [l.strip() for l in (BASE_DIR / "Archivos" / "wildcards_ai" / "pose_ai.txt").read_text(encoding="utf-8").splitlines() if l.strip()]
scenes = [l.strip() for l in (BASE_DIR / "Archivos" / "wildcards_ai" / "scene_ai.txt").read_text(encoding="utf-8").splitlines() if l.strip()]

OUTPUT.mkdir(parents=True, exist_ok=True)

print("=" * 50)
print("  BATCH: Base + AI Poses + AI Scenes")
print(f"  {len(chars)} personajes | {len(poses)} poses | {len(scenes)} escenas")
print("=" * 50)

for i in range(10):
    char = random.choice(chars)
    pose = random.choice(poses)
    scene = random.choice(scenes)

    prompt = f"{MASTER} {char} BREAK {pose} BREAK {scene}"
    filename = f"batch_{i+1:02d}.png"
    outpath = OUTPUT / filename

    print(f"\n[{i+1}/10] {filename}")
    print(f"  Char: {char[:60].encode('ascii', errors='replace').decode('ascii')}...")
    print(f"  Pose: {pose[:60]}...")
    print(f"  Scene: {scene[:60]}...")

    payload = {
        "prompt": prompt, "negative_prompt": NEG,
        "width": 832, "height": 1216, "steps": 28, "cfg_scale": 6,
        "sampler_name": "DPM++ 2M Karras", "batch_size": 1, "n_iter": 1, "seed": -1, "clip_skip": 2,
    }

    try:
        resp = requests.post(f"{FORGE_URL}/sdapi/v1/txt2img", json=payload, timeout=300)
        if resp.status_code == 200:
            img = base64.b64decode(resp.json()["images"][0])
            with open(outpath, "wb") as f:
                f.write(img)
            print(f"  [OK] {len(img)//1024}KB")
        else:
            print(f"  [FAIL] {resp.status_code}")
    except Exception as e:
        print(f"  [ERROR] {e}")

    time.sleep(2)

print(f"\n{'=' * 50}")
print(f"  COMPLETADO — {OUTPUT}")
print(f"{'=' * 50}")
