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

public:
  virtual jsi::Array getSubscriptionIds(jsi::Runtime &rt) = 0;
  virtual double getSubscriptionId(jsi::Runtime &rt, double simSlotIndex) = 0;
  virtual double getActiveDataSubscriptionId(jsi::Runtime &rt) = 0;
  virtual jsi::Object getActiveSubscriptionInfo(jsi::Runtime &rt, double subscriberId) = 0;
  virtual double getActiveSubscriptionInfoCount(jsi::Runtime &rt) = 0;
  virtual jsi::Object getActiveSubscriptionInfoForSimSlotIndex(jsi::Runtime &rt, double simSlotIndex) = 0;
  virtual jsi::Array getActiveSubscriptionInfoList(jsi::Runtime &rt) = 0;
  virtual jsi::Array getAllSubscriptionInfoList(jsi::Runtime &rt) = 0;
  virtual jsi::Array getCompleteActiveSubscriptionInfoList(jsi::Runtime &rt) = 0;
  virtual double getDefaultDataSubscriptionId(jsi::Runtime &rt) = 0;
  virtual double getDefaultSmsSubscriptionId(jsi::Runtime &rt) = 0;
  virtual double getDefaultSubscriptionId(jsi::Runtime &rt) = 0;
  virtual double getSlotIndex(jsi::Runtime &rt, double subscriberId) = 0;
  virtual double getNoOfSIMSlotAvailable(jsi::Runtime &rt) = 0;
  virtual double getSignalStrength(jsi::Runtime &rt, double subscriberId) = 0;
  virtual jsi::String getPhoneNumber(jsi::Runtime &rt, double subscriberId) = 0;
  virtual jsi::Array getAllPhoneNumbers(jsi::Runtime &rt) = 0;
  virtual double getSubscriberIdForPhoneNumber(jsi::Runtime &rt, jsi::String phoneNumber) = 0;
  virtual bool isActiveSubscriptionId(jsi::Runtime &rt, double subscriberId) = 0;
  virtual bool isNetworkRoaming(jsi::Runtime &rt, double subscriberId) = 0;
  virtual bool isAirplaneMode(jsi::Runtime &rt) = 0;
  virtual bool isESIM(jsi::Runtime &rt, double subscriberId) = 0;
  virtual bool isMobileDataEnabled(jsi::Runtime &rt, double subscriberId) = 0;
  virtual void addOnAirplaneChangeListener(jsi::Runtime &rt) = 0;
  virtual void addOnSimCardStateChangeListener(jsi::Runtime &rt) = 0;
  virtual void removeOnAirplaneChangeListener(jsi::Runtime &rt) = 0;
  virtual void removeOnSimCardStateChangeListener(jsi::Runtime &rt) = 0;

};

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

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

  template <typename OnAirplaneModeChangeType> void emitOnAirplaneModeChange(OnAirplaneModeChangeType value) {
    static_assert(bridging::supportsFromJs<OnAirplaneModeChangeType, bool>, "value cannnot be converted to bool");
    static_cast<AsyncEventEmitter<jsi::Value>&>(*delegate_.eventEmitterMap_["onAirplaneModeChange"]).emit([jsInvoker = jsInvoker_, eventValue = value](jsi::Runtime& rt) -> jsi::Value {
      return bridging::toJs(rt, eventValue, jsInvoker);
    });
  }

  template <typename OnSIMCardStateChangeType> void emitOnSIMCardStateChange(std::vector<OnSIMCardStateChangeType> value) {
    static_assert(bridging::supportsFromJs<std::vector<OnSIMCardStateChangeType>, jsi::Array>, "value cannnot be converted to jsi::Array");
    static_cast<AsyncEventEmitter<jsi::Value>&>(*delegate_.eventEmitterMap_["onSIMCardStateChange"]).emit([jsInvoker = jsInvoker_, eventValue = value](jsi::Runtime& rt) -> jsi::Value {
      return bridging::toJs(rt, eventValue, jsInvoker);
    });
  }

