"""
네이버 블로그 글쓰기 페이지 팝업 디버깅 스크립트
"작성 중인 글이 있습니다" 팝업 캡처
"""

import time
from playwright.sync_api import sync_playwright

SCREENSHOT_PATH = "/home/jay/workspace/memory/reports/naver-popup-debug.png"
HTML_PATH = "/home/jay/workspace/memory/reports/naver-popup-debug.html"
FRAMES_PATH = "/home/jay/workspace/memory/reports/naver-popup-debug-frames.txt"
TARGET_URL = "https://blog.naver.com/incar_top?Redirect=Write"
CDP_ENDPOINT = "http://127.0.0.1:9222"

def main():
    with sync_playwright() as p:
        browser = None
        page = None
        try:
            print(f"[*] CDP 연결 중: {CDP_ENDPOINT}")
            browser = p.chromium.connect_over_cdp(CDP_ENDPOINT)
            print(f"[*] 브라우저 연결 성공")

            # 새 페이지 열기
            context = browser.contexts[0] if browser.contexts else browser.new_context()
            page = context.new_page()
            print(f"[*] 새 페이지 열기 완료")

            # JavaScript dialog (alert/confirm) 처리
            page.on("dialog", lambda d: (print(f"[*] Dialog 감지: type={d.type}, message={d.message}"), d.dismiss()))

            # 페이지 이동
            print(f"[*] 페이지 이동 중: {TARGET_URL}")
            page.goto(TARGET_URL, timeout=60000, wait_until="domcontentloaded")
            print(f"[*] 페이지 로드 완료")

            # 5초 대기 (팝업이 뜰 시간)
            print("[*] 5초 대기 중 (팝업 대기)...")
            time.sleep(5)
            print("[*] 대기 완료")

        except Exception as e:
            print(f"[!] 페이지 접속 중 에러 발생: {e}")
            print("[*] 에러에도 불구하고 스크린샷 시도...")

        # 스크린샷 캡처 (에러 발생해도 시도)
        try:
            if page:
                page.screenshot(path=SCREENSHOT_PATH, full_page=False)
                print(f"[+] 스크린샷 저장 완료: {SCREENSHOT_PATH}")
            else:
                print("[!] page 객체 없음 - 스크린샷 불가")
        except Exception as e:
            print(f"[!] 스크린샷 저장 실패: {e}")

        # HTML 덤프
        try:
            if page:
                html_content = page.content()
                with open(HTML_PATH, "w", encoding="utf-8") as f:
                    f.write(html_content)
                print(f"[+] HTML 덤프 저장 완료: {HTML_PATH} ({len(html_content)} bytes)")
            else:
                print("[!] page 객체 없음 - HTML 덤프 불가")
        except Exception as e:
            print(f"[!] HTML 덤프 저장 실패: {e}")

        # iframe 목록 + 뷰포트 크기 캡처
        try:
            if page:
                lines = []
                # 뷰포트 크기
                viewport = page.viewport_size
                lines.append(f"=== 뷰포트 크기 ===")
                lines.append(f"viewport_size: {viewport}")
                lines.append("")

                # 현재 페이지 URL
                lines.append(f"=== 현재 페이지 URL ===")
                lines.append(f"URL: {page.url}")
                lines.append(f"Title: {page.title()}")
                lines.append("")

                # iframe 목록
                lines.append(f"=== iframe 목록 (총 {len(page.frames)}개) ===")
                for i, frame in enumerate(page.frames):
                    lines.append(f"[{i}] name={frame.name!r}, url={frame.url}")

                frames_text = "\n".join(lines)
                with open(FRAMES_PATH, "w", encoding="utf-8") as f:
                    f.write(frames_text)
                print(f"[+] Frames 정보 저장 완료: {FRAMES_PATH}")
                print(frames_text)
            else:
                print("[!] page 객체 없음 - Frames 정보 불가")
        except Exception as e:
            print(f"[!] Frames 정보 저장 실패: {e}")

        # 페이지 닫기, 브라우저 disconnect
        try:
            if page:
                page.close()
                print("[*] 페이지 닫기 완료")
        except Exception as e:
            print(f"[!] 페이지 닫기 실패: {e}")

        try:
            if browser:
                browser.close()
                print("[*] 브라우저 disconnect 완료")
        except Exception as e:
            print(f"[!] 브라우저 disconnect 실패: {e}")

    print("[+] 스크립트 완료")

if __name__ == "__main__":
    main()
