package com.troy.xifan;

import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import com.avos.avoscloud.AVAnalytics;
import com.avos.avoscloud.AVOSCloud;
import com.chenenyu.router.Router;
import com.facebook.stetho.Stetho;
import com.orhanobut.logger.LogLevel;
import com.orhanobut.logger.Logger;
import com.troy.xifan.config.Constants;
import com.troy.xifan.model.response.UserRes;
import im.fir.sdk.FIR;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by chenlongfei on 2016/11/6.
 */

public class App extends Application {
    public static final String TAG = "Xifan";
    private static App sInstance;

    private UserRes user;

    private List<Activity> mActivityList = new ArrayList<>();

    public App() {
        sInstance = this;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
        init();
    }

    private void init() {
        Router.initialize(this);

        Stetho.initializeWithDefaults(this);
        Logger.init(TAG)                 // default PRETTYLOGGER or use just init()
                .methodCount(1)                 // default 2
                .hideThreadInfo()               // default shown
                .logLevel(LogLevel.FULL)        // default LogLevel.FULL
                .methodOffset(2);            // default 0

        FIR.init(this);
        // 初始化参数依次为 this, AppId, AppKey
        AVOSCloud.initialize(this, Constants.AVOSCloud.APP_ID, Constants.AVOSCloud.APP_KEY);
        AVAnalytics.enableCrashReport(this, true);
    }

    public static App getInstance() {
        return sInstance;
    }

    public UserRes getUser() {
        return user;
    }

    public void setUser(UserRes user) {
        this.user = user;
    }

    private ActivityLifecycleCallbacks mActivityLifecycleCallbacks =
            new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                    if (!mActivityList.contains(activity)) {
                        mActivityList.add(activity);
                    }
                }

                @Override
                public void onActivityStarted(Activity activity) {

                }

                @Override
                public void onActivityResumed(Activity activity) {

                }

                @Override
                public void onActivityPaused(Activity activity) {

                }

                @Override
                public void onActivityStopped(Activity activity) {

                }

                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

                }

                @Override
                public void onActivityDestroyed(Activity activity) {
                    if (mActivityList.contains(activity)) {
                        mActivityList.remove(activity);
                    }
                }
            };

    public List<Activity> getActivityList() {
        return mActivityList;
    }

    public void setActivityList(List<Activity> activityList) {
        mActivityList = activityList;
    }

    public void cleanActivityList() {
        for (Activity activity : mActivityList) {
            activity.finish();
        }
    }
}