package com.qunar.rn_service.fragment;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableNativeMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.qunar.im.utils.ConnectionUtil;
import com.qunar.im.core.manager.IMNotificaitonCenter;
import com.qunar.im.protobuf.Event.QtalkEvent;
import com.qunar.rn_service.rnmanage.QtalkServiceRNViewInstanceManager;

/**
 * Created by hubin on 2018/3/27.
 */

public class RNMineFragment extends RNBaseFragment implements IMNotificaitonCenter.NotificationCenterDelegate {

    private static final String MODULE = "MySetting";
    private ReactInstanceManager mReactInstanceManager;
    private ReactRootView mReactRootView;
    private Activity activity;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mReactRootView = new ReactRootView(context);
        activity = getActivity();
        mReactInstanceManager = QtalkServiceRNViewInstanceManager.getInstanceManager(activity);


    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ConnectionUtil.getInstance().addEvent(this, QtalkEvent.SHOW_MY_INFO);
//        ConnectionUtil.getInstance().addEvent(this, QtalkEvent.LOGIN_EVENT);
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        super.onCreateView(inflater, container, savedInstanceState);
        return mReactRootView;

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mReactRootView.startReactApplication(mReactInstanceManager, MODULE, getDefaultBundle());
    }

    @Override
    protected void onFragmentFirstVisible() {
        super.onFragmentFirstVisible();
    }

    public static Bundle getDefaultBundle() {
        Bundle bundle = new Bundle();


        return bundle;
    }
    private void sendEvent(ReactContext reactContext,
                           String eventName,
                           @Nullable WritableMap params) {
        try {
            reactContext
                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                    .emit(eventName, params);
        } catch (Exception _ex) {
            // null bridge
        }
    }

    public  void clearBridge() {
        WritableNativeMap map = new WritableNativeMap();
        sendEvent(mReactInstanceManager.getCurrentReactContext(),"QIM_RN_Will_Show",map);
    }


    @Override
    public void didReceivedNotification(String key, Object... args) {
        switch (key) {
            case QtalkEvent.SHOW_MY_INFO:
                clearBridge();
                break;
//            case QtalkEvent.LOGIN_EVENT:
//                if (args[0].equals(LoginStatus.Login)) {
//                    clearBridge();
//                }
        }
    }

//    @Override
//    public void onDestroy() {
//        super.onDestroy();
//        if (mReactInstanceManager != null) {
//            mReactInstanceManager.onHostDestroy(getActivity());
//        }
//
//        if (mReactRootView != null) {
//            mReactRootView.unmountReactApplication();
//            mReactRootView = null;
//        }
//        ConnectionUtil.getInstance().removeEvent(this, QtalkEvent.SHOW_MY_INFO);
//    }
}