"""司机端 APP — 订单列表 + 接单 Page Object。

Usage:
    order_list = DriverOrderListPage(driver)
    order_list.search_and_accept_order(order_no)
"""

from tests.app._base_page import AppBasePage


class DriverOrderListPage(AppBasePage):
    """司机端 APP - 订单列表 - 接单。"""

    def __init__(self, driver, platform: str = "android"):
        super().__init__(driver, platform)
        # ⚠️ 以下 accessibility_id 需要根据实际 APP 元素 ID 调整
        # 使用 Appium Desktop Inspector 或 uiautomatorviewer 获取

        # ── 搜索区 ──
        self.search_bar = "et_search"                       # ⚠️ 搜索框
        self.search_input = "et_search_input"               # ⚠️ 搜索输入框
        self.search_btn = "btn_search"                      # ⚠️ 搜索按钮

        # ── 列表 ──
        self.order_list_container = "rv_order_list"         # ⚠️ 订单列表容器
        self.order_item_prefix = "order_item_"              # ⚠️ 订单项 ID 前缀
        self.order_detail_btn = "btn_order_detail"          # ⚠️ 进入订单详情

        # ── 接单 ──
        self.accept_order_btn = "btn_accept_order"          # ⚠️ 接单按钮
        self.confirm_accept_btn = "btn_confirm"             # ⚠️ 确认接单按钮
        self.accept_success_text = "接单成功"               # ⚠️ 成功提示文本

    def search_order(self, order_no: str) -> None:
        """搜索指定订单。"""
        # 如果搜索框是独立按钮需要先点击展开
        try:
            self.tap_by_id(self.search_bar)
        except Exception:
            pass

        self.fill_by_id(self.search_input, order_no)
        self.tap_by_id(self.search_btn)
        self.driver.implicitly_wait(3)

    def accept_order(self, order_no: str) -> None:
        """接受指定订单。

        Args:
            order_no: 订单号
        """
        # 点击搜索结果中的订单
        # ⚠️ 实际定位方式取决于列表项如何展示订单号
        # 策略1: 通过订单号文本点击
        self.tap_by_text(order_no)
        self.driver.implicitly_wait(1)

        # 策略2: 通过详情按钮进入
        # self.tap_by_id(f"{self.order_item_prefix}{order_no}")
        # self.tap_by_id(self.order_detail_btn)

    def search_and_accept_order(self, order_no: str) -> None:
        """搜索订单并接单 — 完整的接单流程。

        Args:
            order_no: 订单号
        """
        # 1. 搜索
        self.search_order(order_no)

        # 2. 进入订单详情
        self.accept_order(order_no)

        # 3. 点击接单
        self.tap_by_id(self.accept_order_btn)
        self.driver.implicitly_wait(1)

        # 4. 确认接单 (如有弹窗)
        try:
            self.tap_by_id(self.confirm_accept_btn)
        except Exception:
            pass  # 无确认弹窗则跳过

        self.driver.implicitly_wait(2)

    def verify_order_accepted(self) -> bool:
        """验证订单已被接受（成功提示出现）。"""
        try:
            self.wait_visible_by_text(self.accept_success_text, timeout_s=5)
            return True
        except Exception:
            return False
