package com.swiftcleaner.chovey.business
import com.swiftcleaner.chovey.util.SPUtils
import kotlin.random.Random

object AdIntervalTimeUtils {
    // 间隔逻辑字段 start---------
    const val INTERVAL_AD_SHOWED_COUNT = "intervalAdShowedCount" // 插屏的展示次数
    const val LAST_OPEN_SHOWED_ON_HIDDEN_TIME = "lastOpenShowedOnHiddenTime" // 开屏广告最后一次展示的时间（关闭的时候）
    const val LAST_INTER_SHOWED_ON_HIDDEN_TIME = "lastInterShowedOnHiddenTime" // 插屏广告最后一次展示的时间（关闭的时候）
    const val LAST_NATIVE_SHOWED_ON_HIDDEN_TIME = "lastNativeShowedOnHiddenTime" // 原生广告最后一次展示的时间（展示的时候）

    fun updateOpenTime(){
        SPUtils.getInstance().putLong(LAST_OPEN_SHOWED_ON_HIDDEN_TIME, System.currentTimeMillis())
    }
    // 开屏广告是否在间隔时间内（true 是）
    fun isAdIntervalOpen(): Boolean{
        // 广告间隔时间
        val adIntervalOpen = SPUtils.getInstance().getInt("adIntervalOpen", 20)
        val lastShowTime = SPUtils.getInstance().getLong(LAST_OPEN_SHOWED_ON_HIDDEN_TIME, 0L)
        if (lastShowTime != 0L && (System.currentTimeMillis() - lastShowTime) < adIntervalOpen * 1000){
            return true
        }
        return false
    }


    private fun updateInterstitialCount(){
        val adShowCount = SPUtils.getInstance().getInt(INTERVAL_AD_SHOWED_COUNT, 0)
        if (adShowCount < 5) { //只记录前5次，多了没有意义
            SPUtils.getInstance().putInt(INTERVAL_AD_SHOWED_COUNT, adShowCount + 1)
        }
    }
    fun updateInterstitialTime(){
        SPUtils.getInstance().putLong(LAST_INTER_SHOWED_ON_HIDDEN_TIME, System.currentTimeMillis())
        updateInterstitialCount()
    }
    // 插屏广告是否在间隔时间内（true 是）
    fun isAdIntervalInterstitial(): Boolean{
        val adIntervalStart = SPUtils.getInstance().getInt("adIntervalStart", 40)
        val adIntervalEnd = SPUtils.getInstance().getInt("adIntervalEnd", 70)
        val lastShowTime = SPUtils.getInstance().getLong(LAST_INTER_SHOWED_ON_HIDDEN_TIME, 0L)
        // 第二次展示固定30秒的间隔
        if (SPUtils.getInstance().getInt(INTERVAL_AD_SHOWED_COUNT, 0) == 1){
            if ((System.currentTimeMillis() - lastShowTime) < 30 * 1000) {
                EventUtils.event("ad_interval")
                return true
            }
        } else {
            if (adIntervalEnd > adIntervalStart){
                val time = Random.nextInt(adIntervalStart, adIntervalEnd) * 1000
                if ((System.currentTimeMillis() - lastShowTime) < time && lastShowTime != 0L) {
                    EventUtils.event("ad_interval")
                    return true
                }
            }
        }
        return false
    }


    // 获取原生广告间隔时间
    fun getNativeIntervalTime(): Int{
        return SPUtils.getInstance().getInt("adIntervalNative", 0)
    }
    fun updateNativeTime(){
        SPUtils.getInstance().putLong(LAST_NATIVE_SHOWED_ON_HIDDEN_TIME, System.currentTimeMillis())
    }
    // 开屏广告是否在间隔时间内（true 是）
    fun isAdIntervalNative(): Boolean{
        val lastShowTime = SPUtils.getInstance().getLong(LAST_NATIVE_SHOWED_ON_HIDDEN_TIME, 0L)
        val adIntervalNative = getNativeIntervalTime()
        if (lastShowTime != 0L && (System.currentTimeMillis() - lastShowTime) < adIntervalNative * 1000){
            return true
        }
        return false
    }

    // 间隔逻辑字段 end------------
}