package com.narutohuo.xindazhou.common.launch

import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
import com.narutohuo.xindazhou.common.auth.NavigationCallback
import com.narutohuo.xindazhou.common.log.LogHelper
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

/**
 * 应用启动管理器（单 Activity 架构）
 * 
 * 只负责登录状态判断和页面导航，不处理版本检查
 * 版本检查由 VersionUpdateManager 独立处理
 * 
 * 使用方式（在 MainActivity 中）：
 * ```kotlin
 * override fun onCreate(savedInstanceState: Bundle?) {
 *     super.onCreate(savedInstanceState)
 *     
 *     // 检查登录状态并导航
 *     AppLaunchManager.handleLaunch(
 *         activity = this,
 *         isLoggedIn = { AuthManager.isLoggedInAsync() },
 *         navigationCallback = this, // MainActivity 实现 NavigationCallback
 *         splashDelay = 500
 *     )
 * }
 * ```
 */
object AppLaunchManager {
    
    /**
     * 处理应用启动逻辑（根据登录状态导航，单 Activity 架构）
     * 
     * @param activity Activity 实例（通常是 MainActivity）
     * @param isLoggedIn 判断是否已登录的函数（支持异步，可以自动刷新 Token）
     * @param navigationCallback 导航回调接口（用于导航到主界面或登录页）
     * @param splashDelay 启动画面显示时长（毫秒，默认 500ms）
     */
    fun handleLaunch(
        activity: FragmentActivity,
        isLoggedIn: suspend () -> Boolean,
        navigationCallback: NavigationCallback,
        splashDelay: Long = 500
    ) {
        activity.lifecycleScope.launch {
            try {
                // 显示启动画面
                delay(splashDelay)
                
                // 根据登录状态导航（支持异步刷新 Token）
                if (isLoggedIn()) {
                    // 已登录，导航到主界面
                    LogHelper.d("AppLaunchManager", "用户已登录，导航到主界面")
                    navigationCallback.navigateToMain()
                } else {
                    // 未登录，导航到登录页
                    LogHelper.d("AppLaunchManager", "用户未登录，导航到登录页")
                    navigationCallback.navigateToLogin()
                }
            } catch (e: Exception) {
                LogHelper.e("AppLaunchManager", "启动处理失败", e)
                // 出错时默认导航到登录页
                try {
                    navigationCallback.navigateToLogin()
                } catch (ex: Exception) {
                    LogHelper.e("AppLaunchManager", "导航到登录页失败", ex)
                }
            }
        }
    }
}

