package com.suno.android.ui.screens.hooks.player import androidx.lifecycle.viewModelScope import com.suno.android.common_mvi.MviProcessorFactory import com.suno.android.common_mvi.MviViewModel import com.suno.android.ui.screens.hooks.feed.HooksFeedController import com.suno.android.ui.screens.hooks.feed.HooksFeedSource import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.lifecycle.HiltViewModel @HiltViewModel(assistedFactory = HooksPlayerVM.Factory::class) class HooksPlayerVM @AssistedInject constructor( mviProcessorFactory: MviProcessorFactory, @Assisted source: HooksFeedSource, @Assisted startIndex: Int, hooksFeedControllerFactory: HooksFeedController.Factory, ) : MviViewModel( processorFactory = mviProcessorFactory, initialState = HooksPlayerState.Default, ) { @AssistedFactory interface Factory { fun create( source: HooksFeedSource, startIndex: Int, ): HooksPlayerVM } val hooksFeedController = hooksFeedControllerFactory.create( coroutineScope = viewModelScope, source = source, startIndex = startIndex, ) override suspend fun reduceEvent( currentState: HooksPlayerState, event: HooksPlayerEvent, emitEffect: suspend (HooksPlayerEffect) -> Unit, ): HooksPlayerState = currentState }