package com.fawrypay.rnfawrypaysdk import com.facebook.react.bridge.* import com.facebook.react.modules.core.DeviceEventManagerModule import com.fawry.fawrypay.FawrySdk import com.fawry.fawrypay.interfaces.FawryPreLaunch import com.fawry.fawrypay.interfaces.FawrySdkCallbacks import com.fawry.fawrypay.models.* class RnFawryPaySdkModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { override fun getName(): String { return NAME } private fun getMerchantInfo(merchantInfo : ReadableMap) : LaunchMerchantModel { return LaunchMerchantModel( merchantCode = merchantInfo.getString("merchantCode") ?: "", secretCode = merchantInfo.getString("merchantSecretCode"), merchantRefNum = merchantInfo.getString("merchantRefNum") ) } private fun getCustomerInfo(customerInfo:ReadableMap):LaunchCustomerModel { return LaunchCustomerModel( customerName = customerInfo.getString("customerName"), customerEmail = customerInfo.getString("customerEmail"), customerMobile = customerInfo.getString("customerMobile"), customerProfileId = customerInfo.getString("customerProfileId") ?: "" ) } private fun getChargeItems(items:ReadableArray) : ArrayList { val chargeItems = ArrayList() for (i in 0 until items.size()) { chargeItems.add(BillItems( itemId = items.getMap(i).getString("itemId"), description = items.getMap(i).getString("description"), quantity = items.getMap(i).getString("quantity"), price = items.getMap(i).getString("price") )) } return chargeItems } @ReactMethod fun startPayment( baseUrl: String, lang: String, merchantInfo: ReadableMap, customerInfo: ReadableMap, items: ReadableArray, allow3DPayment: Boolean , skipReceipt: Boolean , skipLogin: Boolean, payWithCardToken: Boolean , authCaptureMode: Boolean , allowVoucher: Boolean , signature: String? ) { var selectedLang = if(lang == "ARABIC") { FawrySdk.Languages.ARABIC } else{ FawrySdk.Languages.ENGLISH } var parsedSignature : String? = null if (!signature.isNullOrEmpty()) { parsedSignature = signature } FawrySdk.launchAnonymousSDK( reactApplicationContext.currentActivity!!, selectedLang, baseUrl, FawryLaunchModel( launchCustomerModel = getCustomerInfo(customerInfo), launchMerchantModel = getMerchantInfo(merchantInfo), allow3DPayment = allow3DPayment, chargeItems = getChargeItems(items), skipReceipt = skipReceipt, skipLogin = skipLogin, payWithCardToken = payWithCardToken, authCaptureMode = authCaptureMode, allowVoucher = allowVoucher, signature = parsedSignature ), object : FawrySdkCallbacks { override fun onPreLaunch(onPreLaunch: FawryPreLaunch) { onPreLaunch.onContinue() } override fun onInit() { } override fun onSuccess(msg: String, data: Any?) { reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) .emit(FAWRY_EVENT_PAYMENT_COMPLETED, data) } override fun onPaymentCompleted(msg: String, data: Any?) { reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) .emit(FAWRY_EVENT_ON_SUCCESS, data) } override fun onFailure(error: String) { reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) .emit(FAWRY_EVENT_ON_FAIL, error) } }) } @ReactMethod fun openCardsManager( baseUrl : String, lang: String, merchantInfo: ReadableMap, customerInfo: ReadableMap ) { var selectedLang = if(lang == "ARABIC") { FawrySdk.Languages.ARABIC } else{ FawrySdk.Languages.ENGLISH } FawrySdk.launchCardManager( reactApplicationContext.currentActivity!!, selectedLang, baseUrl, FawryLaunchModel( launchCustomerModel = getCustomerInfo(customerInfo), launchMerchantModel = getMerchantInfo(merchantInfo), ), object : FawrySdkCallbacks { override fun onPreLaunch(onPreLaunch: FawryPreLaunch) { onPreLaunch.onContinue() } override fun onInit() { } override fun onPaymentCompleted(msg: String, data: Any?) { //won't be called in this flow } override fun onSuccess(msg: String, data: Any?) { //won't be called in this flow } override fun onFailure(error: String) { reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) .emit(FAWRY_EVENT_CardManager_FAIL, error) } }) } companion object { const val NAME = "RnFawryPaySdk" const val FAWRY_EVENT_PAYMENT_COMPLETED = "FAWRY_EVENT_PAYMENT_COMPLETED" const val FAWRY_EVENT_ON_SUCCESS = "FAWRY_EVENT_ON_SUCCESS" const val FAWRY_EVENT_ON_FAIL = "FAWRY_EVENT_ON_FAIL" const val FAWRY_EVENT_CardManager_FAIL = "FAWRY_EVENT_CardManager_FAIL" } }