/*
 * Copyright (c) 2018 CoderLengary
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.lengary_l.wanandroid.retrofit.CookiesInterceptor.Interceptor;

import com.example.lengary_l.wanandroid.retrofit.CookiesInterceptor.Util.AbsCookiesUtil;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by CoderLengary
 */
public class AddCookieInterceptor implements Interceptor {

    private static AddCookieInterceptor INSTANCE;
    private static final String COOKIE = "Cookie";
    private AbsCookiesUtil mUtil;

    private AddCookieInterceptor(AbsCookiesUtil util) {
        mUtil = util;
    }

    public static AddCookieInterceptor getInstance(AbsCookiesUtil util) {
        if (INSTANCE == null) {
            INSTANCE = new AddCookieInterceptor(util);
        }
        return INSTANCE;
    }

    // Get the request -> Get the builder -> HasCache? -> AddHeader -> Proceed the request
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        String host = request.url().host();
        Request.Builder builder = request.newBuilder();

        if (!host.isEmpty()) {
            String cookiesString = mUtil.getCookiesListString(host);

            if (!cookiesString.isEmpty()) {
                builder.addHeader(COOKIE, cookiesString);
            }
        }

        return chain.proceed(builder.build());
    }
}
