package io.caf.documentdetector.utils import com.combateafraude.documentdetector.output.DocumentDetectorResult import com.combateafraude.documentdetector.output.failure.InvalidTokenReason import com.combateafraude.documentdetector.output.failure.LibraryReason import com.combateafraude.documentdetector.output.failure.NetworkReason import com.combateafraude.documentdetector.output.failure.PermissionReason import com.combateafraude.documentdetector.output.failure.SDKFailure import com.combateafraude.documentdetector.output.failure.SecurityReason import com.combateafraude.documentdetector.output.failure.ServerReason import com.combateafraude.documentdetector.output.failure.StorageReason import com.facebook.react.bridge.WritableArray import com.facebook.react.bridge.WritableMap import com.facebook.react.bridge.WritableNativeArray import com.facebook.react.bridge.WritableNativeMap object EncodeJSON { // Reasons private const val INVALID_TOKEN_REASON = "InvalidTokenReason" private const val NETWORK_REASON = "NetworkReason" private const val SERVER_REASON = "ServerReason" private const val PERMISSION_REASON = "PermissionReason" private const val SECURITY_REASON = "SecurityReason" private const val STORAGE_REASON = "StorageReason" private const val LIBRARY_REASON = "LibraryReason" const val UNEXPECTED_REASON = "UnexpectedReason" // JSON Properties private const val IMAGE_PATH = "imagePath" private const val IMAGE_URL = "imageUrl" private const val LABEL = "label" private const val QUALITY = "quality" private const val CAPTURES = "captures" private const val TRACKING_ID = "trackingId" private const val STATUS_CODE = "statusCode" private const val MESSAGE = "message" private const val TYPE = "type" private const val ERROR_CODE_500 = 500 fun createCaptureMap(result: DocumentDetectorResult): WritableMap { val map: WritableMap = WritableNativeMap() val capturesArray: WritableArray = WritableNativeArray() for (capture in result.captures) { val captureMap: WritableMap = WritableNativeMap() captureMap.putString(IMAGE_PATH, capture.imagePath) captureMap.putString(IMAGE_URL, capture.imageUrl) captureMap.putString(LABEL, capture.label) captureMap.putDouble(QUALITY, capture.quality ?: 0.0) capturesArray.pushMap(captureMap) } map.putArray(CAPTURES, capturesArray) map.putString(TYPE, result.type) map.putString(TRACKING_ID, result.trackingId) return map } fun createErrorMap(sdkFailure: SDKFailure): WritableMap { val map: WritableMap = WritableNativeMap() val statusCode: Int val message: String val type: String when (sdkFailure) { is InvalidTokenReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = INVALID_TOKEN_REASON } is NetworkReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = NETWORK_REASON } is ServerReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = SERVER_REASON } is PermissionReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = PERMISSION_REASON } is SecurityReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = SECURITY_REASON } is StorageReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = STORAGE_REASON } is LibraryReason -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = LIBRARY_REASON } else -> { statusCode = sdkFailure.securityErrorCode message = sdkFailure.message type = UNEXPECTED_REASON } } map.putString(STATUS_CODE, statusCode.toString()) map.putString(MESSAGE, message) map.putString(TYPE, type) return map } fun createLibraryErrorMap(errorMessage: String?): WritableMap { val map: WritableMap = WritableNativeMap() val statusCode: Int = ERROR_CODE_500 val message: String? = errorMessage val type: String = LIBRARY_REASON map.putString(STATUS_CODE, statusCode.toString()) map.putString(MESSAGE, message) map.putString(TYPE, type) return map } }