//
//  AppUITestRouteDriver.swift
//  suixinkan
//
//  Created by Codex on 2026/6/26.
//

#if DEBUG
import SwiftUI

/// UI Test 专用路由直达器，通过启动参数打开目标页，绕开自定义 TabBar 下 XCUITest 难以触发的 push。
@MainActor
enum AppUITestRouteDriver {
    private static var didApply = false

    /// 根据启动参数跳转到指定首页菜单或个人中心页面。
    static func applyIfNeeded(appRouter: AppRouter) async {
        guard AppUITestLaunchState.isRunningUITests, !didApply else { return }
        guard AppUITestLaunchState.pendingMenuTitle != nil
            || AppUITestLaunchState.pendingProfileRouteRawValue != nil else { return }

        didApply = true
        try? await Task.sleep(nanoseconds: 1_200_000_000)

        if let menuTitle = AppUITestLaunchState.pendingMenuTitle {
            openHomeMenu(title: menuTitle, appRouter: appRouter)
            return
        }

        if let rawValue = AppUITestLaunchState.pendingProfileRouteRawValue {
            openProfileRoute(rawValue: rawValue, appRouter: appRouter)
        }
    }

    /// 打开首页调试目录中的指定菜单。
    private static func openHomeMenu(title: String, appRouter: AppRouter) {
        let resolvedTitle = resolveMenuTitle(title)
        guard let item = HomeMenuRouter.debugAllMenuItems().first(where: { $0.title == resolvedTitle }) else {
            return
        }

        appRouter.reset()
        let resolved = HomeMenuRouter.resolve(uri: item.uri, title: item.title)
        switch resolved {
        case .tab(let tab):
            appRouter.select(tab)
        case .orders(let entry):
            appRouter.selectOrders(entry: entry)
        case .destination(let homeRoute):
            appRouter.select(.home)
            appRouter.router(for: .home).navigate(to: .home(homeRoute))
        case .unsupported(let uri, let title, _):
            appRouter.select(.home)
            appRouter.router(for: .home).navigate(to: .home(.modulePlaceholder(uri: uri, title: title)))
        case .placeholder(let uri, let title):
            appRouter.select(.home)
            appRouter.router(for: .home).navigate(to: .home(.modulePlaceholder(uri: uri, title: title)))
        }
    }

    /// 打开个人中心二级页面。
    private static func openProfileRoute(rawValue: String, appRouter: AppRouter) {
        let route: ProfileRoute?
        switch rawValue {
        case "settings":
            route = .settings
        case "realNameAuth":
            route = .realNameAuth
        case "accountSwitch":
            route = .accountSwitch
        case "debugHomeMenus":
            route = .debugHomeMenus
        case "agreement.about":
            route = .agreement(.about)
        case "agreement.userAgreement":
            route = .agreement(.userAgreement)
        case "agreement.privacyPolicy":
            route = .agreement(.privacyPolicy)
        default:
            route = nil
        }

        guard let route else { return }
        appRouter.reset()
        appRouter.select(.profile)
        appRouter.router(for: .profile).navigate(to: .profile(route))
    }

    /// 将 UI Test 用例菜单名映射为调试目录标题。
    private static func resolveMenuTitle(_ title: String) -> String {
        switch title {
        case "系统设置":
            return "设置中心"
        default:
            return title
        }
    }
}
#endif
