/**
 * 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 {


template <typename T>
class JSI_EXPORT NativeBackgroundFetchCxxSpec : public TurboModule {
public:
  static constexpr std::string_view kModuleName = "RNBackgroundFetch";

protected:
  NativeBackgroundFetchCxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeBackgroundFetchCxxSpec::kModuleName}, jsInvoker) {
    methodMap_["configure"] = MethodMetadata {.argCount = 1, .invoker = __configure};
    methodMap_["start"] = MethodMetadata {.argCount = 0, .invoker = __start};
    methodMap_["stop"] = MethodMetadata {.argCount = 1, .invoker = __stop};
    methodMap_["finish"] = MethodMetadata {.argCount = 1, .invoker = __finish};
    methodMap_["status"] = MethodMetadata {.argCount = 0, .invoker = __status};
    methodMap_["scheduleTask"] = MethodMetadata {.argCount = 1, .invoker = __scheduleTask};
    methodMap_["addListener"] = MethodMetadata {.argCount = 1, .invoker = __addListener};
    methodMap_["removeListeners"] = MethodMetadata {.argCount = 1, .invoker = __removeListeners};
  }
  
private:
  static jsi::Value __configure(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::configure) == 2,
      "Expected configure(...) to have 2 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::configure,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt));
  }

  static jsi::Value __start(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
    static_assert(
      bridging::getParameterCount(&T::start) == 1,
      "Expected start(...) to have 1 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::start,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
  }

  static jsi::Value __stop(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::stop) == 2,
      "Expected stop(...) to have 2 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::stop,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 || args[0].isNull() || args[0].isUndefined() ? std::nullopt : std::make_optional(args[0].asString(rt)));
  }

  static jsi::Value __finish(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::finish) == 2,
      "Expected finish(...) to have 2 parameters");
    bridging::callFromJs<void>(rt, &T::finish,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt));return jsi::Value::undefined();
  }

  static jsi::Value __status(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
    static_assert(
      bridging::getParameterCount(&T::status) == 1,
      "Expected status(...) to have 1 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::status,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
  }

  static jsi::Value __scheduleTask(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::scheduleTask) == 2,
      "Expected scheduleTask(...) to have 2 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::scheduleTask,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt));
  }

  static jsi::Value __addListener(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::addListener) == 2,
      "Expected addListener(...) to have 2 parameters");
    bridging::callFromJs<void>(rt, &T::addListener,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt));return jsi::Value::undefined();
  }

  static jsi::Value __removeListeners(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::removeListeners) == 2,
      "Expected removeListeners(...) to have 2 parameters");
    bridging::callFromJs<void>(rt, &T::removeListeners,  static_cast<NativeBackgroundFetchCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber());return jsi::Value::undefined();
  }
};

} // namespace facebook::react
