//
//  OrdersFlowUITests.swift
//  suixinkanUITests
//

import XCTest

final class OrdersFlowUITests: AuthenticatedUITestCase {
    /// 测试门店订单列表可进入详情页。
    func testStoreOrderDetailFlow() throws {
        TabBarNavigator.select(.orders, app: app)

        app.application.staticTexts["订单管理"].tap()
        app.waitForGlobalLoadingToDisappear()

        let firstOrderCard = app.application.otherElements
            .matching(NSPredicate(format: "identifier BEGINSWITH 'orders.store.card.'"))
            .firstMatch
        if !firstOrderCard.waitForExistence(timeout: 10) {
            throw XCTSkip("测试账号当前景区下暂无门店订单，跳过详情流测试。")
        }

        firstOrderCard.tap()
        NavigationAssertions.waitForNavigationTitle("订单详情", in: app)
        BackNavigator.goBack(app: app)
    }

    /// 测试核销订单列表可进入详情页。
    func testWriteOffOrderDetailFlow() throws {
        TabBarNavigator.select(.orders, app: app)

        app.application.staticTexts["核销订单"].tap()
        app.waitForGlobalLoadingToDisappear()

        let firstDetailButton = app.application.buttons
            .matching(NSPredicate(format: "identifier BEGINSWITH 'orders.writeoff.detail.'"))
            .firstMatch
        if !firstDetailButton.waitForExistence(timeout: 10) {
            throw XCTSkip("测试账号当前景区下暂无核销订单，跳过详情流测试。")
        }

        firstDetailButton.tap()
        NavigationAssertions.waitForNavigationTitle("核销订单详情", in: app)
        BackNavigator.goBack(app: app)
    }

    /// 测试押金订单链路可进入列表与详情。
    func testDepositOrderFlow() throws {
        app = try UITestSession.relaunch(openMenu: "押金订单详情")
        NavigationAssertions.waitForNavigationTitle("押金订单", in: app)

        let firstCell = app.application.cells.element(boundBy: 0)
        if firstCell.waitForExistence(timeout: 8) {
            firstCell.tap()
            NavigationAssertions.waitForNavigationTitle("押金订单详情", in: app)
            BackNavigator.goBack(app: app)
        } else {
            throw XCTSkip("测试账号暂无押金订单，跳过详情流测试。")
        }
    }

    /// 测试全局扫码页可打开关闭，关闭后仍停留在打开前的 Tab。
    func testScannerCanOpenAndCloseWithoutChangingCurrentTab() {
        TabBarNavigator.select(.home, app: app)

        let scanButton = TabBarNavigator.scannerButton(in: app)
        XCTAssertTrue(scanButton.waitForExistence(timeout: 6))
        scanButton.tap()

        let closeButton = app.application.buttons["scanner.close"]
        XCTAssertTrue(closeButton.waitForExistence(timeout: 8))
        closeButton.tap()
        XCTAssertTrue(
            app.application.staticTexts["常用应用"].waitForExistence(timeout: 8)
                || app.application.staticTexts["请选择景区"].exists
        )
    }
}
