package com.hc.webapp;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;

import com.hc.lib.TAG;
import com.jewel.lib.android.SharedPre;
import com.liulishuo.filedownloader.FileDownloader;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.FormatStrategy;
import com.orhanobut.logger.PrettyFormatStrategy;
import com.yanzhenjie.nohttp.InitializationConfig;
import com.yanzhenjie.nohttp.Logger;
import com.yanzhenjie.nohttp.NoHttp;
import com.yanzhenjie.nohttp.URLConnectionNetworkExecutor;
import com.yanzhenjie.nohttp.cache.DBCacheStore;
import com.yanzhenjie.nohttp.cookie.DBCookieStore;

import java.util.List;

public class BaseApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        SharedPre.init(this, getPackageName());
        initHttp();
        initLogger();
        initVideo();
        FileDownloader.setupOnApplicationOnCreate(this);
    }

    private void initHttp() {
        InitializationConfig config = InitializationConfig.newBuilder(this)
                // 全局连接服务器超时时间，单位毫秒，默认10s。
                .connectionTimeout(60 * 1000)
                // 全局等待服务器响应超时时间，单位毫秒，默认10s。
                .readTimeout(60 * 1000)
                // 配置缓存，默认保存数据库DBCacheStore，保存到SD卡使用DiskCacheStore。
                .cacheStore(
                        // 如果不使用缓存，setEnable(false)禁用。
                        new DBCacheStore(this).setEnable(false)
                )
                // 配置Cookie，默认保存数据库DBCookieStore，开发者可以自己实现CookieStore接口。
                .cookieStore(
                        // 如果不维护cookie，setEnable(false)禁用。
                        new DBCookieStore(this).setEnable(false)
                )
                // 配置网络层，默认URLConnectionNetworkExecutor，如果想用OkHttp：OkHttpNetworkExecutor。
                .networkExecutor(new URLConnectionNetworkExecutor())
                // 全局重试次数，配置后每个请求失败都会重试x次。
                .retry(2)
                .build();
        NoHttp.initialize(config);
        // 开启NoHttp的调试模式, 配置后可看到请求过程、日志和错误信息。
        Logger.setDebug(BuildConfig.DEBUG);
        // 打印Log的tag。
        Logger.setTag(TAG.HTTP);
    }

    private void initLogger() {
        FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder().tag(getApplicationContext().getPackageName()).build();
        com.orhanobut.logger.Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
    }

    private void initVideo() {

//        GSYVideoManager.instance().setCurrentVideoHeight(Resources.getSystem().getDisplayMetrics().heightPixels);
//        GSYVideoManager.instance().setCurrentVideoWidth(Resources.getSystem().getDisplayMetrics().widthPixels);

//        PlayerFactory.setPlayManager(IjkPlayerManager.class);
//        GSYVideoType.setRenderType(GSYVideoType.GLSURFACE);
//        GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL);
//        GSYVideoType.enableMediaCodec();
//        GSYVideoType.enableMediaCodecTexture();
//
//        VideoOptionModel videoOptionModel =
//                new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop",  30);
//        List<VideoOptionModel> list = new ArrayList<>();
//        list.add(videoOptionModel);
//        GSYVideoManager.instance().setOptionModelList(list);
//        CacheFactory.setCacheManager(ExoPlayerCacheManager.class);
    }

    /**
     * 判断应用是否处于前台
     *
     * @return <code>true</code>为前台，反之为后台
     */
    public static boolean isRunningForeground(Context context) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (activityManager == null) return false;
        List<ActivityManager.RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();
        // 枚举进程
        for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessInfos) {
            if (appProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                if (appProcessInfo.processName.equals(context.getApplicationInfo().processName)) {
                    com.orhanobut.logger.Logger.d("应用处于前台状态");
                    return true;
                }
            }
        }
        com.orhanobut.logger.Logger.d("应用退到后台");
        return false;
    }



    public static void exit() {
        android.os.Process.killProcess(android.os.Process.myPid());   //获取PID
        System.exit(0);
    }

}
