#!/usr/bin/env python3
"""M1 FAIL 배너 재렌더링 (배경 재생성 없이 HTML/CSS만 수정 후 렌더링)"""
from pathlib import Path
from playwright.sync_api import sync_playwright
from gen_config import WORKSPACE_ROOT

OUTPUT_DIR = WORKSPACE_ROOT / "output/google-ads/banners/m1"
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)

BG_M1_1 = str(WORKSPACE_ROOT / "tools/ai-image-gen/output/v4-hybrid/m1-1-fair/bg_m1_1_fair.png")
BG_M1_2 = str(WORKSPACE_ROOT / "tools/ai-image-gen/output/v4-hybrid/m1-2-leader/bg_m1_2_leader.png")
BG_M1_3 = str(WORKSPACE_ROOT / "tools/ai-image-gen/output/v4-hybrid/m1-3-support/bg_m1_3_support.png")


def capture(html: str, bg_path: str, out_path: str, w: int, h: int):
    import base64, io
    from PIL import Image

    # 배경 이미지를 목표 크기로 리사이즈 후 JPEG base64 임베딩
    img = Image.open(bg_path).convert("RGB")
    img_resized = img.resize((w, h), Image.LANCZOS)
    buf = io.BytesIO()
    img_resized.save(buf, format="JPEG", quality=90)
    buf.seek(0)
    bg_b64 = base64.b64encode(buf.read()).decode("ascii")
    bg_data_url = f"data:image/jpeg;base64,{bg_b64}"

    html_filled = html.format(bg_url=bg_data_url)
    tmp = Path(f"/tmp/rerender_{w}x{h}_{Path(out_path).stem}.html")
    tmp.write_text(html_filled, encoding="utf-8")
    print(f"[캡처] {w}x{h} → {out_path}")
    with sync_playwright() as p:
        browser = p.chromium.launch(args=["--no-sandbox", "--disable-gpu"])
        page = browser.new_page(viewport={"width": w, "height": h})
        page.goto(f"file://{tmp}", wait_until="networkidle")
        page.wait_for_timeout(3000)
        page.screenshot(path=out_path, type="png", clip={"x": 0, "y": 0, "width": w, "height": h})
        browser.close()
    tmp.unlink(missing_ok=True)
    size_kb = Path(out_path).stat().st_size / 1024
    print(f"[완료] {out_path} ({size_kb:.0f} KB)")


def main():
    import sys
    sys.path.insert(0, str(Path(__file__).parent))

    # m1-1 HTML 템플릿 import
    from gen_m1_1_fair_banners import HTML_1200x628 as m1_1_1200, HTML_1080x1080 as m1_1_1080
    # m1-2 HTML 템플릿 import
    from gen_m1_2_leader_banners import HTML_1080x1080 as m1_2_1080
    # m1-3 HTML 템플릿 import
    from gen_m1_3_support_banners import HTML_1200x628 as m1_3_1200, HTML_1080x1080 as m1_3_1080

    print("=" * 60)
    print("M1 FAIL 배너 재렌더링 시작 (5장)")
    print("=" * 60)

    # 1. m1-1-1200x628
    try:
        capture(m1_1_1200, BG_M1_1, str(OUTPUT_DIR / "m1-1-1200x628.png"), 1200, 628)
    except Exception as e:
        print(f"[오류] m1-1-1200x628: {e}")

    # 2. m1-1-1080x1080
    try:
        capture(m1_1_1080, BG_M1_1, str(OUTPUT_DIR / "m1-1-1080x1080.png"), 1080, 1080)
    except Exception as e:
        print(f"[오류] m1-1-1080x1080: {e}")

    # 3. m1-2-1080x1080
    try:
        capture(m1_2_1080, BG_M1_2, str(OUTPUT_DIR / "m1-2-1080x1080.png"), 1080, 1080)
    except Exception as e:
        print(f"[오류] m1-2-1080x1080: {e}")

    # 4. m1-3-1200x628
    try:
        capture(m1_3_1200, BG_M1_3, str(OUTPUT_DIR / "m1-3-1200x628.png"), 1200, 628)
    except Exception as e:
        print(f"[오류] m1-3-1200x628: {e}")

    # 5. m1-3-1080x1080
    try:
        capture(m1_3_1080, BG_M1_3, str(OUTPUT_DIR / "m1-3-1080x1080.png"), 1080, 1080)
    except Exception as e:
        print(f"[오류] m1-3-1080x1080: {e}")

    print("=" * 60)
    print("재렌더링 완료")
    print("=" * 60)


if __name__ == "__main__":
    main()
