package org.bookdash.android;
import android.content.Context;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.storage.FirebaseStorage;
import org.bookdash.android.config.FirebaseConfig;
import org.bookdash.android.config.RemoteConfigSettingsApi;
import org.bookdash.android.data.book.BookService;
import org.bookdash.android.data.book.BookServiceImpl;
import org.bookdash.android.data.book.DownloadService;
import org.bookdash.android.data.book.DownloadServiceImpl;
import org.bookdash.android.data.database.firebase.FirebaseBookDatabase;
import org.bookdash.android.data.settings.SettingsApiImpl;
import org.bookdash.android.data.settings.SettingsRepositories;
import org.bookdash.android.data.settings.SettingsRepository;
import org.bookdash.android.data.tracking.Analytics;
import org.bookdash.android.data.tracking.BookDashFirebaseAnalytics;
import org.bookdash.android.data.tutorial.TutorialsRepositories;
import org.bookdash.android.data.tutorial.TutorialsRepository;
import org.bookdash.android.data.utils.firebase.FirebaseObservableListeners;
/**
* @author rebeccafranks
* @since 15/11/03.
*/
public class Injection {
public static final String STORAGE_PREFIX = "gs://book-dash-qa.appspot.com/";
private static BookService bookService = null;
private static RemoteConfigSettingsApi config;
private static DownloadService downloadService = null;
private static Analytics firebaseAnalytics = null;
private Injection() {
}
public static void init(Context context) {
if (!isInitialized()) {
FirebaseApp firebaseApp = FirebaseApp
.initializeApp(context, FirebaseOptions.fromResource(context), "Book Dash");
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(firebaseApp);
firebaseDatabase.setPersistenceEnabled(true);
FirebaseObservableListeners firebaseObservableListeners = new FirebaseObservableListeners();
FirebaseBookDatabase bookDatabase = new FirebaseBookDatabase(firebaseDatabase, firebaseObservableListeners);
bookService = new BookServiceImpl(bookDatabase);
config = FirebaseConfig.newInstance().init();
downloadService = new DownloadServiceImpl(FirebaseStorage.getInstance(firebaseApp));
firebaseAnalytics = new BookDashFirebaseAnalytics(FirebaseAnalytics.getInstance(context));
}
}
private static boolean isInitialized() {
return bookService != null && config != null;
}
public static SettingsRepository provideSettingsRepo(Context context) {
return SettingsRepositories
.getInstance(new SettingsApiImpl(context, provideRemoteConfig()), FirebaseMessaging.getInstance());
}
private static RemoteConfigSettingsApi provideRemoteConfig() {
return config;
}
public static TutorialsRepository provideTutorialRepo(Context context) {
return TutorialsRepositories.getInstance(context);
}
public static BookService provideBookService() {
return bookService;
}
public static DownloadService provideDownloadService() {
return downloadService;
}
public static Analytics provideAnalytics() {
return firebaseAnalytics;
}
}