"""
bibimbap 스크린샷 캡처 스크립트

비인증 페이지 + 인증 후 세부 화면 상태 모두 캡처.

사용법:
    # 비인증 페이지만
    python3 docs/development/screenshot-guide.py

    # 인증 포함 전체 (로그인 계정 필요)
    SCREENSHOT_EMAIL=user@example.com SCREENSHOT_PASSWORD=pw \
        python3 docs/development/screenshot-guide.py
"""
import os
import sys
from playwright.sync_api import sync_playwright

CHROME = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
OUT_DIR = "/tmp/bibimbap-screenshots"
BASE_URL = "http://localhost:8080"

EMAIL = os.environ.get("SCREENSHOT_EMAIL", "")
PASSWORD = os.environ.get("SCREENSHOT_PASSWORD", "")

# 비인증 페이지
ANON_PAGES = [
    ("/", "01-home-anon.png"),
    ("/login", "02-login.png"),
    ("/signup", "03-signup.png"),
    ("/posts", "04-posts-list.png"),
    ("/recruit", "05-recruit-list.png"),
    ("/game/3", "06-game-detail-anon.png"),
    ("/terms", "07-terms.png"),
]

os.makedirs(OUT_DIR, exist_ok=True)


def capture(page, path, filename, *, full_page=True):
    page.goto(f"{BASE_URL}{path}", wait_until="networkidle")
    page.screenshot(path=os.path.join(OUT_DIR, filename), full_page=full_page)
    print(f"  ✓ {filename}")


def do_login(page):
    """로그인 폼 제출 후 세션 획득. CSRF 토큰은 폼에서 추출."""
    page.goto(f"{BASE_URL}/login", wait_until="networkidle")
    page.fill("input[name='email']", EMAIL)
    page.fill("input[name='password']", PASSWORD)
    page.click("button[type='submit']")
    page.wait_for_url(lambda url: "/login" not in url, timeout=8000)


def capture_review_form(page):
    """게임 상세 — 리뷰 작성 폼 노출 상태."""
    page.goto(f"{BASE_URL}/game/3", wait_until="networkidle")
    # JS가 로그인 상태 확인 후 composer를 보여줄 때까지 대기 (최대 3초)
    try:
        page.wait_for_function(
            "document.getElementById('game-review-composer') && "
            "!document.getElementById('game-review-composer').hasAttribute('hidden')",
            timeout=5000,
        )
    except Exception:
        # JS가 숨긴 채로 두면 강제 노출 (스크린샷 전용)
        page.evaluate(
            "document.getElementById('game-review-composer')?.removeAttribute('hidden')"
        )
    page.screenshot(
        path=os.path.join(OUT_DIR, "13-game-review-form.png"), full_page=False
    )
    print("  ✓ 13-game-review-form.png")


def capture_comment_form(page):
    """게임 상세 — 댓글 작성 폼 노출 상태."""
    page.goto(f"{BASE_URL}/game/3", wait_until="networkidle")
    try:
        page.wait_for_function(
            "document.getElementById('game-comment-composer') && "
            "!document.getElementById('game-comment-composer').hasAttribute('hidden')",
            timeout=5000,
        )
    except Exception:
        page.evaluate(
            "document.getElementById('game-comment-composer')?.removeAttribute('hidden')"
        )
    # 댓글 섹션으로 스크롤
    page.evaluate(
        "document.getElementById('game-comment-composer')?.scrollIntoView({block:'center'})"
    )
    page.screenshot(
        path=os.path.join(OUT_DIR, "14-game-comment-form.png"), full_page=False
    )
    print("  ✓ 14-game-comment-form.png")


with sync_playwright() as p:
    browser = p.chromium.launch(
        executable_path=CHROME,
        headless=True,
        args=["--no-sandbox"],
    )
    page = browser.new_page(viewport={"width": 1400, "height": 900})

    print("── 비인증 페이지 ──────────────────────────────")
    for path, filename in ANON_PAGES:
        capture(page, path, filename)

    if EMAIL and PASSWORD:
        print("\n── 로그인 후 세부 화면 ─────────────────────────")
        try:
            do_login(page)
            print("  ✓ 로그인 성공")

            capture(page, "/", "08-home-loggedin.png")
            capture(page, "/profile", "09-profile.png")
            capture(page, "/posts/new", "10-posts-form.png")
            capture(page, "/recruit/new", "11-recruit-form.png")
            capture(page, "/game/3", "12-game-detail-loggedin.png")
            capture_review_form(page)
            capture_comment_form(page)

        except Exception as e:
            print(f"  ✗ 로그인 실패 또는 인증 페이지 캡처 오류: {e}", file=sys.stderr)
    else:
        print("\n※ SCREENSHOT_EMAIL / SCREENSHOT_PASSWORD 미설정 — 비인증 페이지만 캡처됨")
        print("  전체 캡처: SCREENSHOT_EMAIL=... SCREENSHOT_PASSWORD=... python3 docs/development/screenshot-guide.py")

    browser.close()

print(f"\n완료: {OUT_DIR}/")
