package io.fullstack.firestack;
import android.content.Context;
import android.util.Log;
import android.os.Bundle;
import java.util.Iterator;
import java.util.Map;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReactContext;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.analytics.FirebaseAnalytics.Event.*;
import com.google.firebase.analytics.FirebaseAnalytics.Param;
class FirestackAnalyticsModule extends ReactContextBaseJavaModule {
private static final String TAG = "FirestackAnalytics";
private Context context;
private ReactContext mReactContext;
private FirebaseAnalytics mFirebaseAnalytics;
public FirestackAnalyticsModule(ReactApplicationContext reactContext) {
super(reactContext);
this.context = reactContext;
mReactContext = reactContext;
Log.d(TAG, "New instance");
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this.context);
}
@Override
public String getName() {
return TAG;
}
@ReactMethod
public void logEventWithName(final String name, final ReadableMap props, final Callback callback) {
// TODO
// FirestackUtils.todoNote(TAG, "logEventWithName", callback);
Map<String, Object> m = FirestackUtils.recursivelyDeconstructReadableMap(props);
final String eventName = getEventName(name);
final Bundle bundle = makeEventBundle(name, m);
Log.d(TAG, "Logging event " + eventName);
mFirebaseAnalytics.logEvent(name, bundle);
}
private String getEventName(final String name) {
if (name == FirebaseAnalytics.Event.ADD_PAYMENT_INFO) {return FirebaseAnalytics.Event.ADD_PAYMENT_INFO; }
else if (name == FirebaseAnalytics.Event.ADD_TO_CART) {return FirebaseAnalytics.Event.ADD_TO_CART;}
else if (name == FirebaseAnalytics.Event.ADD_TO_WISHLIST) {return FirebaseAnalytics.Event.ADD_TO_WISHLIST;}
else if (name == FirebaseAnalytics.Event.APP_OPEN) {return FirebaseAnalytics.Event.APP_OPEN;}
else if (name == FirebaseAnalytics.Event.BEGIN_CHECKOUT) {return FirebaseAnalytics.Event.BEGIN_CHECKOUT;}
else if (name == FirebaseAnalytics.Event.ECOMMERCE_PURCHASE) {return FirebaseAnalytics.Event.ECOMMERCE_PURCHASE;}
else if (name == FirebaseAnalytics.Event.GENERATE_LEAD) {return FirebaseAnalytics.Event.GENERATE_LEAD;}
else if (name == FirebaseAnalytics.Event.JOIN_GROUP) {return FirebaseAnalytics.Event.JOIN_GROUP;}
else if (name == FirebaseAnalytics.Event.LEVEL_UP) {return FirebaseAnalytics.Event.LEVEL_UP;}
else if (name == FirebaseAnalytics.Event.LOGIN) {return FirebaseAnalytics.Event.LOGIN;}
else if (name == FirebaseAnalytics.Event.POST_SCORE) {return FirebaseAnalytics.Event.POST_SCORE;}
else if (name == FirebaseAnalytics.Event.PRESENT_OFFER) {return FirebaseAnalytics.Event.PRESENT_OFFER;}
else if (name == FirebaseAnalytics.Event.PURCHASE_REFUND) {return FirebaseAnalytics.Event.PURCHASE_REFUND;}
else if (name == FirebaseAnalytics.Event.SEARCH) {return FirebaseAnalytics.Event.SEARCH;}
else if (name == FirebaseAnalytics.Event.SELECT_CONTENT) {return FirebaseAnalytics.Event.SELECT_CONTENT;}
else if (name == FirebaseAnalytics.Event.SHARE) {return FirebaseAnalytics.Event.SHARE;}
else if (name == FirebaseAnalytics.Event.SIGN_UP) {return FirebaseAnalytics.Event.SIGN_UP;}
else if (name == FirebaseAnalytics.Event.SPEND_VIRTUAL_CURRENCY) {return FirebaseAnalytics.Event.SPEND_VIRTUAL_CURRENCY;}
else if (name == FirebaseAnalytics.Event.TUTORIAL_BEGIN) {return FirebaseAnalytics.Event.TUTORIAL_BEGIN;}
else if (name == FirebaseAnalytics.Event.TUTORIAL_COMPLETE) {return FirebaseAnalytics.Event.TUTORIAL_COMPLETE;}
else if (name == FirebaseAnalytics.Event.UNLOCK_ACHIEVEMENT) {return FirebaseAnalytics.Event.UNLOCK_ACHIEVEMENT;}
else if (name == FirebaseAnalytics.Event.VIEW_ITEM) {return FirebaseAnalytics.Event.VIEW_ITEM;}
else if (name == FirebaseAnalytics.Event.VIEW_ITEM_LIST) {return FirebaseAnalytics.Event.VIEW_ITEM_LIST;}
else if (name == FirebaseAnalytics.Event.VIEW_SEARCH_RESULTS) {return FirebaseAnalytics.Event.VIEW_SEARCH_RESULTS;}
else return name;
}
private Bundle makeEventBundle(final String name, final Map<String, Object> map) {
Bundle bundle = new Bundle();
// Available from the Analytics event
if (map.containsKey("id")) {
String id = (String) map.get("id");
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);
}
if (map.containsKey("name")) {
String val = (String) map.get("name");
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, val);
}
if (map.containsKey("category")) {
String val = (String) map.get("category");
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, val);
}
if (map.containsKey("quantity")) {
double val = (double) map.get("quantity");
bundle.putDouble(FirebaseAnalytics.Param.QUANTITY, val);
}
if (map.containsKey("price")) {
double val = (double) map.get("price");
bundle.putDouble(FirebaseAnalytics.Param.PRICE, val);
}
if (map.containsKey("value")) {
double val = (double) map.get("value");
bundle.putDouble(FirebaseAnalytics.Param.VALUE, val);
}
if (map.containsKey("currency")) {
String val = (String) map.get("currency");
bundle.putString(FirebaseAnalytics.Param.CURRENCY, val);
}
if (map.containsKey("origin")) {
String val = (String) map.get("origin");
bundle.putString(FirebaseAnalytics.Param.ORIGIN, val);
}
if (map.containsKey("item_location_id")) {
String val = (String) map.get("item_location_id");
bundle.putString(FirebaseAnalytics.Param.ITEM_LOCATION_ID, val);
}
if (map.containsKey("location")) {
String val = (String) map.get("location");
bundle.putString(FirebaseAnalytics.Param.LOCATION, val);
}
if (map.containsKey("destination")) {
String val = (String) map.get("destination");
bundle.putString(FirebaseAnalytics.Param.DESTINATION, val);
}
if (map.containsKey("start_date")) {
String val = (String) map.get("start_date");
bundle.putString(FirebaseAnalytics.Param.START_DATE, val);
}
if (map.containsKey("end_date")) {
String val = (String) map.get("end_date");
bundle.putString(FirebaseAnalytics.Param.END_DATE, val);
}
if (map.containsKey("transaction_id")) {
String val = (String) map.get("transaction_id");
bundle.putString(FirebaseAnalytics.Param.TRANSACTION_ID, val);
}
if (map.containsKey("number_of_nights")) {
long val = (long) map.get("number_of_nights");
bundle.putLong(FirebaseAnalytics.Param.NUMBER_OF_NIGHTS, val);
}
if (map.containsKey("number_of_rooms")) {
long val = (long) map.get("number_of_rooms");
bundle.putLong(FirebaseAnalytics.Param.NUMBER_OF_ROOMS, val);
}
if (map.containsKey("number_of_passengers")) {
long val = (long) map.get("number_of_passengers");
bundle.putLong(FirebaseAnalytics.Param.NUMBER_OF_PASSENGERS, val);
}
if (map.containsKey("travel_class")) {
String val = (String) map.get("travel_class");
bundle.putString(FirebaseAnalytics.Param.TRAVEL_CLASS, val);
}
if (map.containsKey("coupon")) {
String val = (String) map.get("coupon");
bundle.putString(FirebaseAnalytics.Param.COUPON, val);
}
if (map.containsKey("tax")) {
long val = (long) map.get("tax");
bundle.putLong(FirebaseAnalytics.Param.TAX, val);
}
if (map.containsKey("shipping")) {
double val = (double) map.get("shipping");
bundle.putDouble(FirebaseAnalytics.Param.SHIPPING, val);
}
if (map.containsKey("group_id")) {
String val = (String) map.get("group_id");
bundle.putString(FirebaseAnalytics.Param.GROUP_ID, val);
}
if (map.containsKey("level")) {
long val = (long) map.get("level");
bundle.putLong(FirebaseAnalytics.Param.LEVEL, val);
}
if (map.containsKey("character")) {
String val = (String) map.get("character");
bundle.putString(FirebaseAnalytics.Param.CHARACTER, val);
}
if (map.containsKey("score")) {
long val = (long) map.get("score");
bundle.putLong(FirebaseAnalytics.Param.SCORE, val);
}
if (map.containsKey("search_term")) {
String val = (String) map.get("search_term");
bundle.putString(FirebaseAnalytics.Param.SEARCH_TERM, val);
}
if (map.containsKey("content_type")) {
String val = (String) map.get("content_type");
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, val);
}
if (map.containsKey("sign_up_method")) {
String val = (String) map.get("sign_up_method");
bundle.putString(FirebaseAnalytics.Param.SIGN_UP_METHOD, val);
}
if (map.containsKey("virtual_currency_name")) {
String val = (String) map.get("virtual_currency_name");
bundle.putString(FirebaseAnalytics.Param.VIRTUAL_CURRENCY_NAME, val);
}
if (map.containsKey("achievement_id")) {
String val = (String) map.get("achievement_id");
bundle.putString(FirebaseAnalytics.Param.ACHIEVEMENT_ID, val);
}
if (map.containsKey("flight_number")) {
String val = (String) map.get("flight_number");
bundle.putString(FirebaseAnalytics.Param.FLIGHT_NUMBER, val);
}
Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, Object> entry = entries.next();
if (bundle.getBundle(entry.getKey()) == null) {
bundle.putString(entry.getKey(), entry.getValue().toString());
}
}
return bundle;
}
}