package com.suno.android.common_data.di import android.content.Context import androidx.work.WorkManager import com.suno.android.common_data.alerts.AlertsRepo import com.suno.android.common_data.alerts.AlertsRepoImpl import com.suno.android.common_data.discover.DiscoverRepository import com.suno.android.common_data.discover.NetworkDiscoverRepository import com.suno.android.common_data.managers.HookDownloadManager import com.suno.android.common_data.managers.HookDownloadManagerImpl import com.suno.android.common_data.promos.DefaultPromoBannersRepository import com.suno.android.common_data.promos.PromoBannersRepository import com.suno.android.common_data.repos.ClipMetricsRepository import com.suno.android.common_data.repos.ClipsRepository import com.suno.android.common_data.repos.DefaultClipMetricsRepository import com.suno.android.common_data.repos.DefaultClipsRepository import com.suno.android.common_data.repos.DefaultGenerationRepository import com.suno.android.common_data.repos.DefaultHooksRepository import com.suno.android.common_data.repos.DefaultProfilesRepository import com.suno.android.common_data.repos.DefaultRecommendationsRepository import com.suno.android.common_data.repos.DownloadsRepo import com.suno.android.common_data.repos.DownloadsRepoImpl import com.suno.android.common_data.repos.GenerationRepository import com.suno.android.common_data.repos.HooksRepository import com.suno.android.common_data.repos.PlaylistsRepo import com.suno.android.common_data.repos.PlaylistsRepoImpl import com.suno.android.common_data.repos.ProfilesRepository import com.suno.android.common_data.repos.ProjectsRepository import com.suno.android.common_data.repos.ProjectsRepositoryImpl import com.suno.android.common_data.repos.RecommendationsRepository import com.suno.android.common_data.repos.comments.CommentsRepository import com.suno.android.common_data.repos.comments.DefaultCommentsRepository import com.suno.android.common_data.upload.DefaultUploadsRepository import com.suno.android.common_data.upload.UploadsRepository import dagger.Binds 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) abstract class DataModule { @Binds internal abstract fun providePlaylistsRepo( playlistsRepo: PlaylistsRepoImpl, ): PlaylistsRepo @Binds internal abstract fun provideProjectsRepo( projectsRepo: ProjectsRepositoryImpl, ): ProjectsRepository @Binds internal abstract fun providesDownloadsRepo( downloadsRepo: DownloadsRepoImpl, ): DownloadsRepo @Binds @Singleton internal abstract fun provideAlertsRepo( alertsRepo: AlertsRepoImpl, ): AlertsRepo @Binds internal abstract fun bindsClipRepo( clipsRepository: DefaultClipsRepository, ): ClipsRepository @Binds internal abstract fun bindsClipMetricsRepo( clipsMetricsRepository: DefaultClipMetricsRepository, ): ClipMetricsRepository @Binds internal abstract fun bindsDiscoverRepo( discoverRepository: NetworkDiscoverRepository, ): DiscoverRepository @Binds internal abstract fun bindsGenerationRepo( generationRepository: DefaultGenerationRepository, ): GenerationRepository @Binds internal abstract fun bindsUploadsRepo( uploadsRepository: DefaultUploadsRepository, ): UploadsRepository @Binds internal abstract fun bindsHooksRepo( hooksRepository: DefaultHooksRepository, ): HooksRepository @Binds internal abstract fun bindsPromoBannersRepo( promoBannersRepository: DefaultPromoBannersRepository, ): PromoBannersRepository @Binds internal abstract fun bindsProfilesRepo( profilesRepository: DefaultProfilesRepository, ): ProfilesRepository @Binds internal abstract fun bindsRecommendationsRepo( recommendationsRepository: DefaultRecommendationsRepository, ): RecommendationsRepository @Binds internal abstract fun bindsCommentsRepository( commentsRepository: DefaultCommentsRepository, ): CommentsRepository @Binds @Singleton internal abstract fun bindsHookDownloadManager( hookDownloadManager: HookDownloadManagerImpl, ): HookDownloadManager companion object { @Provides fun provideWorkManager( @ApplicationContext context: Context, ) = WorkManager.getInstance(context) } }