package com.narutohuo.xindazhou

import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.NavHostFragment
import com.narutohuo.xindazhou.common.auth.AuthManager
import com.narutohuo.xindazhou.common.auth.NavigationCallback
import com.narutohuo.xindazhou.common.log.LogHelper
import com.narutohuo.xindazhou.common.ui.BaseActivity
import com.narutohuo.xindazhou.common.version.VersionUpdateManager
import com.narutohuo.xindazhou.databinding.ActivityMainBinding
import kotlinx.coroutines.launch

/**
 * 主界面 Activity（单 Activity 架构）
 * 
 * 职责：
 * 1. 作为应用的唯一 Activity，使用 Navigation Component 管理所有页面导航
 * 2. 启动时检查登录状态，动态导航到相应页面
 * 3. 版本检查（启动时检查是否有新版本）
 * 
 * 注意：
 * - 这是单 Activity 架构，所有页面都是 Fragment
 * - 登录页（LoginFragment）和注册页（RegisterFragment）都是 Fragment
 * - 主界面（MainFragment）使用 Navigation Component 管理内部导航
 * - 实现 NavigationCallback 接口，处理 Fragment 的导航请求
 */
class MainActivity : BaseActivity<ActivityMainBinding>(), NavigationCallback {
    
    private val TAG = "MainActivity"
    private var navHostFragment: NavHostFragment? = null
    
    override fun getViewBinding(): ActivityMainBinding {
        return ActivityMainBinding.inflate(layoutInflater)
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 版本检查（独立处理，不影响页面显示）
        VersionUpdateManager.checkUpdate(this)
    }
    
    override fun onStart() {
        super.onStart()
        
        // 在 onStart 中初始化导航并检查登录状态
        // 此时 Fragment 已经完全初始化，NavController 已可用
        initNavigationAndCheckLogin()
    }
    
    override fun initView() {
        // Navigation 初始化在 onStart 中完成
        // 这里可以添加其他初始化逻辑
    }
    
    /**
     * 初始化 Navigation Component 并检查登录状态
     * 
     * 默认起始目的地是 loginFragment（在 nav_graph.xml 中设置）
     * 如果已登录，则导航到 mainFragment
     */
    private fun initNavigationAndCheckLogin() {
        // 获取 Navigation Host Fragment
        if (navHostFragment == null) {
            navHostFragment = supportFragmentManager.findFragmentById(R.id.navHostFragment) as? NavHostFragment
        }
        
        val navController = navHostFragment?.navController ?: run {
            LogHelper.w(TAG, "NavController 未找到，延迟检查登录状态")
            // 如果 NavController 还未初始化，延迟执行
            binding.root.post {
                initNavigationAndCheckLogin()
            }
            return
        }
        
        // 测试模式：直接导航到主界面，跳过登录检查
        val currentDestination = navController.currentDestination?.id
        if (currentDestination == R.id.loginFragment || currentDestination == R.id.registerFragment) {
            LogHelper.d(TAG, "测试模式：直接导航到主界面，跳过登录检查")
            navigateToMain()
        } else {
            LogHelper.d(TAG, "测试模式：当前已在主界面")
        }
        
        /* 原来的登录检查逻辑（已注释，测试时使用上面的代码）
        lifecycleScope.launch {
            try {
                // 检查登录状态（支持自动刷新 Token）
                val isLoggedIn = AuthManager.isLoggedInAsync()
                
                // 检查当前目的地，避免重复导航
                val currentDestination = navController.currentDestination?.id
                
                if (isLoggedIn) {
                    // 已登录，如果当前在登录页或注册页，则导航到主界面
                    if (currentDestination == R.id.loginFragment || currentDestination == R.id.registerFragment) {
                        LogHelper.d(TAG, "用户已登录，从登录页/注册页导航到主界面")
                        navigateToMain()
                    } else {
                        LogHelper.d(TAG, "用户已登录，当前已在主界面")
                    }
                } else {
                    // 未登录，如果当前在主界面，则导航到登录页
                    if (currentDestination == R.id.mainFragment) {
                        LogHelper.d(TAG, "用户未登录，从主界面导航到登录页")
                        navigateToLogin()
                    } else {
                        LogHelper.d(TAG, "用户未登录，当前已在登录页")
                    }
                }
                
            } catch (e: Exception) {
                LogHelper.e(TAG, "检查登录状态失败", e)
                // 出错时保持在当前页面
            }
        }
        */
    }
    
    // ==================== NavigationCallback 接口实现 ====================
    
    override fun navigateToMain() {
        val navController = navHostFragment?.navController ?: return
        try {
            val currentDestination = navController.currentDestination?.id
            // 根据当前目的地选择正确的 action
            when (currentDestination) {
                R.id.loginFragment -> {
                    // 从登录页导航到主界面，清除返回栈
                    navController.navigate(R.id.action_loginFragment_to_mainFragment)
                }
                R.id.registerFragment -> {
                    // 从注册页导航到主界面，清除返回栈
                    navController.navigate(R.id.action_registerFragment_to_mainFragment)
                }
                else -> {
                    // 如果已经在主界面，不需要导航
                    LogHelper.d(TAG, "已在主界面，跳过导航")
                }
            }
        } catch (e: Exception) {
            LogHelper.e(TAG, "导航到主界面失败", e)
        }
    }
    
    override fun navigateToLogin() {
        val navController = navHostFragment?.navController ?: return
        try {
            // 导航到登录页，清除注册页的返回栈
            val currentDestination = navController.currentDestination?.id
            if (currentDestination == R.id.registerFragment) {
                navController.navigate(R.id.action_registerFragment_to_loginFragment)
            } else {
                // 如果已经在登录页，不需要导航
                LogHelper.d(TAG, "已在登录页，跳过导航")
            }
        } catch (e: Exception) {
            LogHelper.e(TAG, "导航到登录页失败", e)
        }
    }
    
    override fun navigateToRegister() {
        val navController = navHostFragment?.navController ?: return
        try {
            // 导航到注册页
            navController.navigate(R.id.action_loginFragment_to_registerFragment)
        } catch (e: Exception) {
            LogHelper.e(TAG, "导航到注册页失败", e)
        }
    }
}

