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

#include "JHybridWebSocketManagerSpec.hpp"

// Forward declaration of `HybridWebSocketSpec` to properly resolve imports.
namespace margelo::nitro::fastio { class HybridWebSocketSpec; }

#include <memory>
#include "HybridWebSocketSpec.hpp"
#include "JHybridWebSocketSpec.hpp"
#include <NitroModules/JNISharedPtr.hpp>
#include <string>
#include <vector>

namespace margelo::nitro::fastio {

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

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

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

  // Properties
  

  // Methods
  std::shared_ptr<margelo::nitro::fastio::HybridWebSocketSpec> JHybridWebSocketManagerSpec::create(const std::string& url, const std::vector<std::string>& protocols) {
    static const auto method = _javaPart->getClass()->getMethod<jni::local_ref<JHybridWebSocketSpec::javaobject>(jni::alias_ref<jni::JString> /* url */, jni::alias_ref<jni::JArrayClass<jni::JString>> /* protocols */)>("create");
    auto __result = method(_javaPart, jni::make_jstring(url), [&]() {
      size_t __size = protocols.size();
      jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
      for (size_t __i = 0; __i < __size; __i++) {
        const auto& __element = protocols[__i];
        __array->setElement(__i, *jni::make_jstring(__element));
      }
      return __array;
    }());
    return JNISharedPtr::make_shared_from_jni<JHybridWebSocketSpec>(jni::make_global(__result));
  }

} // namespace margelo::nitro::fastio
