/**
 * 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 NativeReactNativeCustomergluCxxSpecJSI : public TurboModule {
protected:
  NativeReactNativeCustomergluCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);

public:
  virtual void addListener(jsi::Runtime &rt, jsi::String eventType) = 0;
  virtual void removeListeners(jsi::Runtime &rt, double count) = 0;
  virtual jsi::Value registerDevice(jsi::Runtime &rt, jsi::Object data) = 0;
  virtual void UpdateUserAttributes(jsi::Runtime &rt, jsi::Object userdata) = 0;
  virtual void dataClear(jsi::Runtime &rt) = 0;
  virtual void sendData(jsi::Runtime &rt, jsi::Object obj) = 0;
  virtual void openWallet(jsi::Runtime &rt, std::optional<jsi::Object> obj) = 0;
  virtual void initCGSDK(jsi::Runtime &rt, jsi::String obj) = 0;
  virtual void loadCampaignById(jsi::Runtime &rt, jsi::String campid, std::optional<jsi::Object> obj) = 0;
  virtual void loadCampaignWithUrl(jsi::Runtime &rt, jsi::String url, jsi::Object obj) = 0;
  virtual void enableAnalytic(jsi::Runtime &rt, bool b) = 0;
  virtual void allowAnonymousRegistration(jsi::Runtime &rt, bool b) = 0;
  virtual void gluSDKDebuggingMode(jsi::Runtime &rt, bool b) = 0;
  virtual void enableEntryPoints(jsi::Runtime &rt, bool b) = 0;
  virtual void setAdPopupFont(jsi::Runtime &rt, jsi::String value) = 0;
  virtual void UpdateProfile(jsi::Runtime &rt, jsi::Object obj) = 0;
  virtual void startSSEOnForeground(jsi::Runtime &rt) = 0;
  virtual void disconnectSSEOnBackground(jsi::Runtime &rt) = 0;
  virtual void setSSETimeout(jsi::Runtime &rt, double time) = 0;
  virtual void DisplayCustomerGluNotification(jsi::Runtime &rt) = 0;
  virtual void DisplayCGNotification(jsi::Runtime &rt, jsi::Object obj, std::optional<bool> autoclosewebview) = 0;
  virtual void DisplayCGBackgroundNotification(jsi::Runtime &rt, jsi::Object obj, std::optional<bool> autoclosewebview) = 0;
  virtual jsi::Value SetCurrentClassName(jsi::Runtime &rt, jsi::String clname) = 0;
  virtual jsi::Value getBannerHeight(jsi::Runtime &rt) = 0;
  virtual void addMarginsForPIP(jsi::Runtime &rt, double horizontal, double vertical, jsi::String type) = 0;
  virtual void addDelayForPIP(jsi::Runtime &rt, double delay) = 0;
  virtual void setOpenWalletAsFallback(jsi::Runtime &rt, bool value) = 0;
  virtual jsi::Value isCampaignValid(jsi::Runtime &rt, jsi::String campaignId, jsi::String dataFlag) = 0;
  virtual jsi::Value getCampaignStatus(jsi::Runtime &rt, jsi::String campaignId, jsi::String dataFlag) = 0;

};

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

  std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime& runtime) override {
    return delegate_.getPropertyNames(runtime);
  }

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

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


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

    }

    void addListener(jsi::Runtime &rt, jsi::String eventType) override {
      static_assert(
          bridging::getParameterCount(&T::addListener) == 2,
          "Expected addListener(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::addListener, jsInvoker_, instance_, std::move(eventType));
    }
    void removeListeners(jsi::Runtime &rt, double count) override {
      static_assert(
          bridging::getParameterCount(&T::removeListeners) == 2,
          "Expected removeListeners(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::removeListeners, jsInvoker_, instance_, std::move(count));
    }
    jsi::Value registerDevice(jsi::Runtime &rt, jsi::Object data) override {
      static_assert(
          bridging::getParameterCount(&T::registerDevice) == 2,
          "Expected registerDevice(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::registerDevice, jsInvoker_, instance_, std::move(data));
    }
    void UpdateUserAttributes(jsi::Runtime &rt, jsi::Object userdata) override {
      static_assert(
          bridging::getParameterCount(&T::UpdateUserAttributes) == 2,
          "Expected UpdateUserAttributes(...) to have 2 parameters");

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

      return bridging::callFromJs<void>(
          rt, &T::dataClear, jsInvoker_, instance_);
    }
    void sendData(jsi::Runtime &rt, jsi::Object obj) override {
      static_assert(
          bridging::getParameterCount(&T::sendData) == 2,
          "Expected sendData(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::sendData, jsInvoker_, instance_, std::move(obj));
    }
    void openWallet(jsi::Runtime &rt, std::optional<jsi::Object> obj) override {
      static_assert(
          bridging::getParameterCount(&T::openWallet) == 2,
          "Expected openWallet(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::openWallet, jsInvoker_, instance_, std::move(obj));
    }
    void initCGSDK(jsi::Runtime &rt, jsi::String obj) override {
      static_assert(
          bridging::getParameterCount(&T::initCGSDK) == 2,
          "Expected initCGSDK(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::initCGSDK, jsInvoker_, instance_, std::move(obj));
    }
    void loadCampaignById(jsi::Runtime &rt, jsi::String campid, std::optional<jsi::Object> obj) override {
      static_assert(
          bridging::getParameterCount(&T::loadCampaignById) == 3,
          "Expected loadCampaignById(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::loadCampaignById, jsInvoker_, instance_, std::move(campid), std::move(obj));
    }
    void loadCampaignWithUrl(jsi::Runtime &rt, jsi::String url, jsi::Object obj) override {
      static_assert(
          bridging::getParameterCount(&T::loadCampaignWithUrl) == 3,
          "Expected loadCampaignWithUrl(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::loadCampaignWithUrl, jsInvoker_, instance_, std::move(url), std::move(obj));
    }
    void enableAnalytic(jsi::Runtime &rt, bool b) override {
      static_assert(
          bridging::getParameterCount(&T::enableAnalytic) == 2,
          "Expected enableAnalytic(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::enableAnalytic, jsInvoker_, instance_, std::move(b));
    }
    void allowAnonymousRegistration(jsi::Runtime &rt, bool b) override {
      static_assert(
          bridging::getParameterCount(&T::allowAnonymousRegistration) == 2,
          "Expected allowAnonymousRegistration(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::allowAnonymousRegistration, jsInvoker_, instance_, std::move(b));
    }
    void gluSDKDebuggingMode(jsi::Runtime &rt, bool b) override {
      static_assert(
          bridging::getParameterCount(&T::gluSDKDebuggingMode) == 2,
          "Expected gluSDKDebuggingMode(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::gluSDKDebuggingMode, jsInvoker_, instance_, std::move(b));
    }
    void enableEntryPoints(jsi::Runtime &rt, bool b) override {
      static_assert(
          bridging::getParameterCount(&T::enableEntryPoints) == 2,
          "Expected enableEntryPoints(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::enableEntryPoints, jsInvoker_, instance_, std::move(b));
    }
    void setAdPopupFont(jsi::Runtime &rt, jsi::String value) override {
      static_assert(
          bridging::getParameterCount(&T::setAdPopupFont) == 2,
          "Expected setAdPopupFont(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setAdPopupFont, jsInvoker_, instance_, std::move(value));
    }
    void UpdateProfile(jsi::Runtime &rt, jsi::Object obj) override {
      static_assert(
          bridging::getParameterCount(&T::UpdateProfile) == 2,
          "Expected UpdateProfile(...) to have 2 parameters");

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

      return bridging::callFromJs<void>(
          rt, &T::startSSEOnForeground, jsInvoker_, instance_);
    }
    void disconnectSSEOnBackground(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::disconnectSSEOnBackground) == 1,
          "Expected disconnectSSEOnBackground(...) to have 1 parameters");

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

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

      return bridging::callFromJs<void>(
          rt, &T::DisplayCustomerGluNotification, jsInvoker_, instance_);
    }
    void DisplayCGNotification(jsi::Runtime &rt, jsi::Object obj, std::optional<bool> autoclosewebview) override {
      static_assert(
          bridging::getParameterCount(&T::DisplayCGNotification) == 3,
          "Expected DisplayCGNotification(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::DisplayCGNotification, jsInvoker_, instance_, std::move(obj), std::move(autoclosewebview));
    }
    void DisplayCGBackgroundNotification(jsi::Runtime &rt, jsi::Object obj, std::optional<bool> autoclosewebview) override {
      static_assert(
          bridging::getParameterCount(&T::DisplayCGBackgroundNotification) == 3,
          "Expected DisplayCGBackgroundNotification(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::DisplayCGBackgroundNotification, jsInvoker_, instance_, std::move(obj), std::move(autoclosewebview));
    }
    jsi::Value SetCurrentClassName(jsi::Runtime &rt, jsi::String clname) override {
      static_assert(
          bridging::getParameterCount(&T::SetCurrentClassName) == 2,
          "Expected SetCurrentClassName(...) to have 2 parameters");

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

      return bridging::callFromJs<jsi::Value>(
          rt, &T::getBannerHeight, jsInvoker_, instance_);
    }
    void addMarginsForPIP(jsi::Runtime &rt, double horizontal, double vertical, jsi::String type) override {
      static_assert(
          bridging::getParameterCount(&T::addMarginsForPIP) == 4,
          "Expected addMarginsForPIP(...) to have 4 parameters");

      return bridging::callFromJs<void>(
          rt, &T::addMarginsForPIP, jsInvoker_, instance_, std::move(horizontal), std::move(vertical), std::move(type));
    }
    void addDelayForPIP(jsi::Runtime &rt, double delay) override {
      static_assert(
          bridging::getParameterCount(&T::addDelayForPIP) == 2,
          "Expected addDelayForPIP(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::addDelayForPIP, jsInvoker_, instance_, std::move(delay));
    }
    void setOpenWalletAsFallback(jsi::Runtime &rt, bool value) override {
      static_assert(
          bridging::getParameterCount(&T::setOpenWalletAsFallback) == 2,
          "Expected setOpenWalletAsFallback(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setOpenWalletAsFallback, jsInvoker_, instance_, std::move(value));
    }
    jsi::Value isCampaignValid(jsi::Runtime &rt, jsi::String campaignId, jsi::String dataFlag) override {
      static_assert(
          bridging::getParameterCount(&T::isCampaignValid) == 3,
          "Expected isCampaignValid(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::isCampaignValid, jsInvoker_, instance_, std::move(campaignId), std::move(dataFlag));
    }
    jsi::Value getCampaignStatus(jsi::Runtime &rt, jsi::String campaignId, jsi::String dataFlag) override {
      static_assert(
          bridging::getParameterCount(&T::getCampaignStatus) == 3,
          "Expected getCampaignStatus(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::getCampaignStatus, jsInvoker_, instance_, std::move(campaignId), std::move(dataFlag));
    }

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

  Delegate delegate_;
};

} // namespace facebook::react
