package com.base.datarecovery

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import com.base.datarecovery.activity.SplashActivity
import com.base.datarecovery.ads.admob.AdmobOpenUtils
import com.base.datarecovery.ads.max.AdMaxInit.initAdMax
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.fcm.FCMManager
import com.base.datarecovery.fcm.RecoveryTimerManager
import com.base.datarecovery.fcm.ScreenStatusReceiver
import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.ActivityManagerUtils
import com.base.datarecovery.utils.AppPreferences
import com.base.datarecovery.utils.InstallHelps
import com.base.datarecovery.utils.LogEx
import com.base.datarecovery.utils.NewComUtils
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import java.util.UUID

class MyApplication : BaseApplication() {

    private val TAG = "MyApplication"
    var uuid = ""

    companion object {
        @JvmField
        var PAUSED_VALUE = 0
    }

    override fun init() {
        initApp()
        initUUid()
    }

    private fun initUUid() {
        uuid = AppPreferences.getInstance().getString("uuid", "")
        if (TextUtils.isEmpty(uuid)) {
            uuid = UUID.randomUUID().toString() + System.currentTimeMillis()
            AppPreferences.getInstance().put("uuid", uuid)
        }
    }


    fun initApp() {
        val topic = ConfigHelper.packageName + "_push"
        FCMManager.initFirebase(this)
        FCMManager.subscribeToTopic(topic)
        LogEx.logDebug(TAG, "topic=${topic}")
        ScreenStatusReceiver.setupScreenStatusListener(this)
        InstallHelps.init()
        if (ifAgreePrivacy) {

            if (ConfigHelper.admobTrueMaxFlase) {
                MobileAds.initialize(this) { initializationStatus ->
                }
            } else {
                initAdMax()
            }
            InstallHelps.init()
            NewComUtils.requestCfg {
                ScreenStatusReceiver.setupScreenStatusListener(this)
                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()
                        )
                    }
                }
            }
        }
        initLifeListener()
    }


    private var lastTimePause = 0L
    private var lastTimeResume = 0L

    private fun isHotLaunch(): Boolean {
        if ((lastTimeResume - lastTimePause) > 1000) {
            return true
        }
        return false
    }

    @SuppressLint("UnspecifiedRegisterReceiverFlag")
    private fun initLifeListener() {
        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            private var count = 0
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}

            override fun onActivityStarted(activity: Activity) {
                count++
                lastTimeResume = System.currentTimeMillis()
                if (count == 1 && isHotLaunch()) {

                    val topActivity: Activity? = ActivityManagerUtils.getInstance().topActivity

                    val flag = if (topActivity == null) {
                        true
                    } else {
                        ConfigHelper.noLoadingActivities.all { !topActivity.localClassName.contains(it, true) }
                    }
                    LogEx.logDebug(TAG, "flag=$flag")

                    if (flag) {
                        if (AdmobOpenUtils.isOpenAdLoaded()) {
                            LogEx.logDebug(TAG, "show ad")
                            AdmobOpenUtils.showAppOpenAd(activity)
                        } else {
                            LogEx.logDebug(TAG, "jump splash")
                            topActivity?.startActivity(
                                Intent(
                                    topActivity,
                                    SplashActivity::class.java
                                ).apply {
                                    putExtra("isHotLaunch", true)
                                    putExtra("type", -1)
                                })
                        }
                    }
                }
            }

            override fun onActivityResumed(activity: Activity) {
                PAUSED_VALUE = 1
            }


            override fun onActivityPaused(activity: Activity) {
                PAUSED_VALUE = 2
                lastTimePause = System.currentTimeMillis()

            }

            override fun onActivityStopped(activity: Activity) {
                count--
            }

            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}

            override fun onActivityDestroyed(activity: Activity) {}
        })
    }


}