from playwright.sync_api import Page

from zhyy.test_case.Resource.UI.base_page import BasePage


class LoginPage(BasePage):
    """
    登录页对象。

    注意：
    当前用例未提供登录页侦察结果，因此以下 selector 使用 TODO 占位。
    落地执行前请通过页面侦察补充真实 selector。
    """

    USERNAME_INPUT = "TODO_LOGIN_USERNAME_INPUT_SELECTOR"
    PASSWORD_INPUT = "TODO_LOGIN_PASSWORD_INPUT_SELECTOR"
    LOGIN_BUTTON = "TODO_LOGIN_BUTTON_SELECTOR"

    def __init__(self, page: Page):
        super().__init__(page)

    def is_login_page(self) -> bool:
        """
        判断当前是否处于登录页。
        由于缺少真实登录页 selector，这里通过 TODO selector 判断。
        若系统已通过 SSO 或已有登录态直接进入业务页，可返回 False。
        """
        if "TODO" in self.USERNAME_INPUT:
            # 未补充登录页定位时，不主动执行登录，避免误判。
            return False

        try:
            return self.page.locator(self.USERNAME_INPUT).first.is_visible(timeout=3_000)
        except Exception:
            return False

    def login_if_needed(self, username: str, password: str):
        """
        如当前页面需要登录，则执行登录。
        """
        if not self.is_login_page():
            return

        self.fill(self.USERNAME_INPUT, username)
        self.fill(self.PASSWORD_INPUT, password)
        self.click(self.LOGIN_BUTTON)
        self.wait_for_network_idle()
