"""导航栏公共组件。

跨页面复用的顶部/侧边导航操作。

Usage:
    from tests.web.admin.pages.components.navbar import NavBar

    navbar = NavBar(page)
    navbar.go_to("运输管理")
"""

from playwright.sync_api import Page, expect

from tests.web.admin.pages.base_page import BasePage


class NavBar(BasePage):
    """侧边导航栏组件。"""

    def __init__(self, page: Page):
        super().__init__(page)
        # ⚠️ 以下定位器需要根据实际 DOM 调整
        self.sidebar = page.locator(".ant-layout-sider")
        self.logout_btn = page.get_by_text("退出登录")

    def go_to(self, menu_name: str) -> None:
        """点击侧边栏菜单项展开/跳转。

        Args:
            menu_name: 菜单名称文本（如 "运输管理"、"基础信息"）
        """
        menu_item = self.page.get_by_text(menu_name).first
        self.click_when_ready(menu_item)

    def go_to_submenu(self, parent_menu: str, sub_menu: str) -> None:
        """点击父级菜单后，点击子菜单项。

        Args:
            parent_menu: 父级菜单文本（如 "整车运输"）
            sub_menu: 子菜单文本（如 "运单管理"）
        """
        self.go_to(parent_menu)
        sub_item = self.page.get_by_text(sub_menu).first
        self.click_when_ready(sub_item)

    def logout(self) -> None:
        """退出登录。"""
        self.click_when_ready(self.logout_btn)
        expect(self.page).to_have_url("#/login", timeout=10_000)

    def is_expanded(self) -> bool:
        """检查侧边栏是否展开。"""
        return self.sidebar.is_visible()
