/**
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GenerateModuleH.js
 */

#pragma once

#include <ReactCommon/TurboModule.h>
#include <react/bridging/Bridging.h>

namespace facebook::react {


  class JSI_EXPORT NativeOtaHotUpdateCxxSpecJSI : public TurboModule {
protected:
  NativeOtaHotUpdateCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);

public:
  virtual jsi::Value setupBundlePath(jsi::Runtime &rt, jsi::String path, jsi::String extension, std::optional<double> version, std::optional<double> maxVersions, std::optional<jsi::String> metadata) = 0;
  virtual jsi::Value setExactBundlePath(jsi::Runtime &rt, jsi::String path) = 0;
  virtual jsi::Value deleteBundle(jsi::Runtime &rt, double i) = 0;
  virtual void restart(jsi::Runtime &rt) = 0;
  virtual jsi::Value getCurrentVersion(jsi::Runtime &rt, double a) = 0;
  virtual jsi::Value getUpdateMetadata(jsi::Runtime &rt, double a) = 0;
  virtual jsi::Value setCurrentVersion(jsi::Runtime &rt, jsi::String version) = 0;
  virtual jsi::Value setUpdateMetadata(jsi::Runtime &rt, jsi::String metadata) = 0;
  virtual jsi::Value rollbackToPreviousBundle(jsi::Runtime &rt, double a) = 0;
  virtual jsi::Value getBundleList(jsi::Runtime &rt, double a) = 0;
  virtual jsi::Value deleteBundleById(jsi::Runtime &rt, jsi::String id) = 0;
  virtual jsi::Value clearAllBundles(jsi::Runtime &rt, double a) = 0;
  virtual jsi::Value writeFile(jsi::Runtime &rt, jsi::String path, jsi::String base64Content, jsi::String encoding) = 0;

};

template <typename T>
class JSI_EXPORT NativeOtaHotUpdateCxxSpec : public TurboModule {
public:
  jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
    return delegate_.get(rt, propName);
  }

  static constexpr std::string_view kModuleName = "OtaHotUpdate";

protected:
  NativeOtaHotUpdateCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
    : TurboModule(std::string{NativeOtaHotUpdateCxxSpec::kModuleName}, jsInvoker),
      delegate_(reinterpret_cast<T*>(this), jsInvoker) {}


private:
  class Delegate : public NativeOtaHotUpdateCxxSpecJSI {
  public:
    Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
      NativeOtaHotUpdateCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {

    }

    jsi::Value setupBundlePath(jsi::Runtime &rt, jsi::String path, jsi::String extension, std::optional<double> version, std::optional<double> maxVersions, std::optional<jsi::String> metadata) override {
      static_assert(
          bridging::getParameterCount(&T::setupBundlePath) == 6,
          "Expected setupBundlePath(...) to have 6 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::setupBundlePath, jsInvoker_, instance_, std::move(path), std::move(extension), std::move(version), std::move(maxVersions), std::move(metadata));
    }
    jsi::Value setExactBundlePath(jsi::Runtime &rt, jsi::String path) override {
      static_assert(
          bridging::getParameterCount(&T::setExactBundlePath) == 2,
          "Expected setExactBundlePath(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::setExactBundlePath, jsInvoker_, instance_, std::move(path));
    }
    jsi::Value deleteBundle(jsi::Runtime &rt, double i) override {
      static_assert(
          bridging::getParameterCount(&T::deleteBundle) == 2,
          "Expected deleteBundle(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::deleteBundle, jsInvoker_, instance_, std::move(i));
    }
    void restart(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::restart) == 1,
          "Expected restart(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::restart, jsInvoker_, instance_);
    }
    jsi::Value getCurrentVersion(jsi::Runtime &rt, double a) override {
      static_assert(
          bridging::getParameterCount(&T::getCurrentVersion) == 2,
          "Expected getCurrentVersion(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::getCurrentVersion, jsInvoker_, instance_, std::move(a));
    }
    jsi::Value getUpdateMetadata(jsi::Runtime &rt, double a) override {
      static_assert(
          bridging::getParameterCount(&T::getUpdateMetadata) == 2,
          "Expected getUpdateMetadata(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::getUpdateMetadata, jsInvoker_, instance_, std::move(a));
    }
    jsi::Value setCurrentVersion(jsi::Runtime &rt, jsi::String version) override {
      static_assert(
          bridging::getParameterCount(&T::setCurrentVersion) == 2,
          "Expected setCurrentVersion(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::setCurrentVersion, jsInvoker_, instance_, std::move(version));
    }
    jsi::Value setUpdateMetadata(jsi::Runtime &rt, jsi::String metadata) override {
      static_assert(
          bridging::getParameterCount(&T::setUpdateMetadata) == 2,
          "Expected setUpdateMetadata(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::setUpdateMetadata, jsInvoker_, instance_, std::move(metadata));
    }
    jsi::Value rollbackToPreviousBundle(jsi::Runtime &rt, double a) override {
      static_assert(
          bridging::getParameterCount(&T::rollbackToPreviousBundle) == 2,
          "Expected rollbackToPreviousBundle(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::rollbackToPreviousBundle, jsInvoker_, instance_, std::move(a));
    }
    jsi::Value getBundleList(jsi::Runtime &rt, double a) override {
      static_assert(
          bridging::getParameterCount(&T::getBundleList) == 2,
          "Expected getBundleList(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::getBundleList, jsInvoker_, instance_, std::move(a));
    }
    jsi::Value deleteBundleById(jsi::Runtime &rt, jsi::String id) override {
      static_assert(
          bridging::getParameterCount(&T::deleteBundleById) == 2,
          "Expected deleteBundleById(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::deleteBundleById, jsInvoker_, instance_, std::move(id));
    }
    jsi::Value clearAllBundles(jsi::Runtime &rt, double a) override {
      static_assert(
          bridging::getParameterCount(&T::clearAllBundles) == 2,
          "Expected clearAllBundles(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::clearAllBundles, jsInvoker_, instance_, std::move(a));
    }
    jsi::Value writeFile(jsi::Runtime &rt, jsi::String path, jsi::String base64Content, jsi::String encoding) override {
      static_assert(
          bridging::getParameterCount(&T::writeFile) == 4,
          "Expected writeFile(...) to have 4 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::writeFile, jsInvoker_, instance_, std::move(path), std::move(base64Content), std::move(encoding));
    }

  private:
    friend class NativeOtaHotUpdateCxxSpec;
    T *instance_;
  };

  Delegate delegate_;
};

} // namespace facebook::react
