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

#ifndef BUILDING_AVIATION_WITH_GENERATED_CMAKE_PROJECT
#error aviationOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
#endif

#include "aviationOnLoad.hpp"

#include <jni.h>
#include <fbjni/fbjni.h>
#include <NitroModules/HybridObjectRegistry.hpp>

#include "JHybridAdsControllerSpec.hpp"
#include "JFunc_void_AdBreakInfo.hpp"
#include "JFunc_void_AdInfo.hpp"
#include "JFunc_void_std__string.hpp"
#include "JFunc_void.hpp"
#include "JHybridAirPlayButtonSpec.hpp"
#include "views/JHybridAirPlayButtonStateUpdater.hpp"
#include "JHybridAudioSessionSpec.hpp"
#include "JFunc_void_bool_bool.hpp"
#include "JFunc_void_AudioRouteChangeEvent.hpp"
#include "JHybridAudioSessionFactorySpec.hpp"
#include "JHybridMediaItemSpec.hpp"
#include "JHybridMediaItemFactorySpec.hpp"
#include "JHybridPlaybackEngineSpec.hpp"
#include "JFunc_void_PlaybackState.hpp"
#include "JFunc_void_MediaPosition.hpp"
#include "JFunc_void_std__optional_std__shared_ptr_HybridMediaItemSpec___ItemSource.hpp"
#include "JFunc_void_RemoteCommandEvent.hpp"
#include "JFunc_void_std__string_std__string.hpp"
#include "JFunc_void_PlaybackMetricEvent.hpp"
#include "JFunc_void_AvailableTracks.hpp"
#include "JFunc_void_DomainEvent.hpp"
#include "JHybridPlaybackEngineFactorySpec.hpp"
#include "JHybridVideoViewSpec.hpp"
#include "views/JHybridVideoViewStateUpdater.hpp"
#include <NitroModules/DefaultConstructableObject.hpp>

namespace margelo::nitro::aviation {

int initialize(JavaVM* vm) {
  using namespace margelo::nitro;
  using namespace margelo::nitro::aviation;
  using namespace facebook;

  return facebook::jni::initialize(vm, [] {
    // Register native JNI methods
    margelo::nitro::aviation::JHybridAdsControllerSpec::registerNatives();
    margelo::nitro::aviation::JFunc_void_AdBreakInfo_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_AdInfo_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_std__string_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_cxx::registerNatives();
    margelo::nitro::aviation::JHybridAirPlayButtonSpec::registerNatives();
    margelo::nitro::aviation::views::JHybridAirPlayButtonStateUpdater::registerNatives();
    margelo::nitro::aviation::JHybridAudioSessionSpec::registerNatives();
    margelo::nitro::aviation::JFunc_void_bool_bool_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_AudioRouteChangeEvent_cxx::registerNatives();
    margelo::nitro::aviation::JHybridAudioSessionFactorySpec::registerNatives();
    margelo::nitro::aviation::JHybridMediaItemSpec::registerNatives();
    margelo::nitro::aviation::JHybridMediaItemFactorySpec::registerNatives();
    margelo::nitro::aviation::JHybridPlaybackEngineSpec::registerNatives();
    margelo::nitro::aviation::JFunc_void_PlaybackState_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_MediaPosition_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_std__optional_std__shared_ptr_HybridMediaItemSpec___ItemSource_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_RemoteCommandEvent_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_std__string_std__string_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_PlaybackMetricEvent_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_AvailableTracks_cxx::registerNatives();
    margelo::nitro::aviation::JFunc_void_DomainEvent_cxx::registerNatives();
    margelo::nitro::aviation::JHybridPlaybackEngineFactorySpec::registerNatives();
    margelo::nitro::aviation::JHybridVideoViewSpec::registerNatives();
    margelo::nitro::aviation::views::JHybridVideoViewStateUpdater::registerNatives();

    // Register Nitro Hybrid Objects
    HybridObjectRegistry::registerHybridObjectConstructor(
      "AudioSessionFactory",
      []() -> std::shared_ptr<HybridObject> {
        static DefaultConstructableObject<JHybridAudioSessionFactorySpec::javaobject> object("com/margelo/nitro/aviation/player/HybridAudioSessionFactory");
        auto instance = object.create();
        return instance->cthis()->shared();
      }
    );
    HybridObjectRegistry::registerHybridObjectConstructor(
      "MediaItemFactory",
      []() -> std::shared_ptr<HybridObject> {
        static DefaultConstructableObject<JHybridMediaItemFactorySpec::javaobject> object("com/margelo/nitro/aviation/player/HybridMediaItemFactory");
        auto instance = object.create();
        return instance->cthis()->shared();
      }
    );
    HybridObjectRegistry::registerHybridObjectConstructor(
      "PlaybackEngineFactory",
      []() -> std::shared_ptr<HybridObject> {
        static DefaultConstructableObject<JHybridPlaybackEngineFactorySpec::javaobject> object("com/margelo/nitro/aviation/bridge/HybridPlaybackEngineFactory");
        auto instance = object.create();
        return instance->cthis()->shared();
      }
    );
    HybridObjectRegistry::registerHybridObjectConstructor(
      "VideoView",
      []() -> std::shared_ptr<HybridObject> {
        static DefaultConstructableObject<JHybridVideoViewSpec::javaobject> object("com/margelo/nitro/aviation/HybridVideoView");
        auto instance = object.create();
        return instance->cthis()->shared();
      }
    );
    HybridObjectRegistry::registerHybridObjectConstructor(
      "AirPlayButton",
      []() -> std::shared_ptr<HybridObject> {
        static DefaultConstructableObject<JHybridAirPlayButtonSpec::javaobject> object("com/margelo/nitro/aviation/HybridAirPlayButton");
        auto instance = object.create();
        return instance->cthis()->shared();
      }
    );
  });
}

} // namespace margelo::nitro::aviation
