package com.emato.ich.crash;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.TooltipCompat;

import com.cherry.sdk.controller.BuildConfig;
import com.emato.ich.MainActivity;
import com.emato.ich.update.CustomUpdateConfigProvider;
import com.emato.ich.update.UpdateService;
import com.xuexiang.xupdate.XUpdate;
import com.xuexiang.xupdate.aria.AriaDownloadServiceProxyImpl;
import com.xuexiang.xupdate.easy.EasyUpdate;
import com.xuexiang.xupdate.easy.config.UpdateConfig;
import com.xuexiang.xupdate.entity.UpdateError;
import com.xuexiang.xupdate.listener.OnUpdateFailureListener;
import com.xuexiang.xupdate.proxy.IUpdateHttpService;
import com.xuexiang.xupdate.utils.UpdateUtils;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 继承Application的CrashApplication
 * 程序崩溃后可以做相关操作
 */
public class CrashApplication extends Application {
    private final List<Activity> mActivityList = new ArrayList<>();
    private static final String TAG = CrashApplication.class.getName();
    CustomUpdateConfigProvider provider = new CustomUpdateConfigProvider();
    @Override
    protected void attachBaseContext(Context base) {

        // XUpdate自定义配置
        EasyUpdate.setUpdateConfigProvider(provider);
        super.attachBaseContext(base);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化未捕获异常处理器
        UncaughtExceptionHandlerImpl.getInstance().init(getApplicationContext(), BuildConfig.DEBUG, true, 1000, MainActivity.class);

//        XUpdate.get()
//                .debug(true)
//                .isWifiOnly(false)                                               //默认设置只在wifi下检查版本更新
//                .isGet(false)                                                    //默认设置使用get请求检查版本
//                .isAutoMode(true)                                              //默认设置非自动模式，可根据具体使用配置
//                .param("versionCode", UpdateUtils.getVersionCode(this))         //设置默认公共请求参数
//                .param("appKey", getPackageName())
//                .setOnUpdateFailureListener(error -> {
//                    Log.i(TAG, "onCreate: 自动更新失败! " + error.getCode());
//                })
//                .supportSilentInstall(true)                                     //设置是否支持静默安装，默认是true
//                .setIUpdateHttpService(new UpdateService())                     //这个必须设置！实现网络请求功能。
//                .init(this);                                                    //这个必须初始化
    }

    /**
     * 添加单个Activity
     */
    public void addActivity(Activity activity) {
        // 为了避免重复添加，需要判断当前集合是否满足不存在该Activity
        if (!mActivityList.contains(activity)) {
            mActivityList.add(activity); // 把当前Activity添加到集合中
        }
    }

    /**
     * 销毁单个Activity
     */
    public void removeActivity(Activity activity) {
        // 判断当前集合是否存在该Activity
        if (mActivityList.contains(activity)) {
            mActivityList.remove(activity); // 从集合中移除
            if (activity != null){
                activity.finish(); // 销毁当前Activity
            }
        }
    }

    /**
     * 销毁所有的Activity
     */
    public void removeAllActivity() {
        // 通过循环，把集合中的所有Activity销毁
        for (Activity activity : mActivityList) {
            if (activity != null){
                activity.finish();
            }
        }
        //杀死该应用进程
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        System.gc();
    }
}
