package com.example.match

import androidx.compose.runtime.Composable
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.example.match.ui.home.HomePage
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import com.example.match.ui.home.HomeViewModel
import com.example.match.ui.matchdetail.MatchDetailScreen

@Composable
fun AppNavHost() {
    val navController = rememberNavController()


    NavHost(
        navController = navController,
        startDestination = "splash"
    ) {
        // Splash
        composable("splash") {
            SplashScreen(
                onTimeout = {
                    navController.navigate("login") {
                        popUpTo("splash") { inclusive = true }
                    }
                }
            )
        }

        // Login
        composable(
            route = "login",
            arguments = listOf(navArgument("fromApp") {
                defaultValue = false
            })
        ) { backStackEntry ->


            val fromApp = backStackEntry.arguments?.getBoolean("fromApp") ?: false


            val sessionViewModel: SessionViewModel = viewModel()
            val loginViewModel: LoginViewModel = viewModel()


            (if (!fromApp) {
                {

                    sessionViewModel.setLoggedIn(false)
                    navController.navigate("home") { popUpTo("login") { inclusive = true } }
                }
            } else null)?.let {
                LoginScreen(
                    loginViewModel = loginViewModel,
                    onSkip = it,
                    onLoginSuccess = {

                        sessionViewModel.setLoggedIn(true)
                        navController.navigate("home") { popUpTo("login") { inclusive = true } }
                    },
                    onRegisterClicked = { navController.navigate("register") },
                    onForgotPassword = { },
                    onClose = if (fromApp) {

                        { navController.popBackStack() }
                    } else null
                )
            }
        }

        composable("register") {
            RegisterScreen(
                onRegisterSuccess = { successMsg ->
                    navController.navigate("home") {
                        popUpTo("register") { inclusive = true }
                    }
                },
                onAlreadyHaveAccount = { navController.navigate("login") }
            )
        }

        // Home
        composable("home") {
            val viewModel: HomeViewModel = hiltViewModel()
            val liveScores by viewModel.todayLiveScores.collectAsState()
            val upcomingMatches by viewModel.upcomingMatches.collectAsState()

            HomePage(
                liveScores = liveScores,
                upcomingMatches = upcomingMatches,
                currentTab = "home",
                onNavigationClick = { destination -> navController.navigate(destination) },
                navController = navController  // Pass navController here
            )
        }


        composable("matchDetail/{matchId}") { backStackEntry ->
            val matchId = backStackEntry.arguments?.getString("matchId") ?: ""
            val sessionViewModel: SessionViewModel = viewModel()
            val userId by sessionViewModel.userId.collectAsState()

            MatchDetailScreen(
                matchId = matchId,
                userId = userId,
                onBackClick = { navController.popBackStack() },
                onRequireLogin = {
                    navController.navigate("login?fromApp=true")
                }
            )
        }




        composable("profile") {
            ProfileScreen(
                onClose = { navController.navigate("home") }
            )
        }

        composable("settings") {
            SettingsScreen(
                onClose = { navController.navigate("home") }
            )
        }



    }
}