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

#import <Foundation/Foundation.h>
#import <NitroModules/HybridObjectRegistry.hpp>
#import "MLXReactNative-Swift-Cxx-Umbrella.hpp"
#import <type_traits>

#include "HybridLLMSpecSwift.hpp"
#include "HybridModelManagerSpecSwift.hpp"
#include "HybridTTSSpecSwift.hpp"
#include "HybridSTTSpecSwift.hpp"
#include "HybridEmbeddingsSpecSwift.hpp"

@interface MLXReactNativeAutolinking : NSObject
@end

@implementation MLXReactNativeAutolinking

+ (void) load {
  using namespace margelo::nitro;
  using namespace margelo::nitro::mlxreactnative;

  HybridObjectRegistry::registerHybridObjectConstructor(
    "LLM",
    []() -> std::shared_ptr<HybridObject> {
      std::shared_ptr<HybridLLMSpec> hybridObject = MLXReactNative::MLXReactNativeAutolinking::createLLM();
      return hybridObject;
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "ModelManager",
    []() -> std::shared_ptr<HybridObject> {
      std::shared_ptr<HybridModelManagerSpec> hybridObject = MLXReactNative::MLXReactNativeAutolinking::createModelManager();
      return hybridObject;
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "TTS",
    []() -> std::shared_ptr<HybridObject> {
      std::shared_ptr<HybridTTSSpec> hybridObject = MLXReactNative::MLXReactNativeAutolinking::createTTS();
      return hybridObject;
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "STT",
    []() -> std::shared_ptr<HybridObject> {
      std::shared_ptr<HybridSTTSpec> hybridObject = MLXReactNative::MLXReactNativeAutolinking::createSTT();
      return hybridObject;
    }
  );
  HybridObjectRegistry::registerHybridObjectConstructor(
    "Embeddings",
    []() -> std::shared_ptr<HybridObject> {
      std::shared_ptr<HybridEmbeddingsSpec> hybridObject = MLXReactNative::MLXReactNativeAutolinking::createEmbeddings();
      return hybridObject;
    }
  );
}

@end
