#!/usr/bin/env python3
"""Upload foto referensi AMARI ROOF ke Replicate + cek model image gen."""
import json, re, urllib.request

tools = open('TOOLS.md', encoding='utf-8').read()
m = re.search(r'Replicate API Key[\s\S]*?Token:\*\*\s*`([^`]+)`', tools)
KEY = m.group(1).strip()

# 1. Upload foto produk AMARI ROOF
REF = 'media/inbound/openclaw-staged-e8b411db-11e5-424d-9748-fd8cd61228ec/f622c9f7-f2ab-4f24-9002-f0f552c294b8.jpg'
boundary = "----wb" + "77788"
data = open(REF, 'rb').read()
parts = []
parts.append(f"--{boundary}\r\nContent-Disposition: form-data; name=\"filename\"\r\n\r\namari_roof.jpg\r\n")
parts.append(f"--{boundary}\r\nContent-Disposition: form-data; name=\"content\"; filename=\"amari_roof.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n".encode() + data + b"\r\n")
parts.append(f"--{boundary}--\r\n".encode())
body = b"".join(p.encode() if isinstance(p, str) else p for p in parts)

req = urllib.request.Request("https://api.replicate.com/v1/files", data=body,
    headers={"Authorization": f"Bearer {KEY}", "Content-Type": f"multipart/form-data; boundary={boundary}"})
try:
    with urllib.request.urlopen(req, timeout=60) as r:
        d = json.loads(r.read())
    print("UPLOAD OK:", d.get("id"))
    print("URL:", d.get("urls", {}).get("get"))
except urllib.error.HTTPError as e:
    print("UPLOAD FAIL:", e.code, e.read().decode()[:300])

# 2. Cek model image gen
for model in ["black-forest-labs/flux-1.1-pro", "black-forest-labs/flux-dev", "recraft-ai/recraft-v3", "ideogram-ai/ideogram-v2-turbo"]:
    try:
        req = urllib.request.Request(f"https://api.replicate.com/v1/models/{model}",
            headers={"Authorization": f"Bearer {KEY}"})
        with urllib.request.urlopen(req, timeout=30) as r:
            d = json.loads(r.read())
        latest = d.get("latest_version", {})
        print(f"OK: {model} | latest: {latest.get('id','')[:20]} | input keys: {list((latest.get('openapi_schema',{}).get('components',{}).get('schemas',{}).get('Input',{}).get('properties',{}) or {}).keys())[:20]}")
    except urllib.error.HTTPError as e:
        print(f"FAIL: {model} | {e.code}")
