//
//  UITestTapHelper.swift
//  suixinkanUITests
//
//  Created by Codex on 2026/6/26.
//

import XCTest

/// 在 SwiftUI 列表中定位并点击带文案的入口。
enum UITestTapHelper {
    /// 优先点击按钮，其次点击静态文案。
    static func tapLabel(
        _ label: String,
        in app: SuixinkanApp,
        timeout: TimeInterval = 8,
        file: StaticString = #filePath,
        line: UInt = #line
    ) {
        if let target = findLabel(label, in: app, timeout: timeout) {
            target.tap()
            app.waitForGlobalLoadingToDisappear()
            return
        }

        app.application.swipeUp()
        if let target = findLabel(label, in: app, timeout: 2) {
            target.tap()
            app.waitForGlobalLoadingToDisappear()
            return
        }

        XCTFail("未找到可点击文案：\(label)", file: file, line: line)
    }

    /// 查找可点击的按钮或文案。
    private static func findLabel(_ label: String, in app: SuixinkanApp, timeout: TimeInterval) -> XCUIElement? {
        let button = app.application.buttons[label]
        if button.waitForExistence(timeout: timeout) {
            return button
        }

        let containsButton = app.application.buttons.matching(
            NSPredicate(format: "label CONTAINS %@", label)
        ).firstMatch
        if containsButton.waitForExistence(timeout: 2) {
            return containsButton
        }

        let text = app.application.staticTexts[label]
        if text.waitForExistence(timeout: 2) {
            return text
        }

        return nil
    }
}
