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

#include "JHybridNitroKeyEventSpec.hpp"

// Forward declaration of `KeyEventData` to properly resolve imports.
namespace margelo::nitro::keyevent { struct KeyEventData; }

#include "KeyEventData.hpp"
#include <functional>
#include "JFunc_void_KeyEventData.hpp"
#include "JKeyEventData.hpp"
#include <string>
#include <optional>

namespace margelo::nitro::keyevent {

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

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

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

  void JHybridNitroKeyEventSpec::dispose() noexcept {
    static const auto method = javaClassStatic()->getMethod<void()>("dispose");
    method(_javaPart);
  }

  // Properties
  

  // Methods
  void JHybridNitroKeyEventSpec::onKeyDownListener(const std::function<void(const KeyEventData& /* keyEvent */)>& callback) {
    static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_KeyEventData::javaobject> /* callback */)>("onKeyDownListener_cxx");
    method(_javaPart, JFunc_void_KeyEventData_cxx::fromCpp(callback));
  }
  void JHybridNitroKeyEventSpec::onKeyUpListener(const std::function<void(const KeyEventData& /* keyEvent */)>& callback) {
    static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_KeyEventData::javaobject> /* callback */)>("onKeyUpListener_cxx");
    method(_javaPart, JFunc_void_KeyEventData_cxx::fromCpp(callback));
  }

} // namespace margelo::nitro::keyevent
