package com.base.filerecoveryrecyclebin.help

import com.android.installreferrer.api.InstallReferrerClient
import com.android.installreferrer.api.InstallReferrerStateListener
import com.base.filerecoveryrecyclebin.BuildConfig
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.fcm.RecoveryTimerManager
import com.base.filerecoveryrecyclebin.fcm.ScreenStatusReceiver
import com.base.filerecoveryrecyclebin.utils.AppPreferences
import com.base.filerecoveryrecyclebin.utils.EventUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import org.json.JSONObject

/**
 * call before agree
 */
object InstallHelps {

    private val TAG = "InstallHelps"

    fun init() {
        MainScope().launch(Dispatchers.IO) {
            val referrerClient = InstallReferrerClient.newBuilder(BaseApplication.context).build()
            referrerClient.startConnection(object : InstallReferrerStateListener {
                override fun onInstallReferrerSetupFinished(responseCode: Int) {
                    try {
                        when (responseCode) {
                            InstallReferrerClient.InstallReferrerResponse.OK -> {
                                val response = referrerClient.installReferrer
                                val installInfo = response.installReferrer
                                val obj = JSONObject()
                                obj.put("referrerUrl", response.installReferrer)
                                obj.put("referrerClickTime", response.referrerClickTimestampSeconds)
                                obj.put("appInstallTime", response.installBeginTimestampSeconds)
                                obj.put("instantExperienceLaunched", installInfo.toString())
                                EventUtils.event("install_referrer", ext = obj, isSingleEvent = true)
                                AppPreferences.getInstance().put("referrer", response.installReferrer)
                                if (listOf("gclid", "facebook", "instagram").all { !installInfo.contains(it, true) }) {
                                    //自然用户
                                    if (BuildConfig.DEBUG) {
                                        AppPreferences.getInstance().put("install_source", "channel")
                                    } else {
                                        AppPreferences.getInstance().put("install_source", "origin")
                                    }
                                } else {
                                    //渠道用户
                                    AppPreferences.getInstance().put("install_source", "channel")
                                }
                                requestCfg(true)
                            }

                            else -> {
                                EventUtils.event("install_referrer_error")
                                requestCfg(true)
                            }
                        }
                    } catch (_: Exception) {
                        EventUtils.event("install_referrer_error")
                    }

                }

                override fun onInstallReferrerServiceDisconnected() {
                }
            })
        }

    }


    fun requestCfg(callBackAd: Boolean) {
        NewComUtils.requestCfg {
            if (callBackAd) {
                AdmobMaxHelper.initAdmobMaxAd()
            }
            val timerStatus: Int =
                AppPreferences.getInstance().getString("timerS", "1")
                    .toIntOrNull() ?: 1
            if (timerStatus == 0) {
                RecoveryTimerManager.getInstance().stopTaskTimer()
            } else {
                val timerDelay: Int =
                    AppPreferences.getInstance().getString("timerDelay", "1")
                        .toIntOrNull() ?: 1
                val timerInterval: Int =
                    AppPreferences.getInstance().getString("timerInterval", "7")
                        .toIntOrNull() ?: 7
                if (!RecoveryTimerManager.getInstance().isTaskTimerActive) {
                    RecoveryTimerManager.getInstance().scheduleTask(
                        (timerDelay * 60 * 1000).toLong(),
                        (timerInterval * 60 * 1000).toLong()
                    )
                }
            }
            ScreenStatusReceiver.setupScreenStatusListener(BaseApplication.context)
        }
    }
}