// Generated by uniffi-bindgen-react-native
#include "react-native-fedimint-client.h"
#include <ReactCommon/CallInvokerHolder.h>
#include <fbjni/fbjni.h>
#include <jni.h>
#include <jsi/jsi.h>

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

// Installer coming from FedimintClientModule
extern "C" JNIEXPORT jboolean JNICALL
Java_com_fedimintclient_FedimintClientModule_nativeInstallRustCrate(
    JNIEnv *env, jclass type, jlong rtPtr, jobject callInvokerHolderJavaObj) {
  // Patch: Use fbjni keys to safely retrieve CallInvoker
  auto holder = jni::alias_ref<react::CallInvokerHolder::javaobject>{
      reinterpret_cast<react::CallInvokerHolder::javaobject>(
          callInvokerHolderJavaObj)};
  auto jsCallInvoker = holder->cthis()->getCallInvoker();

  auto runtime = reinterpret_cast<jsi::Runtime *>(rtPtr);
  return fedimintclient::installRustCrate(*runtime, jsCallInvoker);
}

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