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

#include "JHybridAcousticConnectRNSpec.hpp"



#include <NitroModules/Null.hpp>
#include <string>
#include <variant>
#include <optional>
#include "JVariant_NullType_String.hpp"
#include <NitroModules/JNull.hpp>
#include "JVariant_Boolean_String_Double.hpp"
#include <unordered_map>

namespace margelo::nitro::acousticconnectrn {

  std::shared_ptr<JHybridAcousticConnectRNSpec> JHybridAcousticConnectRNSpec::JavaPart::getJHybridAcousticConnectRNSpec() {
    auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
    auto castHybridObject = std::dynamic_pointer_cast<JHybridAcousticConnectRNSpec>(hybridObject);
    if (castHybridObject == nullptr) [[unlikely]] {
      throw std::runtime_error("Failed to downcast JHybridObject to JHybridAcousticConnectRNSpec!");
    }
    return castHybridObject;
  }

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

  std::shared_ptr<JHybridObject> JHybridAcousticConnectRNSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
    auto castJavaPart = jni::dynamic_ref_cast<JHybridAcousticConnectRNSpec::JavaPart>(javaPart);
    if (castJavaPart == nullptr) [[unlikely]] {
      throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridAcousticConnectRNSpec::JavaPart!");
    }
    return std::make_shared<JHybridAcousticConnectRNSpec>(castJavaPart);
  }

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

  // Properties
  

  // Methods
  bool JHybridAcousticConnectRNSpec::enable() {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("enable");
    auto __result = method(_javaPart);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::disable() {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("disable");
    auto __result = method(_javaPart);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::setBooleanConfigItemForKey(const std::string& key, bool value, const std::string& moduleName) {
    static const auto method = _javaPart->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 = _javaPart->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 = _javaPart->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<bool, std::string, double>& value, const std::string& moduleName) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* key */, jni::alias_ref<JVariant_Boolean_String_Double> /* value */, jni::alias_ref<jni::JString> /* moduleName */)>("setConfigItemForKey");
    auto __result = method(_javaPart, jni::make_jstring(key), JVariant_Boolean_String_Double::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 = _javaPart->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::variant<nitro::NullType, std::string>> JHybridAcousticConnectRNSpec::getStringItemForKey(const std::string& theDefault, const std::string& key, const std::string& moduleName) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JVariant_NullType_String>(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->toCpp()) : std::nullopt;
  }
  double JHybridAcousticConnectRNSpec::getNumberItemForKey(double theDefault, const std::string& key, const std::string& moduleName) {
    static const auto method = _javaPart->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<bool, std::string, double>>& values, double level) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* eventName */, jni::alias_ref<jni::JMap<jni::JString, JVariant_Boolean_String_Double>> /* values */, double /* level */)>("logCustomEvent");
    auto __result = method(_javaPart, jni::make_jstring(eventName), [&]() -> jni::local_ref<jni::JMap<jni::JString, JVariant_Boolean_String_Double>> {
      auto __map = jni::JHashMap<jni::JString, JVariant_Boolean_String_Double>::create(values.size());
      for (const auto& __entry : values) {
        __map->put(jni::make_jstring(__entry.first), JVariant_Boolean_String_Double::fromCpp(__entry.second));
      }
      return __map;
    }(), level);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logSignal(const std::unordered_map<std::string, std::variant<bool, std::string, double>>& values, double level) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JMap<jni::JString, JVariant_Boolean_String_Double>> /* values */, double /* level */)>("logSignal");
    auto __result = method(_javaPart, [&]() -> jni::local_ref<jni::JMap<jni::JString, JVariant_Boolean_String_Double>> {
      auto __map = jni::JHashMap<jni::JString, JVariant_Boolean_String_Double>::create(values.size());
      for (const auto& __entry : values) {
        __map->put(jni::make_jstring(__entry.first), JVariant_Boolean_String_Double::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 = _javaPart->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 = _javaPart->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 = _javaPart->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 = _javaPart->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::variant<nitro::NullType, std::string>>& text) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(double /* target */, jni::alias_ref<jni::JString> /* controlId */, jni::alias_ref<JVariant_NullType_String> /* text */)>("logTextChangeEvent");
    auto __result = method(_javaPart, target, jni::make_jstring(controlId), text.has_value() ? JVariant_NullType_String::fromCpp(text.value()) : nullptr);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::setCurrentScreenName(const std::string& logicalPageName) {
    static const auto method = _javaPart->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::variant<nitro::NullType, std::string>>& logicalPageName, const std::optional<std::variant<nitro::NullType, std::string>>& referrer) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<JVariant_NullType_String> /* logicalPageName */, jni::alias_ref<JVariant_NullType_String> /* referrer */)>("logScreenViewContextLoad");
    auto __result = method(_javaPart, logicalPageName.has_value() ? JVariant_NullType_String::fromCpp(logicalPageName.value()) : nullptr, referrer.has_value() ? JVariant_NullType_String::fromCpp(referrer.value()) : nullptr);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logScreenViewContextUnload(const std::optional<std::variant<nitro::NullType, std::string>>& logicalPageName, const std::optional<std::variant<nitro::NullType, std::string>>& referrer) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<JVariant_NullType_String> /* logicalPageName */, jni::alias_ref<JVariant_NullType_String> /* referrer */)>("logScreenViewContextUnload");
    auto __result = method(_javaPart, logicalPageName.has_value() ? JVariant_NullType_String::fromCpp(logicalPageName.value()) : nullptr, referrer.has_value() ? JVariant_NullType_String::fromCpp(referrer.value()) : nullptr);
    return static_cast<bool>(__result);
  }
  bool JHybridAcousticConnectRNSpec::logScreenLayout(const std::string& name, double delay) {
    static const auto method = _javaPart->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 = _javaPart->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 = _javaPart->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 = _javaPart->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<bool, std::string, double>>& values) {
    static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* dialogId */, jni::alias_ref<jni::JString> /* eventName */, jni::alias_ref<jni::JMap<jni::JString, JVariant_Boolean_String_Double>> /* values */)>("logDialogCustomEvent");
    auto __result = method(_javaPart, jni::make_jstring(dialogId), jni::make_jstring(eventName), [&]() -> jni::local_ref<jni::JMap<jni::JString, JVariant_Boolean_String_Double>> {
      auto __map = jni::JHashMap<jni::JString, JVariant_Boolean_String_Double>::create(values.size());
      for (const auto& __entry : values) {
        __map->put(jni::make_jstring(__entry.first), JVariant_Boolean_String_Double::fromCpp(__entry.second));
      }
      return __map;
    }());
    return static_cast<bool>(__result);
  }

} // namespace margelo::nitro::acousticconnectrn
