package com.amazon.ivs.multihostdemo.injection import android.content.Context import com.amazon.ivs.multihostdemo.common.extensions.ioScope import com.amazon.ivs.multihostdemo.common.ivs.chat.ChatManager import com.amazon.ivs.multihostdemo.common.ivs.chat.ChatManagerImpl import com.amazon.ivs.multihostdemo.repository.StageRepository import com.amazon.ivs.multihostdemo.repository.StageRepositoryImpl import com.amazon.ivs.multihostdemo.repository.UserRepository import com.amazon.ivs.multihostdemo.repository.UserRepositoryImpl import com.amazon.ivs.multihostdemo.repository.cache.SecuredPreferenceProvider import com.amazon.ivs.multihostdemo.repository.networking.Endpoints import com.amazon.ivs.multihostdemo.repository.networking.NetworkClient import com.amazon.ivs.stagebroadcastmanager.StageBroadcastManager import com.amazon.ivs.stagebroadcastmanager.StageBroadcastManagerImpl import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton fun provideAPI(): Endpoints = NetworkClient().api @Provides @Singleton fun provideSecuredPrefs(@ApplicationContext context: Context) = SecuredPreferenceProvider(context) @Provides @Singleton fun provideChatManager(): ChatManager = ChatManagerImpl() @Provides @Singleton fun provideUserRepository( securedPreferenceProvider: SecuredPreferenceProvider, ): UserRepository = UserRepositoryImpl(securedPreferenceProvider) @Provides @Singleton fun provideStageRepository( api: Endpoints, securedPreferenceProvider: SecuredPreferenceProvider, ): StageRepository = StageRepositoryImpl(api, securedPreferenceProvider, ioScope) @Provides @Singleton fun provideStageBroadcastManager( @ApplicationContext context: Context, securedPreferenceProvider: SecuredPreferenceProvider ): StageBroadcastManager = StageBroadcastManagerImpl(context, securedPreferenceProvider.username, securedPreferenceProvider.avatarUrl) }