#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@interface RCT_EXTERN_MODULE(XcodeTemplateProject, RCTEventEmitter)

/**
 * 直接调用原生方法
 */
RCT_EXTERN_METHOD(nativeNormalMethod)

/**
 * 传递参数到Native原生方法
 * 可传递的JS与Android参数对应的类型
 * Boolean -> Bool
 * Integer -> Number
 * Double -> Number
 * Float -> Number
 * String -> String
 * Callback -> function
 * ReadableMap -> Object
 * ReadableArray -> Array
 *
 * @param numA
 * @param numB
 */
RCT_EXTERN_METHOD(nativeMethodWithParams:(int)numA withNumB:(int)numB)

/**
 * 原生方法包含回调函数。提供函数Callback来把返回值传回给 JavaScript
 *
 * @param numA
 * @param numB
 * @param successCallback
 * @param errorCallback
 */
RCT_EXTERN_METHOD(nativeMethodWithCallback:(int)numA withNumB:(int)numB
                  withSuccessCallback:(RCTResponseSenderBlock)successCallback
                  withErrorCallback:(RCTResponseSenderBlock)errorCallback)

/**
 * 原生方法通过Promise返回给JS端， JS调用的时候实际只要传递numA，numB两个参数
 *
 * @param numA
 * @param numB
 * @param promise
 */
RCT_EXTERN_METHOD(nativeMethodWithPromise:(int)numA withNumB:(int)numB
                  withResolver:(RCTPromiseResolveBlock)resolve
                  withRejecter:(RCTPromiseRejectBlock)reject)

/**
 * 这里是为了方便调用，所以直接写了一个Bridge方法用来执行发送事件给JS
 * 本质上JSEvent.getInstance().sendMsg()是可以在Android所有地方调用，
 * 不需要在@ReactMedhod标记的方法中调用，也不需要在Module中调用
 */
RCT_EXTERN_METHOD(nativeSendCustomEvent)

@end

