package com.suno.android.ui.screens.create import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import com.suno.android.common_ui.animations.NavigationFadeInAnimation import com.suno.android.common_ui.animations.NavigationFadeOutAnimation import com.suno.android.common_ui.extensions.windowInsetsPadding import com.suno.android.ui.screens.navigation.NavDestination @Composable fun CreateNavGraph( vm: CreateNavGraphVM = hiltViewModel(), rootNavHostController: NavHostController, starterPrompt: String?, onSongGenJobStarted: () -> Unit, ) { val createNavController = rememberNavController() LaunchedEffect(createNavController) { createNavController.addOnDestinationChangedListener { controller, destination, arguments -> vm.trackScreen( screenName = destination.route, ) } } Scaffold { innerPadding -> Box( modifier = Modifier .fillMaxSize() .windowInsetsPadding(innerPadding), ) { NavHost( navController = createNavController, startDestination = NavDestination.Create.CreateScreenModeSelectionDestination, enterTransition = { NavigationFadeInAnimation }, exitTransition = { NavigationFadeOutAnimation }, ) { composable { CreateModeSelectionScreen( vm = hiltViewModel(), starterPrompt = starterPrompt, onCreateMode = { onSongGenJobStarted.invoke() }, onUpsellRedirect = { rootNavHostController.navigate( route = NavDestination.Billing.BillingNavGraphDestination, ) }, ) } } } } }