//
// Created by Allen on 24/08/28.
//

#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_

#include "jni.h"
#include "jsi/jsi.h"
#include "JsiCore.h"

#define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName);            \
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName));                     \
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName);    \

using namespace std;
using namespace facebook::jsi;

namespace jsiConversion::ddn {
void jDetectedQuadResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
void jDeskewedImageResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
void jEnhancedImageResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
}

#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
