package com.base.datarecovery.ads

import AdMaxNativeUtils
import android.app.Activity
import android.util.Log
import android.view.ViewGroup
import com.base.datarecovery.R
import com.base.datarecovery.ads.admob.AdmobInterstitialUtils
import com.base.datarecovery.ads.admob.AdmobNativeUtils
import com.base.datarecovery.ads.admob.AdmobOpenUtils
import com.base.datarecovery.ads.max.AdMaxInit
import com.base.datarecovery.ads.max.AdMaxInit.initAdMax
import com.base.datarecovery.ads.max.AdMaxInterstitialUtils
import com.base.datarecovery.ads.max.AdMaxOpenUtils
import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.AppPreferences
import com.google.android.gms.ads.MobileAds
import java.util.concurrent.atomic.AtomicBoolean

object AdmobMaxHelper {
    var isBlack: Boolean = false

    private val TAG = ""

    var isAdInit = AtomicBoolean(false)

    fun isOpenAdLoaded(): Boolean {
        return if (getSpAdmobTrueMaxFalse()) {
            AdmobOpenUtils.isOpenAdLoaded()
        } else {
            AdMaxOpenUtils.isOpenAdLoaded()
        }
    }

    fun admobMaxShowInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) {
        if (isBlack) {
            onHidden?.invoke()
            return
        }

        if (getSpAdmobTrueMaxFalse()) {
            AdmobInterstitialUtils.showInterstitialAd(activity) {
                onHidden?.invoke()
            }
        } else {
            AdMaxInterstitialUtils.showInterstitialAd(activity) {
                onHidden?.invoke()
            }
        }
    }

    fun admobMaxShowOpenAd(activity: Activity, showBeforeAction: () -> Unit, onHidden: (() -> Unit)? = null) {
        if (isBlack) {
            onHidden?.invoke()
            return
        }

        if (getSpAdmobTrueMaxFalse()) {
            AdmobOpenUtils.showAppOpenAd(activity, showBefore = showBeforeAction) {
                onHidden?.invoke()
            }
        } else {
            AdMaxOpenUtils.showAppOpenAd(activity, loadCallBack = showBeforeAction) {
                onHidden?.invoke()
            }
        }
    }

    fun admobMaxShowNativeAd(activity: Activity, parent: ViewGroup, where: Int = 0) {
        if (isBlack) {
            return
        }

        if (getSpAdmobTrueMaxFalse()) {
            AdmobNativeUtils.showNativeAd(activity, parent)
        } else {
            var layout = R.layout.layout_max_native_small
            if (where == 0) {
                layout = R.layout.layout_max_native_small_f8f8f8
            }
            if (where == 1) {
                layout = R.layout.layout_max_native_big
            }
            AdMaxNativeUtils.showNativeAd(activity, parent, layout)
        }
    }

    private fun getSpAdmobTrueMaxFalse(): Boolean {
        val ss = AppPreferences.getInstance().getInt("admobTrueMaxFalse", 0)
        return ss == 1
    }

    fun haveSpAdmobTrueMaxFalse(): Boolean {
        return AppPreferences.getInstance().getInt("admobTrueMaxFalse", -1) != -1
    }

    fun initAdmobMaxAd(activity: Activity? = null) {
        if (isBlack) {
            return
        }

        if (getSpAdmobTrueMaxFalse()) {
            if (!isAdInit.get()) {
                MobileAds.initialize(BaseApplication.context) { initializationStatus ->
                    isAdInit.set(true)
                }
            }
        } else {
            if (!isAdInit.get()) {
                BaseApplication.context.initAdMax()
            }
        }
    }

    fun preloadAd(activity: Activity) {
        if (isBlack) {
            return
        }

        if (ConfigHelper.admobTrueMaxFalse) {
            AdmobOpenUtils.loadAppOpenAd()
            AdmobInterstitialUtils.loadInterstitialAd(activity)
        } else {
            if (isAdInit.get()) {
                AdMaxOpenUtils.loadAppOpenAd(activity)
                AdMaxInterstitialUtils.loadInterstitialAd(activity)
            } else {
                AdMaxInit.maxInitAction = {
                    Log.d(TAG, "max init suc")
//                    AdMaxOpenUtils.loadAppOpenAd(activity)
                    AdMaxInterstitialUtils.loadInterstitialAd(activity)
                }
            }
        }
    }

}