package com.ydl.component.base;


import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Process;
import android.support.annotation.RequiresApi;

import com.facebook.stetho.Stetho;
import com.meituan.android.walle.WalleChannelReader;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.smtt.sdk.QbSdk;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
import com.ydl.component.BuildConfig;
import com.ydl.component.MainActivity;
import com.ydl.media.audio.PlayService;
import com.ydl.ydlcommon.base.config.HttpConfig;
import com.ydl.ydlcommon.base.config.YDLConstants;
import com.ydl.ydlcommon.base.delegate.IAppLifecycles;
import com.ydl.ydlcommon.utils.LogUtil;
import com.ydl.ydlcommon.utils.YdlBuryPointUtil;
import com.yidianling.course.lifeCallback.CoursePlayLifecycle;
import com.yidianling.im.config.NimApplication;

import org.jetbrains.annotations.NotNull;

import io.flutter.view.FlutterMain;

/**
 * Created by haorui on 2019-09-02.
 * Des:
 */
public class DemoAppLifecycles implements IAppLifecycles {

    @Override
    public void attachBaseContext(@NotNull Context base) {

    }

    @RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    @Override
    public void onCreate(@NotNull Application application) {
        //模块初始化
        moduleInit(application);
        if (NIMUtil.isMainProcess(application)) {
            //第三方SDK初始化
            initThirdServiceSDK(application);
            //Flutter 初始化需要在主线程中执行
            FlutterMain.startInitialization(application);

            //        FlutterMain.ensureInitializationComplete(application, null);
            //
            //        FlutterEngine flutterEngine = new FlutterEngine(application);
            //        flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
            //        YDLCommonPlugin plugin = new YDLCommonPlugin();
            //        flutterEngine.getLocalizationChannel().channel.setMethodCallHandler(plugin);

            Intent intent = new Intent(application, PlayService.class);
            application.startService(intent);
            application.registerActivityLifecycleCallbacks(new CoursePlayLifecycle());

            Stetho.initializeWithDefaults(application);
        }
    }

    @Override
    public void onTerminate(@NotNull Application application) {
    }

    private void moduleInit(Application application) {
        NimApplication.getInstance().initIm(application, MainActivity.class);
    }

    private void initThirdServiceSDK(Application application) {
        new Thread() {
            @Override
            public void run() {
                super.run();
                //设置线程优先级，不与主线程抢资源
                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

                //子线程中初始化X5内核，防止ANR问题
                initX5(application);

                if (DemoGlobalConfig.appEnv.equals(YDLConstants.ENV_PROD)){
//                    YDLavManager.Companion.getInstances().init(application, "3387e9b251f3491e9221a9877e8f7830");
                }else {
//                    YDLavManager.Companion.getInstances().init(application, "13b1536698f64905a1e7e5bb978ba821");
                }

                //bugly
                String packageName = application.getPackageName();
                String channel = WalleChannelReader.getChannel(application);
                if (channel == null || channel.equals("null")) {
                    channel = "test";
                }
                CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(application);
                strategy.setAppChannel(channel);
                String appkey = BuildConfig.DEBUG ? "630a3a5cea" : "3939e71afa";
                CrashReport.initCrashReport(application, appkey, BuildConfig.DEBUG, strategy);

                //umeng
                String umAppkey = null;
                if (BuildConfig.FLAVOR.endsWith("ydl")) {
                    umAppkey = "56970affe0f55a9cda001e24";
                    channel = "android_" + channel;
                    initUM(umAppkey, channel,application);
                    PlatformConfig.setWeixin("wx57a9d930270498c7", "17c031f02500ded3457a80e69d8e5e45");
                    PlatformConfig.setQQZone("1105070461", "6BvkUnk6wXJekcgR");
                }else if (BuildConfig.FLAVOR.endsWith("xlzx")) {
                    umAppkey = "5859e1656e27a42fa400021f";
                    channel = "ATK_7_android_" + channel;
                    initUM(umAppkey, channel,application);
                    PlatformConfig.setWeixin("wx1c6af5a11b5f531f", "1ddb93abbb2d81e604657d38e94a5720");
                    PlatformConfig.setQQZone("1107931541", "8dCvxUpi525uPGTJ");
                }

                // 选用AUTO页面采集模式
                MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
                MobclickAgent.setCatchUncaughtExceptions(!BuildConfig.DEBUG);

                //开启友盟集成测试
                UMConfigure.setLogEnabled(BuildConfig.DEBUG);
                HttpConfig.Companion.getInstance().initSocketConfig(() -> {
                    //数据埋点初始化 (一定要放在主进程中/因为用到了umeng统计，需要放在umeng初始化后)
                    YdlBuryPointUtil.init(application, true);
                });
                //安全检测
                //YDLAppProtector.init();

            }
        }.start();
    }



    private void initUM(String umAppKey, String channel, Application application) {
        /**
         * 初始化common库
         * 参数1:上下文，不能为空
         * 参数2:友盟 app key
         * 参数3:友盟 channel
         * 参数4:设备类型，UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子，默认为手机
         * 参数5:Push推送业务的secret
         */
        UMConfigure.init(application, umAppKey, channel, UMConfigure.DEVICE_TYPE_PHONE, null);
        UMShareAPI.init(application, umAppKey);
    }


    /**
     * 初始化X5内核
     * @param application
     */
    private void initX5(Application application) {
        // 在调用TBS初始化、创建WebView之前进行如下配置，以开启优化方案
//        HashMap map = new HashMap();
//        map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
//        QbSdk.initTbsSettings(map);

//        if (!QbSdk.isTbsCoreInited()) {//// preinit只需要调用一次，如果已经完成了初始化，那么就直接构造view
//            QbSdk.preInit(application, null);// 设置X5初始化完成的回调接口
//        }

        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {

            @Override
            public void onViewInitFinished(boolean arg0) {
                //初始化完成回调
                LogUtil.i("QbSdk onViewInitFinished："+arg0);
            }

            @Override
            public void onCoreInitFinished() {
                LogUtil.i("QbSdk onCoreInitFinished");
            }
        };
        QbSdk.initX5Environment(application, cb);

    }


}