// Generated by uniffi-bindgen-react-native
#include <jni.h>
#include <jsi/jsi.h>
#include <ReactCommon/CallInvokerHolder.h>
#include "secondts-bark-react-native.h"

namespace jsi = facebook::jsi;
namespace react = facebook::react;

// Automated testing checks Java_com_barkreactnative_BarkReactNativeModule and secondts_barkreactnative
// by comparing the whole line here.
/*
Java_com_barkreactnative_BarkReactNativeModule_nativeMultiply(JNIEnv *env, jclass type, jdouble a, jdouble b) {
    return secondts_barkreactnative::multiply(a, b);
}
*/

// Installer coming from BarkReactNativeModule
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_barkreactnative_BarkReactNativeModule_nativeInstallRustCrate(
    JNIEnv *env,
    jclass type,
    jlong rtPtr,
    jobject callInvokerHolderJavaObj
) {
    using JCallInvokerHolder = facebook::react::CallInvokerHolder;

    auto holderLocal = facebook::jni::make_local(callInvokerHolderJavaObj);
    auto holderRef = facebook::jni::static_ref_cast<JCallInvokerHolder::javaobject>(holderLocal);
    auto* holderCxx = holderRef->cthis();
    auto jsCallInvoker = holderCxx->getCallInvoker();
    auto runtime = reinterpret_cast<jsi::Runtime *>(rtPtr);

    return secondts_barkreactnative::installRustCrate(*runtime, jsCallInvoker);
}

extern "C"
JNIEXPORT jboolean JNICALL
Java_com_barkreactnative_BarkReactNativeModule_nativeCleanupRustCrate(JNIEnv *env, jclass type, jlong rtPtr) {
    auto runtime = reinterpret_cast<jsi::Runtime *>(rtPtr);
    return secondts_barkreactnative::cleanupRustCrate(*runtime);
}