package demo.catalog.coursera.org.courserademoapp.di;

import com.google.gson.Gson;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import demo.catalog.coursera.org.courserademoapp.BuildConfig;
import demo.catalog.coursera.org.courserademoapp.network.CatalogAPIService;
import demo.catalog.coursera.org.courserademoapp.network.CourseraNetworkService;
import demo.catalog.coursera.org.courserademoapp.network.CourseraNetworkServiceImpl;
import retrofit.RestAdapter;
import retrofit.converter.GsonConverter;

@Module
public class NetworkingModule {

    private final String mBaseUrl;

    public NetworkingModule(String baseUrl) {
        mBaseUrl = baseUrl;
    }

    @Provides @Singleton
    public CourseraNetworkService getNetworkService(CatalogAPIService apiService) {
        return new CourseraNetworkServiceImpl(apiService);
    }

    @Provides @Singleton
    public RestAdapter provideRestAdapter() {
        return new RestAdapter.Builder()
                .setEndpoint(mBaseUrl)
                .setConverter(new GsonConverter(new Gson()))
                .setLogLevel((BuildConfig.DEBUG ?
                        RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE))
                .build();
    }

    @Provides @Singleton
    public CatalogAPIService provideCatalogAPIService(RestAdapter restAdapter) {
        return restAdapter.create(CatalogAPIService.class);
    }
}