// Path: app/src/internal/java/com/nilhcem/devoxxfr/data/network/ApiEndpoint.java
// @ToString
// public enum ApiEndpoint {
// 
//     PROD(BuildConfig.API_ENDPOINT),
//     MOCK(BuildConfig.MOCK_ENDPOINT),
//     CUSTOM(null);
// 
//     private static final String PREFS_NAME = "api_endpoint";
//     private static final String PREFS_KEY_NAME = "name";
//     private static final String PREFS_KEY_URL = "url";
// 
//     public String url;
// 
//     ApiEndpoint(String url) {
//         this.url = url;
//     }
// 
//     public static ApiEndpoint get(Context context) {
//         SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
//         String prefsName = prefs.getString(PREFS_KEY_NAME, null);
//         if (prefsName != null) {
//             ApiEndpoint endpoint = valueOf(prefsName);
//             if (endpoint == CUSTOM) {
//                 endpoint.url = prefs.getString(PREFS_KEY_URL, null);
//             }
//             return endpoint;
//         }
//         return PROD;
//     }
// 
//     public static void persist(Context context, @NonNull ApiEndpoint endpoint) {
//         Preconditions.checkArgument(endpoint != CUSTOM);
//         persistEndpoint(context, endpoint, null);
//     }
// 
//     public static void persist(Context context, @NonNull String url) {
//         persistEndpoint(context, CUSTOM, url);
//     }
// 
//     @SuppressLint("CommitPrefEdits")
//     private static void persistEndpoint(Context context, @NonNull ApiEndpoint endpoint, @Nullable String url) {
//         SharedPreferences.Editor editor = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit();
//         editor.putString(PREFS_KEY_NAME, endpoint.name());
// 
//         if (url == null) {
//             editor.remove(PREFS_KEY_URL);
//         } else {
//             editor.putString(PREFS_KEY_URL, url);
//         }
// 
//         editor.commit();
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/data/network/DevoxxService.java
// public interface DevoxxService {
// 
//     @GET("sessions")
//     Observable<List<Session>> loadSessions();
// 
//     @GET("speakers")
//     Observable<List<Speaker>> loadSpeakers();
// }


import android.app.Application;
import com.nilhcem.devoxxfr.data.network.ApiEndpoint;
import com.nilhcem.devoxxfr.data.network.DevoxxService;
import com.squareup.moshi.Moshi;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.moshi.MoshiConverterFactory;
package com.nilhcem.devoxxfr.core.dagger.module;





@Module
public final class ApiModule {

    @Provides @Singleton ApiEndpoint provideApiEndpoint(Application context) {
        return ApiEndpoint.get(context);
    }

    @Provides @Singleton Retrofit provideRetrofit(OkHttpClient client, Moshi moshi, ApiEndpoint endpoint) {
        return new Retrofit.Builder()
                .client(client)
                .baseUrl(endpoint.url)
                .addConverterFactory(MoshiConverterFactory.create(moshi))
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
    }

// Path: app/src/internal/java/com/nilhcem/devoxxfr/data/network/ApiEndpoint.java
// @ToString
// public enum ApiEndpoint {
// 
//     PROD(BuildConfig.API_ENDPOINT),
//     MOCK(BuildConfig.MOCK_ENDPOINT),
//     CUSTOM(null);
// 
//     private static final String PREFS_NAME = "api_endpoint";
//     private static final String PREFS_KEY_NAME = "name";
//     private static final String PREFS_KEY_URL = "url";
// 
//     public String url;
// 
//     ApiEndpoint(String url) {
//         this.url = url;
//     }
// 
//     public static ApiEndpoint get(Context context) {
//         SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
//         String prefsName = prefs.getString(PREFS_KEY_NAME, null);
//         if (prefsName != null) {
//             ApiEndpoint endpoint = valueOf(prefsName);
//             if (endpoint == CUSTOM) {
//                 endpoint.url = prefs.getString(PREFS_KEY_URL, null);
//             }
//             return endpoint;
//         }
//         return PROD;
//     }
// 
//     public static void persist(Context context, @NonNull ApiEndpoint endpoint) {
//         Preconditions.checkArgument(endpoint != CUSTOM);
//         persistEndpoint(context, endpoint, null);
//     }
// 
//     public static void persist(Context context, @NonNull String url) {
//         persistEndpoint(context, CUSTOM, url);
//     }
// 
//     @SuppressLint("CommitPrefEdits")
//     private static void persistEndpoint(Context context, @NonNull ApiEndpoint endpoint, @Nullable String url) {
//         SharedPreferences.Editor editor = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit();
//         editor.putString(PREFS_KEY_NAME, endpoint.name());
// 
//         if (url == null) {
//             editor.remove(PREFS_KEY_URL);
//         } else {
//             editor.putString(PREFS_KEY_URL, url);
//         }
// 
//         editor.commit();
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/devoxxfr/data/network/DevoxxService.java
// public interface DevoxxService {
// 
//     @GET("sessions")
//     Observable<List<Session>> loadSessions();
// 
//     @GET("speakers")
//     Observable<List<Speaker>> loadSpeakers();
// }


// Path: app/src/main/java/com/nilhcem/devoxxfr/core/dagger/module/ApiModule.java
import android.app.Application;
import com.nilhcem.devoxxfr.data.network.ApiEndpoint;
import com.nilhcem.devoxxfr.data.network.DevoxxService;
import com.squareup.moshi.Moshi;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.moshi.MoshiConverterFactory;

package com.nilhcem.devoxxfr.core.dagger.module;





@Module
public final class ApiModule {

    @Provides @Singleton ApiEndpoint provideApiEndpoint(Application context) {
        return ApiEndpoint.get(context);
    }

    @Provides @Singleton Retrofit provideRetrofit(OkHttpClient client, Moshi moshi, ApiEndpoint endpoint) {
        return new Retrofit.Builder()
                .client(client)
                .baseUrl(endpoint.url)
                .addConverterFactory(MoshiConverterFactory.create(moshi))
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
    }

    @Provides @Singleton DevoxxService provideDevoxxService(Retrofit retrofit) {