package com.yidianling.ydl_pay.actionpoint

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkInfo
import com.yidianling.ydl_pay.http.HttpUtils
import com.yidianling.ydl_pay.http.utils.RxDeviceTool
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers


/**
 * 行为数据埋点工具类
 * Created by xj on 2019/6/22.
 */
internal class ActionCountUtils {

    companion object {

        const val TAG: String = "ActionCountUtils"

        /**
         * 基础行为数据埋点调用的方法
         */
        fun count(uid: String?, partId: String, position: String, url: String, api: String, sign1: String) {
            try {
                val actionDataParams = ActionDataBean.Builder()
                actionDataParams.partId(partId)
                actionDataParams.position(position)
                actionDataParams.url(url)

                uid?.let {
                    actionDataParams.uid(uid)
                }
                actionDataParams.time(System.currentTimeMillis())
                actionDataParams.appVersion(RxDeviceTool.getAppVersionName(RxDeviceTool.getContext()))
                actionDataParams.appId(BIConstants.APP_ID)
                actionDataParams.api(api)
                actionDataParams.manufacturer(android.os.Build.BRAND.trim().toUpperCase())
                actionDataParams.model(android.os.Build.MODEL)
                actionDataParams.os(BIConstants.OS)
                actionDataParams.osVersion(android.os.Build.VERSION.RELEASE)
                actionDataParams.wifi(if (isWifi()) 0 else 1)
                actionDataParams.sign1(sign1)
                actionDataParams.screenWidth(RxDeviceTool.getScreenWidth(RxDeviceTool.getContext()))
                actionDataParams.screenHeight(RxDeviceTool.getScreenHeight(RxDeviceTool.getContext()))

                //剩余额外参数根据需求定义

                //请求
                request(actionDataParams.build())

            } catch (e: Exception) {
            }
        }

        /**
         * 传入ActionDataParams参数，访问接口
         */
        fun request(actionDataBean: ActionDataBean) {
            try {
                HttpUtils.actionDataCount(actionDataBean)
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe({
                        }) {
                        }
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }

        /**
         * 判断是否是wifi
         */
        private fun isWifi(): Boolean {
            try {
                var connectivityManager: ConnectivityManager = RxDeviceTool.getContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                var info: NetworkInfo = connectivityManager.activeNetworkInfo
                if (info != null && info.type == ConnectivityManager.TYPE_WIFI) {
                    return true
                }
                return false
            } catch (e: Exception) {
                return false
            }

        }
    }
}