package com.leroymerlin.pandroid.demo;

import android.content.Context;
import android.text.TextUtils;

import com.google.android.gms.analytics.Tracker;
import com.leroymerlin.pandroid.analytics.AnalyticsManager;
import com.leroymerlin.pandroid.analytics.impl.GoogleAnalyticsManager;
import com.leroymerlin.pandroid.app.PandroidConfig;
import com.leroymerlin.pandroid.demo.globals.review.ReviewManager;
import com.leroymerlin.pandroid.demo.globals.review.ReviewManagerImpl;
import com.leroymerlin.pandroid.demo.globals.review.ReviewService;
import com.leroymerlin.pandroid.demo.globals.review.RxReviewManager;
import com.leroymerlin.pandroid.log.LogWrapper;
import com.leroymerlin.pandroid.net.PandroidCallAdapterFactory;
import com.leroymerlin.pandroid.ui.picture.PictureManager;
import com.leroymerlin.pandroid.ui.picture.glide.GlidePictureManagerImpl;
import com.leroymerlin.pandroid.ui.toast.ToastManager;
import com.leroymerlin.pandroid.ui.toast.impl.SuperToastManagerImpl;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by florian on 04/01/16.
 */
@Module
public class DemoModule {


    public DemoModule() {
    }


    //tag::Retrofit[]
    @Provides
    @Singleton
    ReviewService provideDemoService(OkHttpClient.Builder clientBuilder, Context context, LogWrapper logWrapper) {
        //PandroidCall handle Action Delegate on main thread and mock annotation
        PandroidCallAdapterFactory factory = PandroidCallAdapterFactory.create(context, logWrapper);
        factory.setMockEnable(PandroidConfig.DEBUG);
        Retrofit.Builder builder = new Retrofit.Builder()
                .client(clientBuilder.build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(factory)
                .baseUrl(BuildConfig.BASE_URL_PRODUCT);
        return builder.build().create(ReviewService.class);
    }
    //end::Retrofit[]

    @Provides
    @Singleton
    ReviewManager provideReviewManager(ReviewManagerImpl reviewManager) {
        return reviewManager;
    }

    //tag::RxWrapper[]
    @Provides
    @Singleton
    RxReviewManager provideRxReviewManager(ReviewManager reviewManager) {
        return new RxReviewManager(reviewManager);
    }
    //end::RxWrapper[]

    //tag::provideAnalyticsManager[]
    @Provides
    @Singleton
    AnalyticsManager provideAnalyticsManager(GoogleAnalyticsManager googleAnalyticsManager) {

        // set your GA ID Analytics
        String AnalyticsGaId = "YOUR_ANALYTICS_GA_ID";

        if (!TextUtils.isEmpty(AnalyticsGaId)) {
            Tracker tracker = googleAnalyticsManager.getAnalytics().newTracker(AnalyticsGaId);
            tracker.enableAutoActivityTracking(true);
            googleAnalyticsManager.getTrackers().add(tracker);
        }
        return googleAnalyticsManager;
    }
    //end::provideAnalyticsManager[]

    //tag::provideToastManager[]
    @Provides
    @Singleton
    ToastManager provideToastManager() {
        return new SuperToastManagerImpl();
        //could be return new SnackbarManager();
    }
    //end::provideToastManager[]

    //tag::Glide[]
    @Provides
    @Singleton
    PictureManager providePictureManager(Context context) {
        GlidePictureManagerImpl glidePictureManager = new GlidePictureManagerImpl(context);
        glidePictureManager.configure(
                glidePictureManager
                        .loader()
                        .placeHolder(R.drawable.pandroid_img_nophoto)
        );
        return glidePictureManager;
    }
    //end::Glide[]

}