package com.ym.library.net

import android.text.TextUtils
import com.ym.library.Constant
import com.ym.library.utils.PhoneUtils
import com.ym.library.utils.SettingPreference
import com.ym.modulecommon.net.NetConfig
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

/**
 * Created by gaoleichao on 2018/5/2.
 */
object ZXADClient {

    private val logInterceptor = HttpLoggingInterceptor()
    private val paramsInterceptor = Interceptor { chain ->
        val request = chain.request()
        val builder = request.url().newBuilder()

        if (request.url().toString().contains("yilan")) {
            chain.proceed(request.newBuilder().build())
        } else {
            com.ym.modulecommon.utils.PhoneUtils.addParam(request, builder)
            chain.proceed(request.newBuilder().url(builder.build()).build())
        }
    }

    private val headInterceptor = Interceptor { chain ->
        val request = chain.request()
        val builder = request.newBuilder()
        builder.addHeader(Constant.aid, com.ym.modulecommon.utils.SettingPreference.getAndroidId())
        builder.addHeader(Constant.Device.env, Constant.Param.env)
        if (!TextUtils.isEmpty(com.ym.modulecommon.utils.SettingPreference.getUserAgent())) {
            builder.addHeader("web-user-agent", com.ym.modulecommon.utils.SettingPreference.getUserAgent())
            builder.removeHeader("User-Agent")
            builder.addHeader("User-Agent", com.ym.modulecommon.utils.SettingPreference.getUserAgent())
        }
        val headers: Request = builder.build()
        chain.proceed(headers)
    }

    private val httpClient = okhttp3.OkHttpClient.Builder()
            .connectTimeout(10000, TimeUnit.MILLISECONDS)
            .readTimeout(10000, TimeUnit.MILLISECONDS)
            .addInterceptor(logInterceptor.apply {
                level = HttpLoggingInterceptor.Level.BODY
            })
            .hostnameVerifier { hostname, session ->
                true
            }
            .addInterceptor(paramsInterceptor)
            .addInterceptor(headInterceptor)
            .build()!!

    private val retrofit = retrofit2.Retrofit.Builder()
            .client(httpClient)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl(NetConfig.BASE_AD_URL)
            .build()

    val adApi by lazy { retrofit.create(ZXAdApi::class.java) }
}