package chats.di import android.content.Context import chats.data.remote.api.ChatApi import chats.data.remote.signalr.ChatHubClient import chats.data.repository.ChatRepositoryImpl import chats.data.signalr.MessageSignalRHandler import chats.domain.repository.ChatRepository import core.database.data.ChatDatabase import core.database.data.MessageDao import core.network.ServerConfig import core.security.TokenManager import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import retrofit2.Retrofit import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object ChatModule { @Provides @Singleton fun provideChatApi(retrofit: Retrofit): ChatApi { return retrofit.create(ChatApi::class.java) } @Provides @Singleton fun provideMessageSignalRHandler( hubClient: ChatHubClient, dao: MessageDao, serverConfig: ServerConfig, tokenManager: TokenManager ): MessageSignalRHandler { return MessageSignalRHandler(hubClient, dao, serverConfig, tokenManager) } @Provides @Singleton fun provideChatRepository( api: ChatApi, tokenManager: TokenManager, serverConfig: ServerConfig, dao: MessageDao, database: ChatDatabase, hubClient: ChatHubClient, signalRHandler: MessageSignalRHandler, @ApplicationContext context: Context ): ChatRepository { return ChatRepositoryImpl(api, tokenManager, serverConfig, dao, database, hubClient, signalRHandler, context) } @Provides @Singleton fun provideChatHubClient(): ChatHubClient { return ChatHubClient() } }