private:
  class Delegate : public NativeSimcardInfoCxxSpecJSI {
  public:
    Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
      NativeSimcardInfoCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {
      eventEmitterMap_["onAirplaneModeChange"] = std::make_shared<AsyncEventEmitter<jsi::Value>>();
      eventEmitterMap_["onSIMCardStateChange"] = std::make_shared<AsyncEventEmitter<jsi::Value>>();
    }

    jsi::Array getSubscriptionIds(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::getSubscriptionIds) == 1,
          "Expected getSubscriptionIds(...) to have 1 parameters");

      return bridging::callFromJs<jsi::Array>(
          rt, &T::getSubscriptionIds, jsInvoker_, instance_);
    }
    double getSubscriptionId(jsi::Runtime &rt, double simSlotIndex) override {
      static_assert(
          bridging::getParameterCount(&T::getSubscriptionId) == 2,
          "Expected getSubscriptionId(...) to have 2 parameters");

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

      return bridging::callFromJs<double>(
          rt, &T::getActiveDataSubscriptionId, jsInvoker_, instance_);
    }
    jsi::Object getActiveSubscriptionInfo(jsi::Runtime &rt, double subscriberId) override {
      static_assert(
          bridging::getParameterCount(&T::getActiveSubscriptionInfo) == 2,
          "Expected getActiveSubscriptionInfo(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Object>(
          rt, &T::getActiveSubscriptionInfo, jsInvoker_, instance_, std::move(subscriberId));
    }
    double getActiveSubscriptionInfoCount(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::getActiveSubscriptionInfoCount) == 1,
          "Expected getActiveSubscriptionInfoCount(...) to have 1 parameters");

      return bridging::callFromJs<double>(
          rt, &T::getActiveSubscriptionInfoCount, jsInvoker_, instance_);
    }
    jsi::Object getActiveSubscriptionInfoForSimSlotIndex(jsi::Runtime &rt, double simSlotIndex) override {
      static_assert(
          bridging::getParameterCount(&T::getActiveSubscriptionInfoForSimSlotIndex) == 2,
          "Expected getActiveSubscriptionInfoForSimSlotIndex(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Object>(
          rt, &T::getActiveSubscriptionInfoForSimSlotIndex, jsInvoker_, instance_, std::move(simSlotIndex));
    }
    jsi::Array getActiveSubscriptionInfoList(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::getActiveSubscriptionInfoList) == 1,
          "Expected getActiveSubscriptionInfoList(...) to have 1 parameters");

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

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

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

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

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

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

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

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

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

      return bridging::callFromJs<jsi::String>(
          rt, &T::getPhoneNumber, jsInvoker_, instance_, std::move(subscriberId));
    }
    jsi::Array getAllPhoneNumbers(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::getAllPhoneNumbers) == 1,
          "Expected getAllPhoneNumbers(...) to have 1 parameters");

      return bridging::callFromJs<jsi::Array>(
          rt, &T::getAllPhoneNumbers, jsInvoker_, instance_);
    }
    double getSubscriberIdForPhoneNumber(jsi::Runtime &rt, jsi::String phoneNumber) override {
      static_assert(
          bridging::getParameterCount(&T::getSubscriberIdForPhoneNumber) == 2,
          "Expected getSubscriberIdForPhoneNumber(...) to have 2 parameters");

      return bridging::callFromJs<double>(
          rt, &T::getSubscriberIdForPhoneNumber, jsInvoker_, instance_, std::move(phoneNumber));
    }
    bool isActiveSubscriptionId(jsi::Runtime &rt, double subscriberId) override {
      static_assert(
          bridging::getParameterCount(&T::isActiveSubscriptionId) == 2,
          "Expected isActiveSubscriptionId(...) to have 2 parameters");

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

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

      return bridging::callFromJs<bool>(
          rt, &T::isAirplaneMode, jsInvoker_, instance_);
    }
    bool isESIM(jsi::Runtime &rt, double subscriberId) override {
      static_assert(
          bridging::getParameterCount(&T::isESIM) == 2,
          "Expected isESIM(...) to have 2 parameters");

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

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

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

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

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

      return bridging::callFromJs<void>(
          rt, &T::removeOnSimCardStateChangeListener, jsInvoker_, instance_);
    }

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

  Delegate delegate_;
};

} // namespace facebook::react
