package com.ccwangluo.accelerator

import android.app.Application
import android.content.Context
import android.content.res.Configuration
import android.os.Environment
import androidx.multidex.MultiDex
import com.ccwangluo.accelerator.ui.MainActivity
import com.ccwangluo.accelerator.utils.PhoneUtils
import com.github.shadowsocks.Core
import com.hjq.toast.ToastUtils
import com.tencent.bugly.Bugly
import com.tencent.bugly.BuglyStrategy
import com.tencent.bugly.beta.Beta
import com.tencent.android.tpush.XGPushConfig
import com.tencent.map.geolocation.TencentLocationManager
import com.tencent.mmkv.MMKV
import com.xuexiang.xpage.PageConfig
import com.xuexiang.xpage.base.XPageActivity
import com.xuexiang.xutil.XUtil


class App : Application(), androidx.work.Configuration.Provider by Core {
    override fun onCreate() {
        super.onCreate()
        initBugly()
        PageConfig.getInstance() //      //页面注册,默认不设置的话使用的就是自动注册
            //      .setPageConfiguration(new AutoPageConfiguration())
            .debug("PageLog") //开启调试
            .setContainActivityClazz(XPageActivity::class.java) //设置默认的容器Activity
            .init(this)
        PhoneUtils.initSdk(this)
        // 初始化 Toast 框架
        ToastUtils.init(this)
        MultiDex.install(this)
        Core.init(this, MainActivity::class)
        MMKV.initialize(this)
        XGPushConfig.enableDebug(this,true);
        XUtil.init(this)
    }

    fun initBugly(){
        /**
         * true表示app启动自动初始化升级模块; false不会自动初始化;
         * 开发者如果担心sdk初始化影响app启动速度，可以设置为false，
         * 在后面某个时刻手动调用Beta.init(getApplicationContext(),false);
         */
        /***** Beta高级设置  */
        /**
         * true表示app启动自动初始化升级模块; false不会自动初始化;
         * 开发者如果担心sdk初始化影响app启动速度，可以设置为false，
         * 在后面某个时刻手动调用Beta.init(getApplicationContext(),false);
         */
        Beta.autoInit = true

        /**
         * true表示初始化时自动检查升级; false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法;
         */
        /**
         * true表示初始化时自动检查升级; false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法;
         */
        Beta.autoCheckUpgrade = true

        /**
         * 设置升级检查周期为60s(默认检查周期为0s)，60s内SDK不重复向后台请求策略);
         */
        /**
         * 设置升级检查周期为60s(默认检查周期为0s)，60s内SDK不重复向后台请求策略);
         */
        Beta.upgradeCheckPeriod = (60 * 1000).toLong()
        /**
         * 设置启动延时为1s（默认延时3s），APP启动1s后初始化SDK，避免影响APP启动速度;
         */
        /**
         * 设置启动延时为1s（默认延时3s），APP启动1s后初始化SDK，避免影响APP启动速度;
         */
        Beta.initDelay = (1 * 1000).toLong()
        /**
         * 设置通知栏大图标，largeIconId为项目中的图片资源;
         */
        /**
         * 设置通知栏大图标，largeIconId为项目中的图片资源;
         */
        Beta.largeIconId = R.mipmap.tt_logo
        /**
         * 设置状态栏小图标，smallIconId为项目中的图片资源Id;
         */
        /**
         * 设置状态栏小图标，smallIconId为项目中的图片资源Id;
         */
        Beta.smallIconId = R.mipmap.tt_logo
        /**
         * 设置更新弹窗默认展示的banner，defaultBannerId为项目中的图片资源Id;
         * 当后台配置的banner拉取失败时显示此banner，默认不设置则展示“loading“;
         */
        /**
         * 设置更新弹窗默认展示的banner，defaultBannerId为项目中的图片资源Id;
         * 当后台配置的banner拉取失败时显示此banner，默认不设置则展示“loading“;
         */
        Beta.defaultBannerId = R.mipmap.tt_logo
        /**
         * 设置sd卡的Download为更新资源保存目录;
         * 后续更新资源会保存在此目录，需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
         */
        /**
         * 设置sd卡的Download为更新资源保存目录;
         * 后续更新资源会保存在此目录，需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
         */
        Beta.storageDir = Environment
            .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
        /**
         * 已经确认过的弹窗在APP下次启动自动检查更新时会再次显示;
         */
        /**
         * 已经确认过的弹窗在APP下次启动自动检查更新时会再次显示;
         */
        Beta.showInterruptedStrategy = true
        /**
         * 只允许在MainActivity上显示更新弹窗，其他activity上不显示弹窗; 不设置会默认所有activity都可以显示弹窗;
         */
        /**
         * 只允许在MainActivity上显示更新弹窗，其他activity上不显示弹窗; 不设置会默认所有activity都可以显示弹窗;
         */
        Beta.canShowUpgradeActs.add(MainActivity::class.java)

        /***** Bugly高级设置 *****/
        /***** Bugly高级设置  */
        val strategy = BuglyStrategy()
        /**
         * 设置app渠道号
         */
        /**
         * 设置app渠道号
         */
        //strategy.appChannel = com.qq.bugly.beta.demo.DemoApplication.APP_CHANNEL

        /***** 统一初始化Bugly产品，包含Beta *****/
        /***** 统一初始化Bugly产品，包含Beta  */
        //Bugly.init(this, com.qq.bugly.beta.demo.DemoApplication.APP_ID, true, strategy)


        Beta.upgradeDialogLayoutId = R.layout.dialog_app_upgrade
        Bugly.init(this, "e030f74df5", true)
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        Core.updateNotificationChannels()
    }
}