package com.suno.android.ui.screens.onboarding import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.suno.android.analytics.MobileMeasurementPartnerManager import com.suno.android.common_analytics.managers.AnalyticsManager import com.suno.android.gating.Feature import com.suno.android.gating.FeatureManager import com.suno.android.utils.resolvers.ScreenVisitResolver import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class OnboardingNavGraphVM @Inject constructor( featureManager: FeatureManager, private val analyticsManager: AnalyticsManager, private val screenVisitResolver: ScreenVisitResolver, mmpManager: MobileMeasurementPartnerManager, ) : ViewModel() { private val _viewStateFlow = MutableStateFlow( OnboardingNavGraphUiState( isAddProfilePhotoGateEnabled = featureManager.hasFeature(Feature.AddProfilePicture), ), ) fun viewStateFlow(): StateFlow = _viewStateFlow.asStateFlow() private val _effects = MutableSharedFlow() fun effects() = _effects.asSharedFlow() init { mmpManager.logRegistrationCompleted() } fun trackScreen( screenName: String?, ) { screenVisitResolver.resolve(screenName)?.value?.let { analyticsManager.trackScreenVisit(it) } } fun navigateToWhatsYourNameScreen() { viewModelScope.launch { _effects.emit(OnboardingNavGraphEffects.RouteToWhatsYourName) } } fun navigateToUsernameHandleScreen() { viewModelScope.launch { _effects.emit(OnboardingNavGraphEffects.RouteToUsernameHandle) } } fun navigateToAddProfilePhotoScreen() { viewModelScope.launch { _effects.emit(OnboardingNavGraphEffects.RouteToAddProfilePhoto) } } fun navigateToAllowNotificationsScreen() { viewModelScope.launch { _effects.emit(OnboardingNavGraphEffects.RouteToAllowNotifications) } } fun navigateToCompleteOnboarding() { viewModelScope.launch { _effects.emit(OnboardingNavGraphEffects.CompleteOnboarding) } } sealed interface OnboardingNavGraphEffects { data object RouteToWhatsYourName : OnboardingNavGraphEffects data object RouteToUsernameHandle : OnboardingNavGraphEffects data object RouteToAddProfilePhoto : OnboardingNavGraphEffects data object RouteToAllowNotifications : OnboardingNavGraphEffects data object CompleteOnboarding : OnboardingNavGraphEffects } } data class OnboardingNavGraphUiState( val isAddProfilePhotoGateEnabled: Boolean = false, )