# -*- coding: utf-8 -*-
"""
STEP104-11 V2 Publish Navigation

역할:
- V2 전용 발행 네비게이션 모듈.
- 블로그 홈 접속 후 글쓰기 화면으로 이동한다.
- V1 publish_worker.py를 수정하지 않고 독립적으로 구현한다.

현재 지원:
- go_blog_home()
- go_write()

다음 단계:
- Editor Recovery
- Editor Ready
- Write Frame 탐색
"""


class V2PublishNavigation:
    def __init__(self, verbose=True):
        self.verbose = verbose

    def go_blog_home(self, page, logger=None, session=None, timeout=60000):
        """
        blog.naver.com 홈으로 이동한다.
        """
        def _run():
            if self.verbose:
                print("[V2 NAV BLOG HOME] https://blog.naver.com")

            page.goto(
                "https://blog.naver.com",
                wait_until="domcontentloaded",
                timeout=timeout,
            )
            page.wait_for_timeout(1200)

            if self.verbose:
                print("[V2 NAV BLOG HOME URL]", page.url)

            return {
                "status": "success",
                "url": page.url,
            }

        if session and logger:
            with session.step("navigation.blog_home", logger=logger):
                return _run()

        return _run()

    def go_write(self, page, logger=None, session=None, timeout=60000):
        """
        글쓰기 화면으로 이동한다.
        우선순위:
        1. 화면 내 글쓰기 링크/버튼
        2. 직접 글쓰기 URL 이동
        """
        def _run():
            result = self._click_write_button(page, timeout=timeout)

            if not result.get("clicked"):
                if self.verbose:
                    print("[V2 NAV WRITE DIRECT GOTO] https://blog.naver.com/GoBlogWrite.naver")

                page.goto(
                    "https://blog.naver.com/GoBlogWrite.naver",
                    wait_until="domcontentloaded",
                    timeout=timeout,
                )
                page.wait_for_timeout(1500)

                result = {
                    "clicked": False,
                    "direct_goto": True,
                    "url": page.url,
                }

            if self.verbose:
                print("[V2 NAV WRITE URL]", page.url)

            result["final_url"] = page.url
            return result

        if session and logger:
            with session.step("navigation.write", logger=logger):
                return _run()

        return _run()

    def _click_write_button(self, page, timeout=60000):
        selectors = [
            "a:has-text('글쓰기')",
            "button:has-text('글쓰기')",
            "a[href*='GoBlogWrite']",
            "a[href*='PostWriteForm']",
            "a[href*='Write']",
        ]

        for selector in selectors:
            try:
                locator = page.locator(selector)

                if locator.count() <= 0:
                    continue

                first = locator.first
                href = first.get_attribute("href")

                if self.verbose:
                    print("[V2 NAV WRITE CANDIDATE]", selector, href)

                if href:
                    page.goto(
                        href,
                        wait_until="domcontentloaded",
                        timeout=timeout,
                    )
                    page.wait_for_timeout(1500)
                    return {
                        "clicked": True,
                        "selector": selector,
                        "href": href,
                        "url": page.url,
                    }

                first.click(force=True, timeout=5000)
                page.wait_for_timeout(1500)

                return {
                    "clicked": True,
                    "selector": selector,
                    "href": None,
                    "url": page.url,
                }

            except Exception as e:
                if self.verbose:
                    print("[V2 NAV WRITE CANDIDATE FAIL]", selector, str(e))

        return {
            "clicked": False,
            "url": page.url,
        }
