package com.suno.android.ui.screens.onboarding.welcome import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.exoplayer.ExoPlayer import com.suno.android.common_mvi.MviProcessorFactory import com.suno.android.common_mvi.MviViewModel import com.suno.android.media.VideoPreview import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import javax.inject.Inject @HiltViewModel class WelcomeScreenVM @Inject constructor( processorFactory: MviProcessorFactory, @VideoPreview val exoPlayer: ExoPlayer, ) : MviViewModel( processorFactory = processorFactory, initialState = WelcomeScreenState.NoOp, ) { init { exoPlayer.repeatMode = Player.REPEAT_MODE_ALL exoPlayer.setMediaItem( MediaItem.fromUri( "asset:///landing-video-1080p.webm", ), ) exoPlayer.prepare() exoPlayer.play() } private val _viewStateFlow = MutableStateFlow( UiState(), ) val viewStateFlow: StateFlow = _viewStateFlow.asStateFlow() data class UiState( val loading: Boolean = false, ) override suspend fun reduceEvent( currentState: WelcomeScreenState, event: WelcomeScreenEvent, emitEffect: suspend (WelcomeScreenEffect) -> Unit, ): WelcomeScreenState { when (event) { WelcomeScreenEvent.OnSignInClicked, WelcomeScreenEvent.OnSignUpClicked -> { emitEffect(WelcomeScreenEffect.NavigateToLoginOptionsEffect) } } return currentState } }