package com.socialapp.di import android.content.Context import androidx.room.Room import com.socialapp.data.api.ApiService import com.socialapp.data.api.JwtInterceptor import com.socialapp.data.api.JwtTokenManager import com.socialapp.data.db.AppDatabase import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object AppModule { private const val API_BASE_URL = "http://your-api-url.com/" @Provides @Singleton fun provideOkHttpClient(): OkHttpClient { val loggingInterceptor = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY } val jwtInterceptor = JwtInterceptor { JwtTokenManager.getToken() } return OkHttpClient.Builder() .addInterceptor(jwtInterceptor) .addInterceptor(loggingInterceptor) .build() } @Provides @Singleton fun provideApiService(okHttpClient: OkHttpClient): ApiService { return Retrofit.Builder() .baseUrl(API_BASE_URL) .client(okHttpClient) .addConverterFactory(MoshiConverterFactory.create()) .build() .create(ApiService::class.java) } @Provides @Singleton fun provideAppDatabase( @ApplicationContext context: Context ): AppDatabase { return Room.databaseBuilder( context, AppDatabase::class.java, "socialapp.db" ).build() } }