
/**
 * 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: GenerateModuleJavaSpec.js
 *
 * @nolint
 */

package com.opentokreactnative;

import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public abstract class NativeOpentokSpec extends ReactContextBaseJavaModule implements TurboModule {
  public static final String NAME = "OpentokReactNative";

  public NativeOpentokSpec(ReactApplicationContext reactContext) {
    super(reactContext);
  }

  @Override
  public @Nonnull String getName() {
    return NAME;
  }

  protected final void emitOnArchiveStarted(ReadableMap value) {
    mEventEmitterCallback.invoke("onArchiveStarted", value);
  }

  protected final void emitOnArchiveStopped(ReadableMap value) {
    mEventEmitterCallback.invoke("onArchiveStopped", value);
  }

  protected final void emitOnConnectionCreated(ReadableMap value) {
    mEventEmitterCallback.invoke("onConnectionCreated", value);
  }

  protected final void emitOnConnectionDestroyed(ReadableMap value) {
    mEventEmitterCallback.invoke("onConnectionDestroyed", value);
  }

  protected final void emitOnMuteForced(ReadableMap value) {
    mEventEmitterCallback.invoke("onMuteForced", value);
  }

  protected final void emitOnSessionConnected(ReadableMap value) {
    mEventEmitterCallback.invoke("onSessionConnected", value);
  }

  protected final void emitOnSessionDisconnected(ReadableMap value) {
    mEventEmitterCallback.invoke("onSessionDisconnected", value);
  }

  protected final void emitOnSessionReconnecting(ReadableMap value) {
    mEventEmitterCallback.invoke("onSessionReconnecting", value);
  }

  protected final void emitOnSessionReconnected(ReadableMap value) {
    mEventEmitterCallback.invoke("onSessionReconnected", value);
  }

  protected final void emitOnStreamCreated(ReadableMap value) {
    mEventEmitterCallback.invoke("onStreamCreated", value);
  }

  protected final void emitOnStreamDestroyed(ReadableMap value) {
    mEventEmitterCallback.invoke("onStreamDestroyed", value);
  }

  protected final void emitOnStreamPropertyChanged(ReadableMap value) {
    mEventEmitterCallback.invoke("onStreamPropertyChanged", value);
  }

  protected final void emitOnSignalReceived(ReadableMap value) {
    mEventEmitterCallback.invoke("onSignalReceived", value);
  }

  protected final void emitOnSessionError(ReadableMap value) {
    mEventEmitterCallback.invoke("onSessionError", value);
  }

  @ReactMethod
  @DoNotStrip
  public abstract void initSession(String apiKey, String sessionId, @Nullable ReadableMap options);

  @ReactMethod
  @DoNotStrip
  public abstract void connect(String sessionId, String token, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void disconnect(String sessionId, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void getSubscriberRtcStatsReport(String sessionId);

  @ReactMethod
  @DoNotStrip
  public abstract void getPublisherRtcStatsReport(String sessionId, String publisherId);

  @ReactMethod
  @DoNotStrip
  public abstract void setAudioTransformers(String sessionId, String publisherId, ReadableArray transformers);

  @ReactMethod
  @DoNotStrip
  public abstract void setVideoTransformers(String sessionId, String publisherId, ReadableArray transformers);

  @ReactMethod
  @DoNotStrip
  public abstract void publish(String sessionId, String publisherId);

  @ReactMethod
  @DoNotStrip
  public abstract void unpublish(String sessionId, String publisherId);

  @ReactMethod
  @DoNotStrip
  public abstract void removeSubscriber(String sessionId, String streamId);

  @ReactMethod
  @DoNotStrip
  public abstract void sendSignal(String sessionId, String type, String data, String to);

  @ReactMethod
  @DoNotStrip
  public abstract void setEncryptionSecret(String sessionId, String secret, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void getCapabilities(String sessionId, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void reportIssue(String sessionId, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void forceMuteAll(String sessionId, ReadableArray excludedStreamIds, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void forceMuteStream(String sessionId, String streamId, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void forceDisconnect(String sessionId, String connectionId, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void disableForceMute(String sessionId, Promise promise);
}
