package core.di import com.google.gson.GsonBuilder import core.network.AuthInterceptor import core.network.DynamicBaseUrlInterceptor import core.network.ServerConfig import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import java.util.concurrent.TimeUnit import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object NetworkModule { @Provides @Singleton fun provideOkHttpClient( authInterceptor: AuthInterceptor, dynamicBaseUrlInterceptor: DynamicBaseUrlInterceptor ): OkHttpClient { val logging = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY } return OkHttpClient.Builder() .connectTimeout(60, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) .writeTimeout(300, TimeUnit.SECONDS) .addInterceptor(logging) .addInterceptor(dynamicBaseUrlInterceptor) .addInterceptor(authInterceptor) .build() } @Provides @Singleton fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit { val gson = com.google.gson.GsonBuilder() .serializeNulls() .create() return Retrofit.Builder() .baseUrl("https://api.placeholder.com/") .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create(gson)) .build() } }