package com.socialapp.presentation.navigation import androidx.compose.runtime.Composable import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import com.socialapp.presentation.ui.screens.* sealed class Screen(val route: String) { object Splash : Screen("splash") object Auth : Screen("auth") object Home : Screen("home") object Explore : Screen("explore") object Search : Screen("search") object CreatePost : Screen("create_post") object Chat : Screen("chat") object ChatDetail : Screen("chat_detail/{chatId}") object Notifications : Screen("notifications") object Comments : Screen("comments/{postId}") object EditProfile : Screen("edit_profile") object UserProfile : Screen("user_profile/{userId}") object Followers : Screen("followers/{userId}") object Following : Screen("following/{userId}") object PostDetail : Screen("post_detail/{postId}") object Stories : Screen("stories") object StoryViewer : Screen("story_viewer/{storyId}") object Profile : Screen("profile") object Reels : Screen("reels") object Settings : Screen("settings") } @Composable fun AppNavGraph(navController: NavHostController) { NavHost(navController = navController, startDestination = Screen.Auth.route) { composable(Screen.Splash.route) { // SplashScreen() } composable(Screen.Auth.route) { AuthScreen( onAuthSuccess = { navController.navigate(Screen.Home.route) { popUpTo(Screen.Auth.route) { inclusive = true } } } ) } composable(Screen.Home.route) { HomeScreen( onCreatePostClick = { navController.navigate(Screen.CreatePost.route) }, onPostClick = { postId -> navController.navigate("post_detail/$postId") }, onUserClick = { userId -> navController.navigate("user_profile/$userId") }, onCommentsClick = { postId -> navController.navigate("comments/$postId") } ) } composable(Screen.Explore.route) { ExploreScreen( onPostClick = { postId -> navController.navigate("post_detail/$postId") }, onProfileClick = { userId -> navController.navigate("user_profile/$userId") } ) } composable(Screen.Search.route) { SearchScreen( onUserClick = { userId -> navController.navigate("user_profile/$userId") }, onPostClick = { postId -> navController.navigate("post_detail/$postId") } ) } composable(Screen.CreatePost.route) { CreatePostScreen( onBackClick = { navController.popBackStack() }, onPostCreated = { navController.popBackStack() } ) } composable(Screen.Chat.route) { ChatScreen( onChatClick = { chatId -> navController.navigate("chat_detail/$chatId") } ) } composable(Screen.ChatDetail.route) { backStackEntry -> val chatId = backStackEntry.arguments?.getString("chatId")?.toInt() ?: 0 ChatDetailScreen( chatId = chatId, onBackClick = { navController.popBackStack() } ) } composable(Screen.Notifications.route) { NotificationScreen( onUserClick = { userId -> navController.navigate("user_profile/$userId") }, onPostClick = { postId -> navController.navigate("post_detail/$postId") } ) } composable(Screen.Comments.route) { backStackEntry -> val postId = backStackEntry.arguments?.getString("postId")?.toInt() ?: 0 CommentsScreen( postId = postId, onBackClick = { navController.popBackStack() }, onUserClick = { userId -> navController.navigate("user_profile/$userId") } ) } composable(Screen.EditProfile.route) { EditProfileScreen( onBackClick = { navController.popBackStack() }, onSaveClick = { navController.popBackStack() } ) } composable(Screen.UserProfile.route) { backStackEntry -> val userId = backStackEntry.arguments?.getString("userId")?.toInt() ?: 0 UserProfileScreen( userId = userId, onBackClick = { navController.popBackStack() }, onEditClick = { navController.navigate(Screen.EditProfile.route) }, onFollowClick = { }, onPostClick = { postId -> navController.navigate("post_detail/$postId") } ) } composable(Screen.Followers.route) { backStackEntry -> val userId = backStackEntry.arguments?.getString("userId")?.toInt() ?: 0 FollowersScreen( title = "Followers", onBackClick = { navController.popBackStack() }, onUserClick = { followerId -> navController.navigate("user_profile/$followerId") } ) } composable(Screen.Following.route) { backStackEntry -> val userId = backStackEntry.arguments?.getString("userId")?.toInt() ?: 0 FollowersScreen( title = "Following", onBackClick = { navController.popBackStack() }, onUserClick = { followingId -> navController.navigate("user_profile/$followingId") } ) } composable(Screen.PostDetail.route) { backStackEntry -> val postId = backStackEntry.arguments?.getString("postId")?.toInt() ?: 0 PostDetailScreen( postId = postId, onBackClick = { navController.popBackStack() }, onUserClick = { userId -> navController.navigate("user_profile/$userId") }, onCommentsClick = { navController.navigate("comments/$postId") }, onLikeClick = { } ) } composable(Screen.Stories.route) { StoriesScreen( onBackClick = { navController.popBackStack() }, onStoryClick = { storyId -> navController.navigate("story_viewer/$storyId") }, onCreateStoryClick = { } ) } composable(Screen.StoryViewer.route) { backStackEntry -> val storyId = backStackEntry.arguments?.getString("storyId")?.toInt() ?: 0 StoryViewer( storyId = storyId, onBackClick = { navController.popBackStack() }, onReply = { } ) } composable(Screen.Profile.route) { ProfileScreen( onSettingsClick = { navController.navigate(Screen.Settings.route) }, onEditClick = { navController.navigate(Screen.EditProfile.route) }, onFollowersClick = { userId -> navController.navigate("followers/$userId") }, onFollowingClick = { userId -> navController.navigate("following/$userId") } ) } composable(Screen.Reels.route) { ReelScreen( onBackClick = { navController.popBackStack() } ) } composable(Screen.Settings.route) { SettingsScreen( onBackClick = { navController.popBackStack() }, onLogout = { navController.navigate(Screen.Auth.route) { popUpTo(Screen.Home.route) { inclusive = true } } } ) } } }