#!/usr/bin/env python3
"""컨셉 #03 Anti-Polish 최종 이미지 합성 (HTML + Playwright)"""

import sys
from pathlib import Path

from playwright.sync_api import sync_playwright

OUTPUT_DIR = Path("/home/jay/workspace/output/meta-ads/concept-catalog/03-anti-polish")
TEMPLATE_PATH = OUTPUT_DIR / "template.html"
BG_PATH = OUTPUT_DIR / "bg.png"
OUTPUT_PATH = OUTPUT_DIR / "sample.png"

# 렌더링용 임시 HTML 파일
RENDER_HTML_PATH = OUTPUT_DIR / "_render.html"


def inject_bg_and_render():
    print("[Step 2] HTML 템플릿에 배경 이미지 주입 중...")

    if not TEMPLATE_PATH.exists():
        raise FileNotFoundError(f"템플릿 파일 없음: {TEMPLATE_PATH}")
    if not BG_PATH.exists():
        raise FileNotFoundError(f"배경 이미지 없음: {BG_PATH}")

    template_html = TEMPLATE_PATH.read_text(encoding="utf-8")

    # 배경 이미지 경로 주입 (file:// 절대경로)
    bg_file_url = f"file://{BG_PATH.resolve()}"
    render_html = template_html.replace("__BG_IMAGE__", bg_file_url)

    RENDER_HTML_PATH.write_text(render_html, encoding="utf-8")
    print(f"  렌더링용 HTML 저장: {RENDER_HTML_PATH}")

    print("[Step 3] Playwright로 1080x1080 스크린샷 캡처 중...")

    with sync_playwright() as p:
        browser = p.chromium.launch(
            args=[
                "--no-sandbox",
                "--disable-setuid-sandbox",
                "--disable-dev-shm-usage",
                "--font-render-hinting=none",
            ]
        )
        try:
            context = browser.new_context(
                viewport={"width": 1080, "height": 1080},
                device_scale_factor=1,
            )
            page = context.new_page()

            # file:// URL로 로드
            page_url = f"file://{RENDER_HTML_PATH.resolve()}"
            page.goto(page_url, wait_until="networkidle", timeout=30000)

            # Google Fonts 로딩 대기 (최대 5초)
            page.wait_for_timeout(4500)

            # 폰트 로드 확인
            page.evaluate("""() => {
                return document.fonts.ready;
            }""")

            page.wait_for_timeout(1000)

            OUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True)
            page.screenshot(
                path=str(OUTPUT_PATH),
                type="png",
                clip={"x": 0, "y": 0, "width": 1080, "height": 1080},
            )

            print(f"  [캡처 완료] {OUTPUT_PATH}")
        finally:
            browser.close()

    size_kb = OUTPUT_PATH.stat().st_size / 1024
    print(f"[완료] 최종 이미지: {OUTPUT_PATH} ({size_kb:.0f} KB)")


if __name__ == "__main__":
    inject_bg_and_render()
