//
//  MakeJSIRuntime.h
//  VisionCamera
//
//  Created by Marc Rousavy on 06.07.21.
//  Copyright © 2021 mrousavy. All rights reserved.
//

#pragma once

#include <jsi/jsi.h>
#include <memory>

#if __has_include(<reacthermes/HermesExecutorFactory.h>)
  // Hermes (https://hermesengine.dev) (RN 0.65+)
  #include <reacthermes/HermesExecutorFactory.h>
#elif __has_include(<hermes/hermes.h>)
  // Hermes (https://hermesengine.dev)
  #include <hermes/hermes.h>
#elif __has_include(<v8runtime/V8RuntimeFactory.h>)
  // V8 (https://github.com/Kudo/react-native-v8)
  #include <v8runtime/V8RuntimeFactory.h>
#else
  // JSC
  #include <jsi/JSCRuntime.h>
#endif

using namespace facebook;

namespace vision {

static std::unique_ptr<jsi::Runtime> makeJSIRuntime() {
#if __has_include(<hermes/hermes.h>) || __has_include(<reacthermes/HermesExecutorFactory.h>)
  return facebook::hermes::makeHermesRuntime();
#elif __has_include(<v8runtime/V8RuntimeFactory.h>)
  return facebook::createV8Runtime("");
#else
  return facebook::jsc::makeJSCRuntime();
#endif
}

} // namespace vision