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

#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCP_JSIDCP_H_
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCP_JSIDCP_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);    \


#define SET_STRING_PROPERTY_BY_METHOD2(jObj, jsObj, propertyName, methodName, ...) \
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName,  __VA_ARGS__);  \
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);    \


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

namespace jsiConversion::dcp{
void jParsedResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
}

#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DCP_JSIDCP_H_
