package com.github.florent37.androidanalytics.google;

import android.content.Context;

import com.github.florent37.androidanalytics.AnalyticsEvent;
import com.github.florent37.androidanalytics.AnalyticsProvider;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.StandardExceptionParser;
import com.google.android.gms.analytics.Tracker;

/**
 * Created by florentchampigny on 14/04/2017.
 */

public class GoogleAnalyticsProvider implements AnalyticsProvider {

    private final Context applicationContext;
    private final GoogleAnalytics analytics;
    private final Tracker tracker;

    public GoogleAnalyticsProvider(Context context, int xmlFile) {
        this.applicationContext = context.getApplicationContext();
        this.analytics = GoogleAnalytics.getInstance(context);

        this.tracker = analytics.newTracker(xmlFile);
    }

    @Override
    public void exception(Exception e) {
        if (e != null) {
            tracker.send(new HitBuilders.ExceptionBuilder()
                    .setDescription(
                            new StandardExceptionParser(applicationContext, null).getDescription(Thread.currentThread().getName(), e))
                    .setFatal(false)
                    .build()
            );
        }
    }

    @Override
    public void event(AnalyticsEvent analyticsEvent) {
        tracker.send(
                new HitBuilders.EventBuilder()
                        .setCategory(analyticsEvent.getCategory())
                        .setAction(analyticsEvent.getAction())
                        .setLabel(analyticsEvent.getLabel())
                        .build()
        );
    }

    @Override
    public void screen(String screenName) {
        // Set screen name.
        tracker.setScreenName(screenName);

        // Send a screen view.
        tracker.send(new HitBuilders.ScreenViewBuilder().build());

        analytics.dispatchLocalHits();
    }
}