/**
 * 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 NativeToponCxxSpecJSI : public TurboModule {
protected:
  NativeToponCxxSpecJSI(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 void init(jsi::Runtime &rt, jsi::String appId, jsi::String appKey) = 0;
  virtual jsi::Value getSDKVersionName(jsi::Runtime &rt) = 0;
  virtual jsi::Value isCnSDK(jsi::Runtime &rt) = 0;
  virtual void setExcludeMyOfferPkgList(jsi::Runtime &rt, jsi::Array packages) = 0;
  virtual void initCustomMap(jsi::Runtime &rt, jsi::String customMapJson) = 0;
  virtual void setPlacementCustomMap(jsi::Runtime &rt, jsi::String placementId, jsi::String customMapJson) = 0;
  virtual void setGDPRLevel(jsi::Runtime &rt, double level) = 0;
  virtual jsi::Value getGDPRLevel(jsi::Runtime &rt) = 0;
  virtual jsi::Value getUserLocation(jsi::Runtime &rt) = 0;
  virtual void showGDPRAuth(jsi::Runtime &rt) = 0;
  virtual void setLogDebug(jsi::Runtime &rt, bool isDebug) = 0;
  virtual void deniedUploadDeviceInfo(jsi::Runtime &rt, jsi::Array keys) = 0;
  virtual void rewardedLoadAd(jsi::Runtime &rt, jsi::String placementId, jsi::String settingsJson) = 0;
  virtual void rewardedShowAd(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual void rewardedShowAdInScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String scenario) = 0;
  virtual jsi::Value rewardedHasAdReady(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual jsi::Value rewardedCheckAdStatus(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual void interstitialLoadAd(jsi::Runtime &rt, jsi::String placementId, jsi::String settingsJson) = 0;
  virtual void interstitialShowAd(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual void interstitialShowAdInScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String scenario) = 0;
  virtual jsi::Value interstitialHasAdReady(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual jsi::Value interstitialCheckAdStatus(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual void bannerLoadAd(jsi::Runtime &rt, jsi::String placementId, jsi::String settingsJson) = 0;
  virtual void bannerShowAdInRectangle(jsi::Runtime &rt, jsi::String placementId, jsi::String rectJson) = 0;
  virtual void bannerShowAdInPosition(jsi::Runtime &rt, jsi::String placementId, jsi::String position) = 0;
  virtual void bannerShowAdInRectangleAndScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String rectJson, jsi::String scenario) = 0;
  virtual void bannerShowAdInPositionAndScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String position, jsi::String scenario) = 0;
  virtual void bannerHideAd(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual void bannerReShowAd(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual void bannerRemoveAd(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual jsi::Value bannerHasAdReady(jsi::Runtime &rt, jsi::String placementId) = 0;
  virtual jsi::Value bannerCheckAdStatus(jsi::Runtime &rt, jsi::String placementId) = 0;

};

template <typename T>
class JSI_EXPORT NativeToponCxxSpec : 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 = "Topon";

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


private:
  class Delegate : public NativeToponCxxSpecJSI {
  public:
    Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
      NativeToponCxxSpecJSI(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));
    }
    void init(jsi::Runtime &rt, jsi::String appId, jsi::String appKey) override {
      static_assert(
          bridging::getParameterCount(&T::init) == 3,
          "Expected init(...) to have 3 parameters");

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

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

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

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

      return bridging::callFromJs<void>(
          rt, &T::initCustomMap, jsInvoker_, instance_, std::move(customMapJson));
    }
    void setPlacementCustomMap(jsi::Runtime &rt, jsi::String placementId, jsi::String customMapJson) override {
      static_assert(
          bridging::getParameterCount(&T::setPlacementCustomMap) == 3,
          "Expected setPlacementCustomMap(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setPlacementCustomMap, jsInvoker_, instance_, std::move(placementId), std::move(customMapJson));
    }
    void setGDPRLevel(jsi::Runtime &rt, double level) override {
      static_assert(
          bridging::getParameterCount(&T::setGDPRLevel) == 2,
          "Expected setGDPRLevel(...) to have 2 parameters");

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

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

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

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

      return bridging::callFromJs<void>(
          rt, &T::setLogDebug, jsInvoker_, instance_, std::move(isDebug));
    }
    void deniedUploadDeviceInfo(jsi::Runtime &rt, jsi::Array keys) override {
      static_assert(
          bridging::getParameterCount(&T::deniedUploadDeviceInfo) == 2,
          "Expected deniedUploadDeviceInfo(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::deniedUploadDeviceInfo, jsInvoker_, instance_, std::move(keys));
    }
    void rewardedLoadAd(jsi::Runtime &rt, jsi::String placementId, jsi::String settingsJson) override {
      static_assert(
          bridging::getParameterCount(&T::rewardedLoadAd) == 3,
          "Expected rewardedLoadAd(...) to have 3 parameters");

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

      return bridging::callFromJs<void>(
          rt, &T::rewardedShowAd, jsInvoker_, instance_, std::move(placementId));
    }
    void rewardedShowAdInScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String scenario) override {
      static_assert(
          bridging::getParameterCount(&T::rewardedShowAdInScenario) == 3,
          "Expected rewardedShowAdInScenario(...) to have 3 parameters");

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

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

      return bridging::callFromJs<jsi::Value>(
          rt, &T::rewardedCheckAdStatus, jsInvoker_, instance_, std::move(placementId));
    }
    void interstitialLoadAd(jsi::Runtime &rt, jsi::String placementId, jsi::String settingsJson) override {
      static_assert(
          bridging::getParameterCount(&T::interstitialLoadAd) == 3,
          "Expected interstitialLoadAd(...) to have 3 parameters");

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

      return bridging::callFromJs<void>(
          rt, &T::interstitialShowAd, jsInvoker_, instance_, std::move(placementId));
    }
    void interstitialShowAdInScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String scenario) override {
      static_assert(
          bridging::getParameterCount(&T::interstitialShowAdInScenario) == 3,
          "Expected interstitialShowAdInScenario(...) to have 3 parameters");

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

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

      return bridging::callFromJs<jsi::Value>(
          rt, &T::interstitialCheckAdStatus, jsInvoker_, instance_, std::move(placementId));
    }
    void bannerLoadAd(jsi::Runtime &rt, jsi::String placementId, jsi::String settingsJson) override {
      static_assert(
          bridging::getParameterCount(&T::bannerLoadAd) == 3,
          "Expected bannerLoadAd(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::bannerLoadAd, jsInvoker_, instance_, std::move(placementId), std::move(settingsJson));
    }
    void bannerShowAdInRectangle(jsi::Runtime &rt, jsi::String placementId, jsi::String rectJson) override {
      static_assert(
          bridging::getParameterCount(&T::bannerShowAdInRectangle) == 3,
          "Expected bannerShowAdInRectangle(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::bannerShowAdInRectangle, jsInvoker_, instance_, std::move(placementId), std::move(rectJson));
    }
    void bannerShowAdInPosition(jsi::Runtime &rt, jsi::String placementId, jsi::String position) override {
      static_assert(
          bridging::getParameterCount(&T::bannerShowAdInPosition) == 3,
          "Expected bannerShowAdInPosition(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::bannerShowAdInPosition, jsInvoker_, instance_, std::move(placementId), std::move(position));
    }
    void bannerShowAdInRectangleAndScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String rectJson, jsi::String scenario) override {
      static_assert(
          bridging::getParameterCount(&T::bannerShowAdInRectangleAndScenario) == 4,
          "Expected bannerShowAdInRectangleAndScenario(...) to have 4 parameters");

      return bridging::callFromJs<void>(
          rt, &T::bannerShowAdInRectangleAndScenario, jsInvoker_, instance_, std::move(placementId), std::move(rectJson), std::move(scenario));
    }
    void bannerShowAdInPositionAndScenario(jsi::Runtime &rt, jsi::String placementId, jsi::String position, jsi::String scenario) override {
      static_assert(
          bridging::getParameterCount(&T::bannerShowAdInPositionAndScenario) == 4,
          "Expected bannerShowAdInPositionAndScenario(...) to have 4 parameters");

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

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

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

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

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

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

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

  Delegate delegate_;
};

} // namespace facebook::react
