package com.enterprise.mdm.data.api import com.enterprise.mdm.BuildConfig import com.enterprise.mdm.data.prefs.SessionManager import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import java.util.concurrent.TimeUnit object RetrofitClient { @Volatile private var service: ApiService? = null fun api(session: SessionManager): ApiService { return service ?: synchronized(this) { service ?: build(session).also { service = it } } } private fun build(session: SessionManager): ApiService { val logging = HttpLoggingInterceptor().apply { level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE } val client = OkHttpClient.Builder() .connectTimeout(20, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .addInterceptor { chain -> val builder = chain.request().newBuilder() session.token?.let { builder.addHeader("Authorization", "Bearer $it") } chain.proceed(builder.build()) } .addInterceptor(logging) .build() return Retrofit.Builder() .baseUrl(BuildConfig.API_BASE_URL) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build() .create(ApiService::class.java) } fun reset() { service = null } }