package com.xg.navigation;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.xg.navigation.util.NavigationUtil;

import javax.annotation.Nonnull;

/**
 * Created by fanzhengchen on 3/8/18.
 */

public class NativeNavigationEmitter extends ReactContextBaseJavaModule {

    private static final String EVENT_NAME = "XGNavigationCallBackEvent";

    public NativeNavigationEmitter(ReactApplicationContext reactContext) {
        super(reactContext);

    }

    @Override
    public String getName() {
        return "NavigationEmitter";
    }

    @ReactMethod
    public void invokeNativeCallBack(ReadableMap params) {
        String callBackID = params.getString("callBackID");
        ReadableMap info = params.getMap("params");
        NavigationUtil.getJsCallBackByID(callBackID).apply(info);
    }


    public static void sendEvent(ReactContext reactContext, String eventName, @Nonnull WritableMap paramss) {
        if (reactContext != null) {
            reactContext
                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                    .emit(eventName, paramss);
        }

    }

    /**
     * 把JavaScript定义的回调函数调用起来, 通过传递消息的方式实现
     *
     * @param reactContext
     * @param params
     */
    public static void sendEvent(ReactContext reactContext, @Nonnull WritableMap params) {
        if (reactContext != null) {
            reactContext
                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                    .emit(EVENT_NAME, params);
        }

    }

}
