//
//  AppRouter.swift
//  suixinkan
//

import UIKit

/// 应用根页面路由。
enum AppRouter {

    enum Root {
        case login
        case mainTab
    }

    /// 根据登录态创建根控制器：已登录 → 主页 Tab，未登录 → 登录页。
    static func makeRootViewController() -> UIViewController {
        makeViewController(for: AppStore.shared.session.isLoggedIn ? .mainTab : .login)
    }

    /// 切换窗口根控制器。
    static func setRoot(_ root: Root, on window: UIWindow?, animated: Bool = true) {
        setRoot(makeViewController(for: root), on: window, animated: animated)
    }

    /// 根据当前登录态刷新根控制器。
    static func refreshRoot(on window: UIWindow?, animated: Bool = true) {
        setRoot(AppStore.shared.session.isLoggedIn ? .mainTab : .login, on: window, animated: animated)
    }

    private static func makeViewController(for root: Root) -> UIViewController {
        switch root {
        case .login:
            return UINavigationController(rootViewController: LoginViewController())
        case .mainTab:
            return MainTabBarController()
        }
    }

    private static func setRoot(_ viewController: UIViewController, on window: UIWindow?, animated: Bool) {
        guard let window else { return }

        guard animated, let snapshot = window.snapshotView(afterScreenUpdates: true) else {
            window.rootViewController = viewController
            return
        }

        viewController.view.addSubview(snapshot)
        window.rootViewController = viewController

        UIView.animate(withDuration: 0.25, animations: {
            snapshot.alpha = 0
        }, completion: { _ in
            snapshot.removeFromSuperview()
        })
    }
}
