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

#include "JHybridMediaItemFactorySpec.hpp"

// Forward declaration of `HybridMediaItemSpec` to properly resolve imports.
namespace margelo::nitro::aviation { class HybridMediaItemSpec; }
// Forward declaration of `MediaItemConfig` to properly resolve imports.
namespace margelo::nitro::aviation { struct MediaItemConfig; }
// Forward declaration of `MediaType` to properly resolve imports.
namespace margelo::nitro::aviation { enum class MediaType; }
// Forward declaration of `DrmType` to properly resolve imports.
namespace margelo::nitro::aviation { enum class DrmType; }

#include <memory>
#include "HybridMediaItemSpec.hpp"
#include "JHybridMediaItemSpec.hpp"
#include "MediaItemConfig.hpp"
#include "JMediaItemConfig.hpp"
#include <string>
#include "MediaType.hpp"
#include "JMediaType.hpp"
#include <optional>
#include <unordered_map>
#include "DrmType.hpp"
#include "JDrmType.hpp"

namespace margelo::nitro::aviation {

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

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

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

  bool JHybridMediaItemFactorySpec::equals(const std::shared_ptr<HybridObject>& other) {
    if (auto otherCast = std::dynamic_pointer_cast<JHybridMediaItemFactorySpec>(other)) {
      return _javaPart == otherCast->_javaPart;
    }
    return false;
  }

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

  std::string JHybridMediaItemFactorySpec::toString() {
    static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
    auto javaString = method(_javaPart);
    return javaString->toStdString();
  }

  // Properties
  

  // Methods
  std::shared_ptr<HybridMediaItemSpec> JHybridMediaItemFactorySpec::create(const MediaItemConfig& config) {
    static const auto method = javaClassStatic()->getMethod<jni::local_ref<JHybridMediaItemSpec::javaobject>(jni::alias_ref<JMediaItemConfig> /* config */)>("create");
    auto __result = method(_javaPart, JMediaItemConfig::fromCpp(config));
    return __result->cthis()->shared_cast<JHybridMediaItemSpec>();
  }
  std::shared_ptr<HybridMediaItemSpec> JHybridMediaItemFactorySpec::fromUri(const std::string& uri) {
    static const auto method = javaClassStatic()->getMethod<jni::local_ref<JHybridMediaItemSpec::javaobject>(jni::alias_ref<jni::JString> /* uri */)>("fromUri");
    auto __result = method(_javaPart, jni::make_jstring(uri));
    return __result->cthis()->shared_cast<JHybridMediaItemSpec>();
  }

} // namespace margelo::nitro::aviation
