package com.xg.navigation.bridge;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.ViewGroup;
import android.view.ViewParent;

import com.facebook.common.logging.FLog;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactRootView;
import com.facebook.react.common.ReactConstants;
import com.facebook.react.devsupport.DoubleTapReloadRecognizer;

import java.lang.reflect.Field;

/**
 * Created by zhouchangping on 18-4-16.
 * 自定义的ReactActivityDelegate，只用来初始化ReactNativeManager
 */
public class MyReactActivityDelegate extends ReactActivityDelegate {
    private Activity mActivity;
    private String mainComponentName;
    private ReactRootView reactRootView;

    public MyReactActivityDelegate(Activity activity, @Nullable String mainComponentName) {
        super(activity, mainComponentName);
        this.mActivity = activity;
        this.mainComponentName = mainComponentName;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Class<ReactActivityDelegate> clazz = ReactActivityDelegate.class;
        try {
            Field field = clazz.getDeclaredField("mDoubleTapReloadRecognizer");
            field.setAccessible(true);
            field.set(this, new DoubleTapReloadRecognizer());
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (!getReactInstanceManager().hasStartedCreatingInitialContext()) {
            getReactInstanceManager().createReactContextInBackground();
        }
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (reactRootView!=null) {
            reactRootView.unmountReactApplication();
            reactRootView = null;
        }
    }

    @Override
    public ReactNativeHost getReactNativeHost() {
        return super.getReactNativeHost();
    }

    @Override
    public void loadApp(String appKey) {
        //目前看没有调用到，不知道干嘛用的，没敢删除
        if (mainComponentName == null) {
            FLog.e(ReactConstants.TAG, "mainComponentName must not be null!");
            return;
        }
        try {
            if (reactRootView == null) {
                // 2.缓存中不存在RootView,直接创建
                reactRootView = new ReactRootView(mActivity);
                reactRootView.startReactApplication(
                        getReactInstanceManager(),
                        mainComponentName,
                        null);
            }
            ViewParent viewParent = reactRootView.getParent();
            if (viewParent != null) {
                ViewGroup vp = (ViewGroup) viewParent;
                vp.removeView(reactRootView);
            }
            mActivity.setContentView(reactRootView);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}