package com.radiola.di import android.content.Context import androidx.room.Room import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.radiola.data.local.AppDatabase import com.radiola.data.remote.RecordApi import com.radiola.data.repository.FavoritesRepositoryImpl import com.radiola.data.repository.NowPlayingRepositoryImpl import com.radiola.data.repository.SettingsRepositoryImpl import com.radiola.data.repository.StationRepositoryImpl import com.radiola.data.repository.TrackHistoryRepositoryImpl import com.radiola.domain.repository.FavoritesRepository import com.radiola.domain.repository.NowPlayingRepository import com.radiola.domain.repository.SettingsRepository import com.radiola.domain.repository.StationRepository import com.radiola.domain.repository.TrackHistoryRepository import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton fun provideJson(): Json = Json { ignoreUnknownKeys = true coerceInputValues = true } @Provides @Singleton fun provideOkHttpClient(): OkHttpClient = OkHttpClient.Builder() .addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BASIC }) .build() @Provides @Singleton fun provideRetrofit(okHttpClient: OkHttpClient, json: Json): Retrofit = Retrofit.Builder() .baseUrl("https://www.radiorecord.ru/") .client(okHttpClient) .addConverterFactory(json.asConverterFactory("application/json".toMediaType())) .build() @Provides @Singleton fun provideRecordApi(retrofit: Retrofit): RecordApi = retrofit.create(RecordApi::class.java) @Provides @Singleton fun provideDatabase(@ApplicationContext context: Context): AppDatabase = Room.databaseBuilder(context, AppDatabase::class.java, "radiola.db") .build() @Provides @Singleton fun provideStationRepository(impl: StationRepositoryImpl): StationRepository = impl @Provides @Singleton fun provideNowPlayingRepository(impl: NowPlayingRepositoryImpl): NowPlayingRepository = impl @Provides @Singleton fun provideFavoritesRepository(impl: FavoritesRepositoryImpl): FavoritesRepository = impl @Provides @Singleton fun provideTrackHistoryRepository(impl: TrackHistoryRepositoryImpl): TrackHistoryRepository = impl @Provides @Singleton fun provideSettingsRepository(impl: SettingsRepositoryImpl): SettingsRepository = impl }