//
//  MyFatoorahModule.m
//
//  Created by Muhammad Bassiouny on 1/25/23.
//

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import "React/RCTEventEmitter.h"

@interface RCT_EXTERN_MODULE(MFModule, RCTEventEmitter)

RCT_EXTERN_METHOD(init:(NSString)apiKey
                  country:(NSString)country
                  environment:(NSString)environment)

RCT_EXTERN_METHOD(setUpActionBar:(NSString)toolBarTitle
                  toolBarTitleColor:(nonnull NSNumber)toolBarTitleColor
                  toolBarBackgroundColor:(nonnull NSNumber)toolBarBackgroundColor
                  isShowToolBar:(BOOL)isShowToolBar
                  )

RCT_EXTERN_METHOD(InitiatePayment:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(SendPayment:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(ExecutePayment:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(ExecuteDirectPayment:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(GetPaymentStatus:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(cancelToken:(NSString)token
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(cancelRecurringPayment:(NSString)recurringId
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(InitiateSession:(NSDictionary)request
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(LoadCardView:(NSDictionary)request
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(Validate:(nullable NSString)currency
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(Pay:(NSDictionary)request
                  language:(NSString)language
                  currency:(nullable NSString)currency
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(ExecutePaymentWithSavedToken:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(ApplePayPayment:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(ApplePayDisplay:(NSDictionary)request
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(DisplayApplePayButton:(NSDictionary)initSessionRequest
                  executePaymentRequest:(NSDictionary)executePaymentRequest
                  language:(NSString)language
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(ApplePayExecutePayment:(nullable NSDictionary)request
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(LoadApplePay:(NSDictionary)initSessionRequest
                  executePaymentRequest:(NSDictionary)executePaymentRequest
                  language:(NSString)language
                  merchantName:(nullable NSString)merchantName
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(OpenApplePaymentSheet:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(CompleteApplePayment:(nullable NSDictionary)request
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(getApplePayToken:(NSDictionary)applePayRequest
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(applePayNativePayment:(NSDictionary)applePayRequest
                  request:(NSDictionary)request
                  resolve:(RCTPromiseResolveBlock)resolve
                  reject:(RCTPromiseRejectBlock)reject)

@end
