//package com.zxhyis.toolss.ad
//
//import android.app.Activity
//import android.content.Context
//import android.os.Bundle
//import android.os.Handler
//import android.os.Looper
//import android.util.Log
//import android.view.ViewGroup
//import com.applovin.mediation.MaxAd
//import com.applovin.mediation.MaxAdListener
//import com.applovin.mediation.MaxAdRevenueListener
//import com.applovin.mediation.MaxError
//import com.applovin.mediation.ads.MaxAppOpenAd
//import com.applovin.mediation.ads.MaxInterstitialAd
//import com.applovin.mediation.nativeAds.MaxNativeAdListener
//import com.applovin.mediation.nativeAds.MaxNativeAdLoader
//import com.applovin.mediation.nativeAds.MaxNativeAdView
//import com.applovin.sdk.AppLovinMediationProvider
//import com.applovin.sdk.AppLovinSdk
//import com.applovin.sdk.AppLovinSdkInitializationConfiguration
//import com.blankj.utilcode.util.ActivityUtils
//import com.facebook.FacebookSdk.getApplicationContext
//import com.google.android.gms.ads.identifier.AdvertisingIdClient
//import com.google.firebase.analytics.FirebaseAnalytics
//import com.zxhyis.toolss.FileApp
//import org.json.JSONObject
//import java.util.Collections
//import java.util.UUID
//import java.util.concurrent.Executors
//import java.util.concurrent.TimeUnit
//import kotlin.math.pow
//
//
//object MaxAdUtils {
//    private var openAdUnit = "d0d45467dd658a78"
//    private var interAdUnit = "98b24342c34a295b"
//    private var naviteAdUnit = "be6f5e0e5a22fed4"
//    var mOpenAd: MaxAppOpenAd? = null
//
//    private var openLoadTime = Long.MAX_VALUE
//    private var interLoadTime = Long.MAX_VALUE
//    private var nativeLoadTime = Long.MAX_VALUE
//
//    fun initsdk(context: Context, onLoad: (() -> Unit)? = null) {
//        //下面是官方测试的Key
//        var YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
//
//        //GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW 原文key
//        //q0t6cz3f0pkg14zp 秘钥
//        //正式key
//        val OFFICE_SDK_KEY =
//            "tyqXEGwCt0t7f3OnOclX4vgYykKBrKrRV2Qpa3IBASOK8FCbzGnROZO1/lqGgsPpXSbyCZ5shXeTYoFVGWpkHU+8j6wSL1+1DhNBPTXMmaPvgjvy3RkcUqIIdYFMaS4fLFg4EWBTQoH1VIOtKUPyAbFt"
//        YOUR_SDK_KEY = AESHelper.decrypt(OFFICE_SDK_KEY)
//        Log.e("YOUR_SDK_KEY", "YOUR_SDK_KEY")
//
//        val executor = Executors.newSingleThreadExecutor()
//        executor.execute {
//            // Create the initialization configuration
//            val initConfigBuilder = AppLovinSdkInitializationConfiguration.builder(
//                "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF",
//                //下面是官方测试的Key
////                YOUR_SDK_KEY,
//                context
//            ).setMediationProvider(AppLovinMediationProvider.MAX)
//
//            //下面两行代码表示加入测试设备,正式上线时要注释掉
//            val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(context).id
//            Log.e("MXL", "sdkInit: " + currentGaid)
//            if (currentGaid != null) {
//                initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
//            }
//
//            val initConfig = initConfigBuilder.build()
//
//
//            // Initialize the SDK with the configuration
//            AppLovinSdk.getInstance(context).initialize(initConfig) { sdkConfig ->
//                // Start loading ads
//                onLoad?.invoke()
//            }
//
////        AppLovinSdk.getInstance(this).mediationProvider = "max"
////        AppLovinSdk.getInstance(this).initializeSdk {
//
//            executor.shutdown()
//        }
//    }
//
//    fun isOpenAdLoaded() = mOpenAd?.isReady == true
//    fun loadOpenAd(skip: Boolean = false, onLoad: (() -> Unit)? = null) {
//        if (FileApp.fContext.queryDataStoreBlock(SP_IS_BLACKLIST, true)) {
//            onLoad?.invoke()
//            return
//        }
//
//        if (!AppLovinSdk.getInstance(FileApp.fContext).isInitialized) {
//            onLoad?.invoke()
//            return
//        }
//        openAdUnit = ComUtils.getAdUnitCfg().openAd?.unit_id ?: ""
//        mOpenAd = MaxAppOpenAd(openAdUnit, FileApp.fContext)
//        if (isOpenAdLoaded() || skip) {
//            onLoad?.invoke()
//            return
//        }
//
//        val reqId = UUID.randomUUID().toString()
//        val obj = JSONObject()
//        obj.put("req_id", reqId)
//        obj.put("ad_type", "openAd")
//        EventHelper.event("ad_pull_start", ext = obj)
//        mOpenAd?.setListener(
//            object : MaxAdListener {
//                override fun onAdLoaded(p0: MaxAd) {
//                    openLoadTime = System.currentTimeMillis()
//                    onLoad?.invoke()
//                    maxAdPullReport(p0, "openAd", reqId = reqId)
//                    Log.e("MXL", "开屏onAdLoaded: ")
//                }
//
//                override fun onAdDisplayed(p0: MaxAd) {}
//
//                override fun onAdHidden(p0: MaxAd) {}
//
//                override fun onAdClicked(p0: MaxAd) {}
//
//                override fun onAdLoadFailed(p0: String, p1: MaxError) {
//                    onLoad?.invoke()
//                    maxAdPullReport(null, "AppOpenAd", p1.message)
//                    Log.e("MXL", "onAdLoadFailed: " + p1)
//                }
//
//                override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {}
//            }
//        )
//        mOpenAd?.loadAd()
//    }
//
//    fun showAppOpenAd(
//        activity: Activity,
//        slotname: String = "splash_slot",
//        skip: Boolean = false,
//        onHidden: (() -> Unit)? = null
//    ) {
//        if (FileApp.fContext.queryDataStoreBlock(SP_IS_BLACKLIST, true)) {
//            onHidden?.invoke()
//            return
//        }
//
//        if (!AdUtils.isShowAd(slotname)) {
//            onHidden?.invoke()
//            return
//        }
//
//        if (!isOpenAdLoaded() || skip || !AppLovinSdk.getInstance(FileApp.fContext).isInitialized) {
//            onHidden?.invoke()
//            return
//        }
//        if (System.currentTimeMillis() - openLoadTime > 1000 * 60 * 60) {
//            loadOpenAd()
//            onHidden?.invoke()
//            return
//        }
//        mOpenAd?.setRevenueListener(EventOnPaidEventListener())
//        mOpenAd?.setListener(object : MaxAdListener {
//            override fun onAdLoaded(p0: MaxAd) {
//
//            }
//
//            override fun onAdDisplayed(p0: MaxAd) {
//                SaveSoltShowTime(slotname)
//                maxAdShowReport(p0, "openAd")
//            }
//
//            override fun onAdHidden(p0: MaxAd) {
//                onHidden?.invoke()
//                loadOpenAd()
//            }
//
//            override fun onAdClicked(p0: MaxAd) {
//                maxAdclickReport(p0, "openAd")
//            }
//
//            override fun onAdLoadFailed(p0: String, p1: MaxError) {
//
//            }
//
//            override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {
//                onHidden?.invoke()
//                loadOpenAd()
//                val obj = JSONObject()
//                obj.put("reason", p1.message)
//                obj.put("ad_unit", "openAd")
//                EventHelper.event("ad_show_error", ext = obj)
//            }
//
//        })
//        if (isOpenAdLoaded()) {
//            mOpenAd?.showAd("OpenAd")
//        } else {
//            onHidden?.invoke()
//            mOpenAd?.loadAd()
//            val obj = JSONObject()
//            obj.put("reason", "no_ad")
//            obj.put("ad_unit", "openAd")
//            EventHelper.event("ad_show_error", ext = obj)
//        }
//
//    }
//
//
//    private var interAd: MaxInterstitialAd? = null
//    private var retryAttempt = 0
//    fun isInterLoaded() = interAd?.isReady == true
//
//    //拉取插屏广告
//    fun loadInterstitialAd(activity: Activity, onLoad: (() -> Unit)? = null) {
//        if (FileApp.fContext.queryDataStoreBlock(SP_IS_BLACKLIST, true)) {
//            onLoad?.invoke()
//            return
//        }
//
//        if (!AppLovinSdk.getInstance(FileApp.fContext).isInitialized) {
//            onLoad?.invoke()
//            return
//        }
//        interAdUnit = ComUtils.getAdUnitCfg().interAd.unit_id
//        if (interAd != null) {
//            onLoad?.invoke()
//            return
//        }
//        var hasDone = false
//        activity.window.decorView.postDelayed(Runnable {
//            if (hasDone) {
//                return@Runnable
//            }
//            hasDone = true
//            onLoad?.invoke()
//        }, 15000)
//        val reqId = UUID.randomUUID().toString()
//        val obj = JSONObject()
//        obj.put("req_id", reqId)
//        obj.put("ad_type", "interAd")
//        obj.put("from", activity.javaClass.simpleName)
//        EventHelper.event("ad_pull_start", ext = obj)
//
//        interAd = MaxInterstitialAd(interAdUnit, activity)
//        interAd?.setListener(object : MaxAdListener {
//            override fun onAdLoaded(p0: MaxAd) {
//                Log.e("MXL", "interAd:onAdLoaded: ")
//                maxAdPullReport(p0, "InterstitialAd")
//                retryAttempt = 0
//                onLoad?.invoke()
//            }
//
//            override fun onAdDisplayed(p0: MaxAd) {
//
//            }
//
//            override fun onAdHidden(p0: MaxAd) {
//            }
//
//            override fun onAdClicked(p0: MaxAd) {
//
//            }
//
//            override fun onAdLoadFailed(p0: String, p1: MaxError) {
//                Log.e("MXL", "InteronAdLoadFailed: " + p1)
//                maxAdPullReport(null, "InterstitialAd", p1.message)
//                onLoad?.invoke()
//                retryAttempt++
//                Handler(Looper.getMainLooper()).postDelayed({
//                    retryAttempt++
//                    interAd?.loadAd()
//                }, TimeUnit.SECONDS.toMillis(2.0.pow(6.coerceAtMost(retryAttempt)).toLong()))
//            }
//
//            override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {
//
//            }
//
//        })
//        interAd?.loadAd()
//    }
//
//    //展示插屏广告
//    fun showMaxInterstitialAd(
//        activity: Activity,
//        soltName: String = "interstitial_slot",
//        skip: Boolean = false,
//        isFirst: Boolean = true,
//        onHidden: (() -> Unit)? = null
//    ) {
//        if (FileApp.fContext.queryDataStoreBlock(SP_IS_BLACKLIST, true)) {
//            onHidden?.invoke()
//            return
//        }
//
//        if (activity.isFinishing || activity.isDestroyed) {
//            onHidden?.invoke()
//            return
//        }
//        if (!AdUtils.isShowAd(soltName)) {
//            onHidden?.invoke()
//            return
//        }
//        if (skip) {
//            onHidden?.invoke()
//            return
//        }
//        if (System.currentTimeMillis() - interLoadTime > 1000 * 60 * 60) {
//            loadInterstitialAd(activity)
//            onHidden?.invoke()
//            return
//        }
//        if (interAd != null) {
//            interAd?.setRevenueListener(EventOnPaidEventListener())
//            interAd?.setListener(object : MaxAdListener {
//                override fun onAdLoaded(p0: MaxAd) {
//                }
//
//                override fun onAdDisplayed(p0: MaxAd) {
//                    maxAdShowReport(p0, "interAd", activity)
//                    SaveSoltShowTime(soltName)
//                }
//
//                override fun onAdHidden(p0: MaxAd) {
//                    interAd = null
//                    onHidden?.invoke()
//                    loadInterstitialAd(activity)
//                }
//
//                override fun onAdClicked(p0: MaxAd) {
//                    maxAdclickReport(p0, "interAd")
//                }
//
//                override fun onAdLoadFailed(p0: String, p1: MaxError) {
//
//                }
//
//                override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {
//                    interAd = null
//                    onHidden?.invoke()
//                    loadInterstitialAd(activity)
//                    val obj = JSONObject()
//                    obj.put("reason", p1.message)
//                    obj.put("ad_unit", "interAd")
//                    EventHelper.event("ad_show_error", ext = obj)
//                }
//
//            })
//            if (interAd?.isReady == true) {
//                interAd?.showAd()
//            } else {
//                onHidden?.invoke()
//                interAd?.loadAd()
//            }
//            EventHelper.event("ad_prepare_show")
//        } else {
//            onHidden?.invoke()
//            loadInterstitialAd(activity) {
//                if (isFirst) {
//                    EventHelper.event("ad_reload_inter")
//                    showMaxInterstitialAd(
//                        ActivityUtils.getTopActivity(),
//                        "interstitial_slot",
//                        isFirst = false
//                    )
//                }
//            }
//            val obj = JSONObject()
//            obj.put("reason", "no_ad")
//            obj.put("ad_unit", "interAd")
//            EventHelper.event("ad_show_error", ext = obj)
//        }
//    }
//
//    var nativeAdLoader: MaxNativeAdLoader? = null
//    private var currentNativeAd: MaxAd? = null//当前展示的NativeAd
//    private var showedNativeAd: MaxAd? = null//已经展示过的NativeAd
//    private var nativeData: Pair<MaxNativeAdView?, MaxAd?>? = null
//    private var loadingListener: (() -> Unit)? = null
//    private var isLoading = false
//
//    /**
//     * 页面OnDestroy调用
//     */
//    fun maxNativeAdOnDestroy() {
//        //拉到新的nativeAd，可以销毁
//        showedNativeAd?.let {
//            nativeAdLoader?.destroy(it)
//            showedNativeAd = null
//        }
//    }
//
//    //拉取原生广告
//    fun loadMaxNativeAd() {
//        if (FileApp.fContext.queryDataStoreBlock(SP_IS_BLACKLIST, true)) {
//            return
//        }
//
//        naviteAdUnit = ComUtils.getAdUnitCfg().native.unit_id
//        nativeAdLoader = MaxNativeAdLoader(naviteAdUnit, FileApp.fContext)
//        if (!AppLovinSdk.getInstance(FileApp.fContext).isInitialized) {
//            return
//        }
//        if (currentNativeAd != null) {
//            return
//        }
//        if (nativeData != null) {
//            return
//        }
//
//        if (isLoading) {
//            return
//        }
//        isLoading = true
//        val reqId = UUID.randomUUID().toString()
//        val obj = JSONObject()
//        obj.put("req_id", reqId)
//        obj.put("ad_type", "nativeAd")
//        EventHelper.event("ad_pull_start", ext = obj)
//        nativeAdLoader?.setNativeAdListener(object : MaxNativeAdListener() {
//            override fun onNativeAdLoaded(maxNativeAdView: MaxNativeAdView?, maxAd: MaxAd) {
//                //Log.e("MXL", "onNativeAdLoaded: " )
//                nativeData = Pair(maxNativeAdView, maxAd)
//                currentNativeAd = nativeData?.second
//                maxAdPullReport(maxAd, "NativeAd")
//                isLoading = false
//                loadingListener?.invoke()
//            }
//
//            override fun onNativeAdLoadFailed(p0: String, p1: MaxError) {
//                maxAdPullReport(null, "NativeAd", p1.message)
//                isLoading = false
//            }
//        })
//        nativeAdLoader?.loadAd()
//    }
//
//    //展示原生广告
//    fun showMaxNativeAd(
//        activity: Activity?,
//        parent: ViewGroup,
//        slotname: String = "native_slot",
//        showBefore: (() -> Unit)? = null
//    ) {
//        if (FileApp.fContext.queryDataStoreBlock(SP_IS_BLACKLIST, true)) {
//            return
//        }
//
//        if (!AppLovinSdk.getInstance(FileApp.fContext).isInitialized) {
//            return
//        }
//        if (!AdUtils.isShowAd(slotname)) {
//            return
//        }
//        nativeAdLoader?.setRevenueListener(EventOnPaidEventListener())
//        loadingListener = {
//
//            if ((System.currentTimeMillis() - nativeLoadTime <= 1000 * 60 * 60) && nativeData?.first != null) {
//                showBefore?.invoke()
//                parent.removeAllViews()
//                parent.addView(nativeData?.first)
//                maxAdShowReport(nativeData?.second, "NativeAd")
//                SaveSoltShowTime(slotname)
//            }
//
//            //赋值给已经展示过的
//            showedNativeAd = currentNativeAd
//            //nativeAd已展示了赋空
//            currentNativeAd = null
//            nativeData = null
//            loadingListener = null
//            loadMaxNativeAd()
//        }
//        if (currentNativeAd == null) {
//            loadMaxNativeAd()
//            val obj = JSONObject()
//            obj.put("reason", "no_ad")
//            obj.put("ad_unit", "nativeAd")
//            EventHelper.event("ad_show_error", ext = obj)
//        } else {
//            loadingListener?.invoke()
//        }
//    }
//
//    //广告拉取上报
//    private fun maxAdPullReport(
//        ad: MaxAd?,
//        adUnit: String,
//        error: String? = null,
//        reqId: String? = null
//    ) {
//        val obj = JSONObject()
//        obj.put("UnitId", ad?.adUnitId)
//        obj.put("ad_unit", adUnit)
//        obj.put(
//            "creativeId",
//            ad?.creativeId
//        )
//        obj.put("req_id", reqId)
//        obj.put("status", if (ad == null) "0" else "1")
//        obj.put("networkname", ad?.networkName)
//        obj.put("placement", ad?.placement)
//        obj.put("networkplacement", ad?.networkPlacement)
//        obj.put("requestLatencyMillis", ad?.requestLatencyMillis)
//        obj.put("valueMicros", ad?.revenue?.times(1000000))
//        if (error == null) {
//            obj.put("status", "1")
//        } else {
//            obj.put("errMsg", error)
//            obj.put("status", "2")
//        }
//        EventHelper.event("ad_pull", ext = obj)
//        // Log.e("MXL", "maxAdPullReport: ", )
//    }
//
//    //广告展示上报
//    private fun maxAdShowReport(ad: MaxAd?, adUnit: String, activity: Activity? = null) {
//        val obj = JSONObject()
//        obj.put("UnitId", ad?.adUnitId)
//        obj.put("ad_unit", adUnit)
//        obj.put(
//            "creativeId",
//            ad?.creativeId
//        )
//        obj.put("networkname", ad?.networkName)
//        obj.put("placement", ad?.placement)
//        obj.put("networkplacement", ad?.networkPlacement)
//        obj.put("requestLatencyMillis", ad?.requestLatencyMillis)
//        obj.put("valueMicros", ad?.revenue)
////        ad?.revenue?.let {
////            Firebase.analytics.logEvent("ad_price", Bundle().apply {
////                putDouble("valueMicros", it * 1000000)
////            })
////        }
//        EventHelper.event("ad_show", ext = obj)
//        // Log.e("MXL", "maxAdShowReport: ", )
//    }
//
//    //广告点击上报
//    private fun maxAdclickReport(ad: MaxAd?, adUnit: String) {
//        val obj = JSONObject()
//        obj.put("UnitId", ad?.adUnitId)
//        obj.put("ad_unit", adUnit)
//        obj.put(
//            "creativeId",
//            ad?.creativeId
//        )
//        obj.put("networkname", ad?.networkName)
//        obj.put("placement", ad?.placement)
//        obj.put("networkplacement", ad?.networkPlacement)
//        obj.put("requestLatencyMillis", ad?.requestLatencyMillis)
//        obj.put("valueMicros", ad?.revenue)
//        EventHelper.event("ad_click", ext = obj)
//    }
//
//    fun SaveSoltShowTime(key: String) {
////        val nums=SPUtils.getInstance().getInt("${key}_ad_show_num", 0)
////        SPUtils.getInstance().put("${key}_ad_show_num",  nums+1)
//
//        FileApp.fContext.saveDataStoreBlock(getLongString(key), System.currentTimeMillis())
//        val adNum =
//            FileApp.fContext.queryDataStoreBlock(getIntString("${key}_ad_show_num"), 0)
//        FileApp.fContext.saveDataStoreBlock(getIntString("${key}_ad_show_num"), adNum + 1)
//    }
//
//
//    private val taichiPref = getApplicationContext().getSharedPreferences("TaichiTroasCache", 0)
//    private val taichiSharedPreferencesEditor = taichiPref.edit()
//
//    private class EventOnPaidEventListener : MaxAdRevenueListener {
//        override fun onAdRevenuePaid(ad: MaxAd) {
//            val params = Bundle()
//            val currentImpressionRevenue: Double = ad.revenue // In USD
//            val mFirebaseAnalytics = FirebaseAnalytics.getInstance(FileApp.fContext)
//            params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin")
//            params.putString(FirebaseAnalytics.Param.AD_SOURCE, ad.networkName)
//            params.putString(FirebaseAnalytics.Param.AD_FORMAT, ad.format.getDisplayName())
//            params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, ad.adUnitId)
//            params.putDouble(FirebaseAnalytics.Param.VALUE, currentImpressionRevenue)
//            params.putString(FirebaseAnalytics.Param.CURRENCY, "USD")
//            mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params)
//            mFirebaseAnalytics.logEvent("Ad_Impression_Revenue", params)
//            val previousTaichiTroasCache = taichiPref.getFloat("TaichiTroasCache", 0f)
//            val currentTaichiTroasCache = previousTaichiTroasCache + currentImpressionRevenue
//            if (currentTaichiTroasCache >= 0.01) {
//                val roasbundle = Bundle()
//                roasbundle.putDouble(FirebaseAnalytics.Param.VALUE, currentTaichiTroasCache)
//                roasbundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD")///(Required)tROAS事件必须
//                mFirebaseAnalytics.logEvent("Total_Ads_Revenue_001", roasbundle) // 给Taichi用
//                taichiSharedPreferencesEditor.putFloat("TaichiTroasCache", 0f)//重新清零，开始计算
//            } else {
//                taichiSharedPreferencesEditor.putFloat(
//                    "TaichiTroasCache",
//                    currentTaichiTroasCache.toFloat()
//                )
//                taichiSharedPreferencesEditor.commit()
//            }
//            val obj = JSONObject()
//            val revenue = ad.revenue
//            val countryCode = AppLovinSdk.getInstance(FileApp.fContext).configuration.countryCode
//            val networkName = ad.networkName
//            val adUnitId = ad.adUnitId
//            val adFormat = ad.format
//            val placement = ad.placement
//            val networkPlacement = ad.networkPlacement
//            obj.put("valueMicros", revenue)
//            obj.put("currencyCode", countryCode)
//            obj.put("adUnitId", adUnitId)
//            obj.put("networkName", networkName)
//            obj.put("adFormat", adFormat)
//            obj.put("placement", placement)
//            obj.put("networkPlacement", networkPlacement)
//            EventHelper.event("ad_price", ext = obj)
//        }
//
//    }
//}