package ch.pizzapp.android.api;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ApiService {

    private static ApiService apiService = new ApiService();
    public static ApiInterface apiInterface;
    public static Retrofit retrofit;

    private ApiService() { reset();}

    public static ApiService getInstance() {
        return apiService;
    }

    public void reset() {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();


        OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
        builder.readTimeout(ApiConstants.API_READ_TIMEOUT, TimeUnit.SECONDS);
        builder.connectTimeout(ApiConstants.API_CONNECT_TIMEOUT, TimeUnit.SECONDS);

        builder.addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Interceptor.Chain chain) throws IOException {

                Request.Builder builder = chain.request().newBuilder();
                builder.addHeader("Content-Type", "application/json");

                Request request = builder.build();
                return chain.proceed(request);
            }
        });

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();  // set your desired log level
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        //builder.addInterceptor(logging);

        OkHttpClient client = builder.build();

        retrofit = new Retrofit.Builder()
                .baseUrl(ApiConstants.API_PATH)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(client)
                .build();

        apiInterface = retrofit.create(ApiInterface.class);
    }

}