#!/usr/bin/env python3
"""컨셉 #33 메리츠화재 스타일 — Gemini 배경 이미지 생성"""

import base64
import sys
from pathlib import Path

sys.path.insert(0, "/home/jay/workspace/tools/ai-image-gen")
import gcloud_auth
import requests

OUTPUT_DIR = Path("/home/jay/workspace/output/meta-ads/concept-catalog/33-meritz-style")
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)

PROMPT = (
    "Dark futuristic technology background, abstract digital data visualization, "
    "glowing circuit board patterns and neural network nodes in deep dark space, "
    "subtle orange-red light emanating from lower left corner like a digital sunrise, "
    "holographic floating interface elements, data streams flowing diagonally, "
    "color palette: near-black (#0D0D0D) dominant with vivid orange-red (#EF3B24) accent glows, "
    "no people, no faces, no text, no logos, "
    "ultra-modern tech aesthetic suitable for Korean insurance fintech startup ad, "
    "1080x1080 pixels, cinematic lighting, high contrast"
)

MODEL_ID = "gemini-3.0-flash-preview-image-generation"
FALLBACK_MODEL_ID = "gemini-2.0-flash-preview-image-generation"
GEMINI_API_BASE = "https://generativelanguage.googleapis.com/v1beta"
GEMINI_SCOPE = "https://www.googleapis.com/auth/generative-language"


def generate():
    print("[인증] SA 토큰 획득 중...")
    token = gcloud_auth.get_service_account_token(GEMINI_SCOPE)
    print(f"[인증] 토큰 획득 성공 ({len(token)} chars)")

    for model_id in [MODEL_ID, FALLBACK_MODEL_ID, "gemini-3-pro-image-preview", "gemini-3.1-flash-image-preview", "imagen-3.0-generate-002"]:
        url = f"{GEMINI_API_BASE}/models/{model_id}:generateContent"
        headers = {
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json",
        }
        payload = {
            "contents": [{"parts": [{"text": PROMPT}]}],
            "generationConfig": {"responseModalities": ["IMAGE", "TEXT"]},
        }
        print(f"[생성] 모델 시도: {model_id}")
        try:
            response = requests.post(url, headers=headers, json=payload, timeout=300)
            if response.status_code in (403, 404):
                print(f"  -> HTTP {response.status_code}, 다음 모델 시도")
                continue
            response.raise_for_status()
            data = response.json()
            candidates = data.get("candidates", [])
            if not candidates:
                print(f"  -> candidates 없음, 다음 모델 시도")
                continue
            parts = candidates[0].get("content", {}).get("parts", [])
            image_part = next((p for p in parts if "inlineData" in p), None)
            if image_part is None:
                print(f"  -> 이미지 데이터 없음, 다음 모델 시도")
                continue
            mime_type = image_part["inlineData"].get("mimeType", "image/jpeg")
            image_bytes = base64.b64decode(image_part["inlineData"]["data"])
            ext = ".jpg" if "jpeg" in mime_type else ".png"
            out_path = OUTPUT_DIR / f"bg{ext}"
            out_path.write_bytes(image_bytes)
            print(f"[완료] 배경 이미지 저장: {out_path} ({len(image_bytes):,} bytes, {mime_type})")
            return str(out_path)
        except Exception as e:
            print(f"  -> 오류: {e}, 다음 모델 시도")
            continue

    raise RuntimeError("모든 모델 시도 실패")


if __name__ == "__main__":
    path = generate()
    print(f"배경 이미지 경로: {path}")
