package com.novoda.bonfire;
import android.content.Context;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.FirebaseDatabase;
import com.novoda.bonfire.analytics.Analytics;
import com.novoda.bonfire.analytics.ErrorLogger;
import com.novoda.bonfire.analytics.FirebaseAnalyticsAnalytics;
import com.novoda.bonfire.analytics.FirebaseErrorLogger;
import com.novoda.bonfire.channel.database.FirebaseChannelsDatabase;
import com.novoda.bonfire.channel.service.ChannelService;
import com.novoda.bonfire.channel.service.PersistedChannelService;
import com.novoda.bonfire.chat.database.FirebaseChatDatabase;
import com.novoda.bonfire.chat.service.ChatService;
import com.novoda.bonfire.chat.service.PersistedChatService;
import com.novoda.bonfire.login.database.FirebaseAuthDatabase;
import com.novoda.bonfire.login.service.FirebaseLoginService;
import com.novoda.bonfire.login.service.LoginService;
import com.novoda.bonfire.rx.FirebaseObservableListeners;
import com.novoda.bonfire.user.database.FirebaseUserDatabase;
import com.novoda.bonfire.user.service.PersistedUserService;
import com.novoda.bonfire.user.service.UserService;
public enum Dependencies {
INSTANCE;
private Analytics analytics;
private ErrorLogger errorLogger;
private LoginService loginService;
private ChatService chatService;
private ChannelService channelService;
private UserService userService;
private Config config;
public void init(Context context) {
if (needsInitialisation()) {
Context appContext = context.getApplicationContext();
FirebaseApp firebaseApp = FirebaseApp.initializeApp(appContext, FirebaseOptions.fromResource(appContext), "Bonfire");
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp);
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(firebaseApp);
firebaseDatabase.setPersistenceEnabled(true);
FirebaseObservableListeners firebaseObservableListeners = new FirebaseObservableListeners();
FirebaseUserDatabase userDatabase = new FirebaseUserDatabase(firebaseDatabase, firebaseObservableListeners);
analytics = new FirebaseAnalyticsAnalytics(FirebaseAnalytics.getInstance(appContext));
errorLogger = new FirebaseErrorLogger();
loginService = new FirebaseLoginService(new FirebaseAuthDatabase(firebaseAuth), userDatabase);
chatService = new PersistedChatService(new FirebaseChatDatabase(firebaseDatabase, firebaseObservableListeners));
channelService = new PersistedChannelService(new FirebaseChannelsDatabase(firebaseDatabase, firebaseObservableListeners), userDatabase);
userService = new PersistedUserService(userDatabase);
config = FirebaseConfig.newInstance().init(errorLogger);
}
}
private boolean needsInitialisation() {
return loginService == null || chatService == null || channelService == null
|| userService == null || analytics == null || errorLogger == null;
}
public Analytics getAnalytics() {
return analytics;
}
public LoginService getLoginService() {
return loginService;
}
public ChatService getChatService() {
return chatService;
}
public ChannelService getChannelService() {
return channelService;
}
public UserService getUserService() {
return userService;
}
public ErrorLogger getErrorLogger() {
return errorLogger;
}
public Config getConfig() {
return config;
}
}