package com.azimo.tool.firebase.module;
import com.azimo.tool.config.AppConfig;
import com.azimo.tool.config.AppConfigKey;
import com.azimo.tool.firebase.FirebaseAuth;
import com.azimo.tool.firebase.FirebaseService;
import com.azimo.tool.firebase.FirebaseServiceManager;
import com.azimo.tool.firebase.interceptor.FirebaseContentTypeInterceptor;
import com.azimo.tool.firebase.interceptor.FirebaseCredentialInterceptor;
import com.azimo.tool.firebase.mapper.CreatedIssueMapper;
import com.azimo.tool.firebase.mapper.ReportedReviewMapper;
import com.azimo.tool.utils.file.FilePathParser;
import com.google.gson.Gson;
import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;
import javax.inject.Named;
import javax.inject.Singleton;
import java.util.concurrent.TimeUnit;
/**
* Created by F1sherKK on 16/01/17.
*/
@Module
public class FirebaseModule {
@Singleton
@Provides
@Named("FirebaseApi")
public OkHttpClient provideFirebaseOkHttpClient(AppConfig appConfig,
FilePathParser pathParser,
FirebaseAuth firebaseAuth) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
clientBuilder.addInterceptor(new FirebaseContentTypeInterceptor());
clientBuilder.addInterceptor(new FirebaseCredentialInterceptor(firebaseAuth, appConfig, pathParser));
clientBuilder.connectTimeout(60 * 1000, TimeUnit.MILLISECONDS);
clientBuilder.readTimeout(60 * 1000, TimeUnit.MILLISECONDS);
clientBuilder.writeTimeout(60 * 1000, TimeUnit.MILLISECONDS);
return clientBuilder.build();
}
@Singleton
@Provides
@Named("FirebaseApi")
public Retrofit provideFirebaseRetrofit(AppConfig appConfig,
@Named("FirebaseApi") OkHttpClient okHttpClient) {
Retrofit.Builder builder = new Retrofit.Builder();
builder.baseUrl(appConfig.get(AppConfigKey.FIREBASE_BASEPATH))
.client(okHttpClient)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create());
return builder.build();
}
@Singleton
@Provides
public FirebaseService provideFirebaseIssueService(@Named("FirebaseApi") Retrofit firebaseRetrofit) {
return firebaseRetrofit.create(FirebaseService.class);
}
@Singleton
@Provides
public FirebaseServiceManager provideFirebaseIssueServiceManager(FirebaseService issueService,
CreatedIssueMapper createdIssueMapper,
ReportedReviewMapper reportedReviewMapper) {
return new FirebaseServiceManager(issueService, createdIssueMapper, reportedReviewMapper);
}
@Singleton
@Provides
public CreatedIssueMapper provideCreatedIssueMapper() {
return new CreatedIssueMapper();
}
@Singleton
@Provides
public ReportedReviewMapper provideReportedReviewMapper() {
return new ReportedReviewMapper();
}
@Singleton
@Provides
public FirebaseAuth provideFirebaseAuth() {
return new FirebaseAuth();
}
}