///
/// JHybridAcousticConnectRNSpec.cpp
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © 2025 Marc Rousavy @ Margelo
///

#include "JHybridAcousticConnectRNSpec.hpp"



#include <optional>
#include <string>
#include <variant>
#include "JVariant_String_Double_Boolean.hpp"
#include <unordered_map>

namespace margelo::nitro::acousticconnectrn {

  jni::local_ref<JHybridAcousticConnectRNSpec::jhybriddata> JHybridAcousticConnectRNSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
    return makeCxxInstance(jThis);
  }

  void JHybridAcousticConnectRNSpec::registerNatives() {
    registerHybrid({
      makeNativeMethod("initHybrid", JHybridAcousticConnectRNSpec::initHybrid),
    });
  }

  size_t JHybridAcousticConnectRNSpec::getExternalMemorySize() noexcept {
    static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
    return method(_javaPart);
  }

  // Properties
  

  // Methods
  bool JHybridAcousticConnectRNSpec::setBooleanConfigItemForKey(const std::string& key, bool value, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* key */, jboolean /* value */, jni::alias_ref<jni::JString> /* moduleName */)>("setBooleanConfigItemForKey");
    auto __result = method(_javaPart, jni::make_jstring(key), value, jni::make_jstring(moduleName));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::setStringItemForKey(const std::string& key, const std::string& value, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* key */, jni::alias_ref<jni::JString> /* value */, jni::alias_ref<jni::JString> /* moduleName */)>("setStringItemForKey");
    auto __result = method(_javaPart, jni::make_jstring(key), jni::make_jstring(value), jni::make_jstring(moduleName));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::setNumberItemForKey(const std::string& key, double value, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* key */, double /* value */, jni::alias_ref<jni::JString> /* moduleName */)>("setNumberItemForKey");
    auto __result = method(_javaPart, jni::make_jstring(key), value, jni::make_jstring(moduleName));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::setConfigItemForKey(const std::string& key, const std::variant<std::string, double, bool>& value, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* key */, jni::alias_ref<JVariant_String_Double_Boolean> /* value */, jni::alias_ref<jni::JString> /* moduleName */)>("setConfigItemForKey");
    auto __result = method(_javaPart, jni::make_jstring(key), JVariant_String_Double_Boolean::fromCpp(value), jni::make_jstring(moduleName));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::getBooleanConfigItemForKey(bool theDefault, const std::string& key, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jboolean /* theDefault */, jni::alias_ref<jni::JString> /* key */, jni::alias_ref<jni::JString> /* moduleName */)>("getBooleanConfigItemForKey");
    auto __result = method(_javaPart, theDefault, jni::make_jstring(key), jni::make_jstring(moduleName));
    return static_cast<bool>(__result);
  }
  std::optional<std::string> JHybridAcousticConnectRNSpec::getStringItemForKey(const std::string& theDefault, const std::string& key, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::alias_ref<jni::JString> /* theDefault */, jni::alias_ref<jni::JString> /* key */, jni::alias_ref<jni::JString> /* moduleName */)>("getStringItemForKey");
    auto __result = method(_javaPart, jni::make_jstring(theDefault), jni::make_jstring(key), jni::make_jstring(moduleName));
    return __result != nullptr ? std::make_optional(__result->toStdString()) : std::nullopt;
  }
  double JHybridAcousticConnectRNSpec::getNumberItemForKey(double theDefault, const std::string& key, const std::string& moduleName) {
    static const auto method = javaClassStatic()->getMethod<double(double /* theDefault */, jni::alias_ref<jni::JString> /* key */, jni::alias_ref<jni::JString> /* moduleName */)>("getNumberItemForKey");
    auto __result = method(_javaPart, theDefault, jni::make_jstring(key), jni::make_jstring(moduleName));
    return __result;
  }
  bool JHybridAcousticConnectRNSpec::logCustomEvent(const std::string& eventName, const std::unordered_map<std::string, std::variant<std::string, double, bool>>& values, double level) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* eventName */, jni::alias_ref<jni::JMap<jni::JString, JVariant_String_Double_Boolean>> /* values */, double /* level */)>("logCustomEvent");
    auto __result = method(_javaPart, jni::make_jstring(eventName), [&]() -> jni::local_ref<jni::JMap<jni::JString, JVariant_String_Double_Boolean>> {
      auto __map = jni::JHashMap<jni::JString, JVariant_String_Double_Boolean>::create(values.size());
      for (const auto& __entry : values) {
        __map->put(jni::make_jstring(__entry.first), JVariant_String_Double_Boolean::fromCpp(__entry.second));
      }
      return __map;
    }(), level);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logSignal(const std::unordered_map<std::string, std::variant<std::string, double, bool>>& values, double level) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JMap<jni::JString, JVariant_String_Double_Boolean>> /* values */, double /* level */)>("logSignal");
    auto __result = method(_javaPart, [&]() -> jni::local_ref<jni::JMap<jni::JString, JVariant_String_Double_Boolean>> {
      auto __map = jni::JHashMap<jni::JString, JVariant_String_Double_Boolean>::create(values.size());
      for (const auto& __entry : values) {
        __map->put(jni::make_jstring(__entry.first), JVariant_String_Double_Boolean::fromCpp(__entry.second));
      }
      return __map;
    }(), level);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logExceptionEvent(const std::string& message, const std::string& stackInfo, bool unhandled) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* message */, jni::alias_ref<jni::JString> /* stackInfo */, jboolean /* unhandled */)>("logExceptionEvent");
    auto __result = method(_javaPart, jni::make_jstring(message), jni::make_jstring(stackInfo), unhandled);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logLocation() {
    static const auto method = javaClassStatic()->getMethod<jboolean()>("logLocation");
    auto __result = method(_javaPart);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logLocationWithLatitudeLongitude(double latitude, double longitude, double level) {
    static const auto method = javaClassStatic()->getMethod<jboolean(double /* latitude */, double /* longitude */, double /* level */)>("logLocationWithLatitudeLongitude");
    auto __result = method(_javaPart, latitude, longitude, level);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logClickEvent(double target, const std::string& controlId) {
    static const auto method = javaClassStatic()->getMethod<jboolean(double /* target */, jni::alias_ref<jni::JString> /* controlId */)>("logClickEvent");
    auto __result = method(_javaPart, target, jni::make_jstring(controlId));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logTextChangeEvent(double target, const std::string& controlId, const std::optional<std::string>& text) {
    static const auto method = javaClassStatic()->getMethod<jboolean(double /* target */, jni::alias_ref<jni::JString> /* controlId */, jni::alias_ref<jni::JString> /* text */)>("logTextChangeEvent");
    auto __result = method(_javaPart, target, jni::make_jstring(controlId), text.has_value() ? jni::make_jstring(text.value()) : nullptr);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::setCurrentScreenName(const std::string& logicalPageName) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* logicalPageName */)>("setCurrentScreenName");
    auto __result = method(_javaPart, jni::make_jstring(logicalPageName));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logScreenViewContextLoad(const std::optional<std::string>& logicalPageName, const std::optional<std::string>& referrer) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* logicalPageName */, jni::alias_ref<jni::JString> /* referrer */)>("logScreenViewContextLoad");
    auto __result = method(_javaPart, logicalPageName.has_value() ? jni::make_jstring(logicalPageName.value()) : nullptr, referrer.has_value() ? jni::make_jstring(referrer.value()) : nullptr);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logScreenViewContextUnload(const std::optional<std::string>& logicalPageName, const std::optional<std::string>& referrer) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* logicalPageName */, jni::alias_ref<jni::JString> /* referrer */)>("logScreenViewContextUnload");
    auto __result = method(_javaPart, logicalPageName.has_value() ? jni::make_jstring(logicalPageName.value()) : nullptr, referrer.has_value() ? jni::make_jstring(referrer.value()) : nullptr);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logScreenLayout(const std::string& name, double delay) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* name */, double /* delay */)>("logScreenLayout");
    auto __result = method(_javaPart, jni::make_jstring(name), delay);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logDialogShowEvent(const std::string& dialogId, const std::string& dialogTitle, const std::string& dialogType) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* dialogId */, jni::alias_ref<jni::JString> /* dialogTitle */, jni::alias_ref<jni::JString> /* dialogType */)>("logDialogShowEvent");
    auto __result = method(_javaPart, jni::make_jstring(dialogId), jni::make_jstring(dialogTitle), jni::make_jstring(dialogType));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logDialogDismissEvent(const std::string& dialogId, const std::string& dismissReason) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* dialogId */, jni::alias_ref<jni::JString> /* dismissReason */)>("logDialogDismissEvent");
    auto __result = method(_javaPart, jni::make_jstring(dialogId), jni::make_jstring(dismissReason));
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logDialogButtonClickEvent(const std::string& dialogId, const std::string& buttonText, double buttonIndex) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* dialogId */, jni::alias_ref<jni::JString> /* buttonText */, double /* buttonIndex */)>("logDialogButtonClickEvent");
    auto __result = method(_javaPart, jni::make_jstring(dialogId), jni::make_jstring(buttonText), buttonIndex);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logDialogCustomEvent(const std::string& dialogId, const std::string& eventName, const std::unordered_map<std::string, std::variant<std::string, double, bool>>& values) {
    static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* dialogId */, jni::alias_ref<jni::JString> /* eventName */, jni::alias_ref<jni::JMap<jni::JString, JVariant_String_Double_Boolean>> /* values */)>("logDialogCustomEvent");
    auto __result = method(_javaPart, jni::make_jstring(dialogId), jni::make_jstring(eventName), [&]() -> jni::local_ref<jni::JMap<jni::JString, JVariant_String_Double_Boolean>> {
      auto __map = jni::JHashMap<jni::JString, JVariant_String_Double_Boolean>::create(values.size());
      for (const auto& __entry : values) {
        __map->put(jni::make_jstring(__entry.first), JVariant_String_Double_Boolean::fromCpp(__entry.second));
      }
      return __map;
    }());
    return static_cast<bool>(__result);
  }

} // namespace margelo::nitro::acousticconnectrn
