#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 6.3.2 effective-5.10 (swiftlang-6.3.2.1.108 clang-2100.1.1.101)
#ifndef ENXRTCIOS_SWIFT_H
#define ENXRTCIOS_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif // defined(__OBJC__)
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <cstring>
#include <stdlib.h>
#include <new>
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module"
#if defined(__arm64e__) && __has_include(<ptrauth.h>)
# include <ptrauth.h>
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
# ifndef __ptrauth_swift_value_witness_function_pointer
#  define __ptrauth_swift_value_witness_function_pointer(x)
# endif
# ifndef __ptrauth_swift_class_method_pointer
#  define __ptrauth_swift_class_method_pointer(x)
# endif
#pragma clang diagnostic pop
#endif
#pragma clang diagnostic pop
#endif

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef unsigned char char8_t;
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...) 
# endif
#endif
#if !defined(SWIFT_RUNTIME_NAME)
# if __has_attribute(objc_runtime_name)
#  define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
# else
#  define SWIFT_RUNTIME_NAME(X) 
# endif
#endif
#if !defined(SWIFT_COMPILE_NAME)
# if __has_attribute(swift_name)
#  define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
# else
#  define SWIFT_COMPILE_NAME(X) 
# endif
#endif
#if !defined(SWIFT_METHOD_FAMILY)
# if __has_attribute(objc_method_family)
#  define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
# else
#  define SWIFT_METHOD_FAMILY(X) 
# endif
#endif
#if !defined(SWIFT_NOESCAPE)
# if __has_attribute(noescape)
#  define SWIFT_NOESCAPE __attribute__((noescape))
# else
#  define SWIFT_NOESCAPE 
# endif
#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)
# if __has_attribute(ns_consumed)
#  define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
# else
#  define SWIFT_RELEASES_ARGUMENT 
# endif
#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)
# if __has_attribute(warn_unused_result)
#  define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# else
#  define SWIFT_WARN_UNUSED_RESULT 
# endif
#endif
#if !defined(SWIFT_NORETURN)
# if __has_attribute(noreturn)
#  define SWIFT_NORETURN __attribute__((noreturn))
# else
#  define SWIFT_NORETURN 
# endif
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA 
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA 
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA 
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER 
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility) 
# endif
#endif
#if !defined(SWIFT_ENUM)
# if (defined(__cplusplus) && __cplusplus >= 201103L) ||      (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) ||      __has_feature(objc_fixed_enum)
#  define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
#  if __has_feature(generalized_swift_name)
#   define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
#  else
#   define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
#  endif
# else
#  define SWIFT_ENUM(_type, _name, _extensibility) _type _name; enum 
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM_TAG)
# if (defined(__cplusplus) && __cplusplus >= 201103L) ||      (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) ||      __has_feature(objc_fixed_enum)
#  define SWIFT_ENUM_TAG enum
# else
#  define SWIFT_ENUM_TAG
# endif
#endif
#if !defined(SWIFT_ENUM_FWD_DECL)
# if (defined(__cplusplus) && __cplusplus >= 201103L) ||      (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L) ||      __has_feature(objc_fixed_enum)
#  define SWIFT_ENUM_FWD_DECL(_type, _name) enum _name : _type;
# else
#  define SWIFT_ENUM_FWD_DECL(_type, _name) typedef _type _name;
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_AVAILABILITY_DOMAIN)
# define SWIFT_AVAILABILITY_DOMAIN(dom, ...) __attribute__((availability(domain: dom, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if !defined(SWIFT_DEPRECATED_OBJC)
# if __has_feature(attribute_diagnose_if_objc)
#  define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
# else
#  define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
# endif
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction 
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
#  define SWIFT_EXTERN extern "C"
# else
#  define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if !defined(SWIFT_INDIRECT_RESULT)
# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
#endif
#if !defined(SWIFT_CONTEXT)
# define SWIFT_CONTEXT __attribute__((swift_context))
#endif
#if !defined(SWIFT_ERROR_RESULT)
# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
#endif
#if defined(__cplusplus)
# define SWIFT_NOEXCEPT noexcept
#else
# define SWIFT_NOEXCEPT 
#endif
#if !defined(SWIFT_C_INLINE_THUNK)
# if __has_attribute(always_inline)
# if __has_attribute(nodebug)
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
# else
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
# endif
# else
#  define SWIFT_C_INLINE_THUNK inline
# endif
#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL 
#endif
#endif
#if !__has_feature(nullability)
# define _Nonnull
# define _Nullable
# define _Null_unspecified
#elif !defined(__OBJC__)
# pragma clang diagnostic ignored "-Wnullability-extension"
#endif
#if !__has_feature(nullability_nullable_result)
# define _Nullable_result _Nullable
#endif
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="EnxRTCiOS",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__cplusplus)
extern "C" {
#endif

#if defined(__cplusplus)
} // extern "C"
#endif
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import AVFoundation;
@import CoreFoundation;
@import CoreVideo;
@import Foundation;
@import ObjectiveC;
@import UIKit;
@import WebKit;
#endif

#endif // defined(__OBJC__)
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="EnxRTCiOS",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

/// Voice Activity Detector built on <code>AVAudioEngine</code>.
/// Uses energy, zero-crossing rate, and spectral centroid analysis to distinguish
/// speech from background noise in real time. Four sensitivity modes are available
/// via <code>VadMode</code>; the active mode scales the raw confidence score before it is
/// compared against the detection threshold.
/// <em>Typical usage:</em>
/// \code
/// let vad = EnablexWebRTCVAD(vadMode: .quality, delegate: self)
/// vad.startVAD()
/// // … receive events via EnablexWebRTCVADDelegate …
/// vad.stopVAD()
///
/// \endcode
SWIFT_CLASS("_TtC9EnxRTCiOS16EnablexWebRTCVAD")
@interface EnablexWebRTCVAD : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSCoder;
/// A multi-participant video grid / list view that renders up to nine <code>EnxStream</code> tiles.
/// Supports two layout modes:
/// <ul>
///   <li>
///     <em>Grid</em> (default): tiles are arranged in a responsive grid based on participant count.
///   </li>
///   <li>
///     <em>List</em>: the most-active speaker is shown full-screen; remaining participants appear
///     in a horizontal or vertical strip.
///   </li>
/// </ul>
/// Switch modes at any time with <code>switchATView(_:)</code>.
SWIFT_CLASS("_TtC9EnxRTCiOS13EnxATListView")
@interface EnxATListView : UIView
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
- (void)willMoveToSuperview:(UIView * _Nullable)newSuperview;
- (void)didMoveToSuperview;
- (void)layoutSubviews;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end

@class UICollectionView;
@class NSIndexPath;
@class UICollectionViewCell;
@class UICollectionViewLayout;
@interface EnxATListView (SWIFT_EXTENSION(EnxRTCiOS)) <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
/// Returns the total number of stream tiles to display in the collection view.
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Configures and returns a cell containing the <code>EnxPlayerView</code> and name label for the stream at the given index path.
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// Returns the tile size for the given index path, using precomputed grid frames in grid mode or a fixed strip size in list mode.
- (CGSize)collectionView:(UICollectionView * _Nonnull)collectionView layout:(UICollectionViewLayout * _Nonnull)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
/// Returns zero insets so tiles fill the collection view edge-to-edge with no section padding.
- (UIEdgeInsets)collectionView:(UICollectionView * _Nonnull)collectionView layout:(UICollectionViewLayout * _Nonnull)collectionViewLayout insetForSectionAtIndex:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Returns zero inter-item spacing so tiles are packed without horizontal gaps.
- (CGFloat)collectionView:(UICollectionView * _Nonnull)collectionView layout:(UICollectionViewLayout * _Nonnull)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Returns zero line spacing so rows of tiles are packed without vertical gaps.
- (CGFloat)collectionView:(UICollectionView * _Nonnull)collectionView layout:(UICollectionViewLayout * _Nonnull)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Triggered when the user taps a tile; forwards the corresponding <code>EnxStream</code> to <code>EnxTalkerStreamDelegate</code>.
- (void)collectionView:(UICollectionView * _Nonnull)collectionView didSelectItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
@end

/// Delegate protocol that receives ReplayKit broadcast screen-share lifecycle event callbacks.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS20EnxBroadCastDelegate_")
@protocol EnxBroadCastDelegate
/// Fired when a broadcased started
/// @param data Information broadcast  event
/// @details This delegate method will called when user will add replaykit breadcast and start shreen shared
- (void)didStartBroadCast:(NSArray * _Nullable)data;
/// Fired when a broadcased stopped
/// @param data Information broadcast  event
/// @details This delegate method will called when user will add replaykit breadcast and stopped shreen shared
- (void)didStoppedBroadCast:(NSArray * _Nullable)data;
/// Fired when a broadcased disconnected
/// @details This delegate method will called when user will stopped screen shared
- (void)broadCastDisconnected;
/// Fired when a broadcased Connected
/// @details This delegate method will called when user will start screen shared
- (void)broadCastConnected;
/// Fired when a broadcased disconnected
/// @param reason Information about failure to start screen share
/// @details This delegate method will called when user will start screen and failed
- (void)failedToConnectWithBroadCast:(NSArray * _Nonnull)data;
/// Fired when a broadcased disconnected failed
/// @param reason Information about failure to start screen share
/// @details This delegate method will called when user will start screen and failed
- (void)failedToDisconnectWithBroadCast:(NSArray * _Nonnull)data;
/// Fired when disconnectedByOwner
/// @details This delegate method will called when user will start screen shared and main room disconnected.
- (void)disconnectedByOwner;
/// The chield will get notify to exist from breakout room
/// @param  Data ACK list of Stop Annotation
/// @details This delegate method will notify  to the child client .
- (void)didRequestedExitRoom:(NSArray * _Nullable)data;
@end

/// Defines the scope at which custom data is visible within a room session.
typedef SWIFT_ENUM(NSInteger, EnxCustomDataScope, open) {
  EnxCustomDataScopeUser = 0,
  EnxCustomDataScopeOwner = 1,
  EnxCustomDataScopeRoom = 2,
  EnxCustomDataScopeSession = 3,
};

/// Detects and reports device orientation changes using CoreMotion gravity data.
/// <code>EnxOrientationManager</code> dynamically loads <code>CMMotionManager</code> at runtime so that
/// CoreMotion is an <em>optional</em> dependency — the framework builds and runs even if
/// CoreMotion is not linked. Orientation is reported as one of four string values:
/// <code>"Portrait"</code>, <code>"PortraitUpsideDown"</code>, <code>"LandscapeLeft"</code>, or <code>"LandscapeRight"</code>.
SWIFT_CLASS("_TtC9EnxRTCiOS21EnxOrientationManager")
@interface EnxOrientationManager : NSObject
/// Shared singleton instance.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) EnxOrientationManager * _Nonnull shared;)
+ (EnxOrientationManager * _Nonnull)shared SWIFT_WARN_UNUSED_RESULT;
/// Starts listening to device-motion updates at 10 Hz.
/// Calling this method while monitoring is already active has no effect.
/// If CoreMotion is not linked or device motion is unavailable, the method
/// logs a warning and returns without starting updates.
- (void)startMonitoring;
/// Stops device-motion updates and releases the motion manager.
- (void)stopMonitoring;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Represents the state of an outbound (dial-out) call initiated by the SDK.
typedef SWIFT_ENUM(NSInteger, EnxOutBoundCallState, open) {
  EnxOutBoundCallStateInitiated = 0,
  EnxOutBoundCallStateRinging = 1,
  EnxOutBoundCallStateConnected = 2,
  EnxOutBoundCallStateFailed = 3,
  EnxOutBoundCallStateDisconnected = 4,
  EnxOutBoundCallStateTimeout = 5,
};

@class NSString;
@class UIImage;
/// Delegate for per-player analytics and image-capture callbacks.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS17EnxPlayerDelegate_")
@protocol EnxPlayerDelegate
@optional
/// Called whenever updated WebRTC stats are available for this player.
/// \param statsData Dictionary of stat key–value pairs.
///
- (void)didPlayerStats:(NSDictionary<NSString *, id> * _Nonnull)statsData;
/// Called after <code>captureScreenShot()</code> has rendered the player view to an image.
/// \param snapShot The captured <code>UIImage</code>, or <code>nil</code> if capture failed.
///
- (void)didCapturedView:(UIImage * _Nullable)snapShot;
@end

/// A video-rendering view for displaying local or remote WebRTC media streams.
/// <code>EnxPlayerView</code> wraps an <code>RTCMTLVideoView</code> (real device) or <code>RTCEAGLVideoView</code>
/// (simulator) and overlays a collection of status icons (mute, bandwidth, pin, etc.)
/// that are toggled by the room layer. It also supports snapshot capture, stats display,
/// and avatar fallback images when video is muted.
/// Create an instance with <code>init(withLocalView:)</code> or <code>init(withRemoteView:)</code>.
/// Storyboard / XIB loading via <code>awakeFromNib()</code> is also supported.
SWIFT_CLASS("_TtC9EnxRTCiOS13EnxPlayerView")
@interface EnxPlayerView : UIView <AVCaptureVideoDataOutputSampleBufferDelegate>
/// EnxPlayerDelegate were this Player will invoke methods as events.
/// Marked weak to prevent a retain cycle between EnxPlayerView and its owning ViewController.
@property (nonatomic, weak) id <EnxPlayerDelegate> _Nullable delegate;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
- (void)awakeFromNib;
/// This API will help client to creale local player, to display self video.
/// @param frame is the preedefine CGRect value to set x,y coordiante and width,height of local player.
/// @return its will give instance of local player
- (nonnull instancetype)initWithLocalView:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
/// This API will help client to creale remote player, to display remote video.
/// @param frame is the preedefine CGRect value to set x,y coordiante and width,height of remote player.
/// @return its will give instance of remote player
- (nonnull instancetype)initWithRemoteView:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (void)prepareForInterfaceBuilder;
/// This is the class method will get automatically called whenever any changes done on view. like height,width
/// This API will calcutale size of parent view and render internal view like player view.
- (void)layoutSubviews;
/// Sets the <code>videoContentMode</code> of the underlying <code>RTCMTLVideoView</code>; has no effect on the simulator or non-Metal devices.
- (void)setContentWithMode:(enum UIViewContentMode)contentMode;
/// Enable player Stats.
/// @param flag its a bool value to enable/disable stats
/// @details this API will help customer to enable/disable  player stats, while sending true/false value.
/// trur for enable , false for desable.
- (void)enablePlayerStats:(BOOL)flag;
/// Snap shot
/// @details this API will used By customer, its will help them to take snap shot of player (Either Local or remote)
- (void)captureScreenShot;
/// get remote view
/// @return UIView of remote player
/// @details this  API used by self/EnxStream to get all ready created remote player. so that sdk will not required to create new if needed by public.
- (UIView * _Nullable)getremoteView SWIFT_WARN_UNUSED_RESULT;
@end

@interface EnxPlayerView (SWIFT_EXTENSION(EnxRTCiOS)) <UICollectionViewDataSource, UICollectionViewDelegate>
/// Returns the number of currently visible status icons (audio-mute, video-mute, bandwidth, etc.).
- (NSInteger)collectionView:(UICollectionView * _Nonnull)collectionView numberOfItemsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
/// Dequeues and populates a cell with either a <code>UIImageView</code> icon or a tappable <code>UIButton</code> for the status icon at the given index.
- (UICollectionViewCell * _Nonnull)collectionView:(UICollectionView * _Nonnull)collectionView cellForItemAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
@end

/// Controls which participants are permitted to view a published stream.
typedef SWIFT_ENUM(NSInteger, EnxPubMode, open) {
  EnxPubModeAll = 0,
  EnxPubModeAuthorize = 1,
  EnxPubModeModerators = 2,
};

/// Identifies the type of secondary publish stream: device screen capture or canvas overlay.
typedef SWIFT_ENUM(NSInteger, EnxPubType, open) {
  EnxPubTypeScreen = 0,
  EnxPubTypeCanvas = 1,
};

@protocol EnxRoomDelegate;
SWIFT_ENUM_FWD_DECL(NSInteger, EnxRoomStatus)
@class EnxStream;
@protocol EnxTalkerStreamDelegate;
@class UIColor;
/// <code>EnxRoom</code> is the primary entry point for joining and managing an EnableX video room.
/// It wraps WebRTC peer connections, signaling via SocketIO, stream publishing/subscribing,
/// active-talker tracking, breakout rooms, floor control, live recording, canvas sharing,
/// file transfer, and data-channel messaging into a single cohesive interface.
/// Assign a conforming <code>EnxRoomDelegate</code> to receive room lifecycle and media events.
SWIFT_CLASS("_TtC9EnxRTCiOS7EnxRoom")
@interface EnxRoom : NSObject
/// EnxRoomDelegate were this room will invoke methods as events.
@property (nonatomic, strong) id <EnxRoomDelegate> _Nullable delegate;
@property (nonatomic, strong) id <EnxBroadCastDelegate> _Nullable broadCastDelegate;
/// Here i am storing playerDelegate when join room called and set this playerDelegate to player when we create player internally.
@property (nonatomic, strong) id _Nullable playerDelegate;
@property (nonatomic, readonly) enum EnxRoomStatus status;
/// The Enx room id for this room instance.
@property (nonatomic, readonly, copy) NSString * _Null_unspecified roomId;
/// EnxStream referencing the stream being published.
@property (nonatomic, readonly, strong) EnxStream * _Null_unspecified publishStream;
/// EnxStream streams in the room.
@property (nonatomic, readonly, copy) NSDictionary<NSString *, EnxStream *> * _Nonnull streamsByStreamId;
/// List of remote EnxStream streams available in this room.
/// They might be subscribed or not.
@property (nonatomic, readonly, copy) NSArray<EnxStream *> * _Nonnull remoteStreams;
/// BOOL set/get enable recording of the stream being published.
@property (nonatomic, readonly) BOOL recordEnabled;
/// BOOL to check active talker enable or not
@property (nonatomic, readonly) BOOL isRoomActiveTalker;
@property (nonatomic, readonly, copy) NSString * _Null_unspecified clientId;
@property (nonatomic, readonly, copy) NSString * _Null_unspecified clientName;
@property (nonatomic, readonly, copy) NSString * _Null_unspecified userRole;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Null_unspecified roomInfo;
@property (nonatomic) BOOL isBreakOutRoom;
@property (nonatomic, readonly) BOOL isLobby;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull customRoomData;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Null_unspecified roomMetadata;
@property (nonatomic, readonly) BOOL isAudioOnlyRoom;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull info;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Create an EnxRoom with the given EnxRoomDelegate.
/// Notice that if initialize EnxRoom like this, you will never be able to
/// publish/subscribe streams without first call method connect:
/// method.
/// @see connect:
/// @param roomDelegate EnxRoomDelegate instance for this room.
/// @return instancetype
/// @details this method is used to create a refrence of room and set room delegate
- (nonnull instancetype)init:(id <EnxRoomDelegate> _Nullable)withDelegate OBJC_DESIGNATED_INITIALIZER;
/// Returns a local preview <code>EnxStream</code> so the app can display a camera preview before joining a room.
- (EnxStream * _Nonnull)getPreviewStream SWIFT_WARN_UNUSED_RESULT;
/// A Stream carries different type of media . Audio, Video and/or Data. This stream gets transferred towards remote end points through EnableX Media Servers where it’s played and interacted with.
/// @param publishStreamInfo
/// Where publishStreamInfo is:
/// {
/// “audio”: true,
/// “video”: true,
/// “data”: true,
/// “name”: “iOS”,
/// “type” : “public”
/// }
/// @returns EnxStream.
- (EnxStream * _Nullable)getLocalStream:(NSDictionary<NSString *, id> * _Nonnull)publishStreamInfo SWIFT_WARN_UNUSED_RESULT;
/// This method is required if you have instanciated EnxRoom class without providing a token.
/// @param token The auth token for room access. See initWithEncodedToken:
/// for token composition details.
/// @param roomInfo will a required argument, this will contain about room delais, for example - is reconnect allowed, number of attamped, time out, palayer icons , Activetalker type etc….
/// @advanceOption this is an optional argument, this will contain information about subscription of advance option during join room
/// @see EnxRoomDelegate:room:didConnect:
/// @see EnxRoomDelegate:room:didError:
- (void)connect:(NSString * _Nonnull)token roomInfo:(NSDictionary<NSString *, id> * _Nullable)rinfo advanceOptions:(NSArray * _Nullable)advOpt;
/// This method returns user-meta information about the user connected on a End-POint.
/// @returns NSDictionary.
- (NSDictionary<NSString *, id> * _Nullable)whoami SWIFT_WARN_UNUSED_RESULT;
/// Publishes a given EnxStream with given options.
/// @param stream The stream from where we will be publishing.
/// @see EnxRoomDelegate:room:didPublishStream:
- (void)publish:(EnxStream * _Nonnull)stream;
/// Un-Publish the stream being published.
- (void)unpublish;
/// Subscribe to a remote stream.
/// @param stream EnxStream object containing a valid streamId.
/// You should be connected to the room before subscribing to a stream.
/// To know how to get streams ids take a look at the following methods:
/// @see EnxRoomDelegate:room:didAddedStream:
/// @returns Boolean indicating if started to signaling to subscribe the
/// given stream.
- (BOOL)subscribe:(EnxStream * _Nonnull)stream SWIFT_WARN_UNUSED_RESULT;
/// Unsubscribe from a remote stream.
/// @param stream The stream you want to unsubscribe.
/// @see EnxRoomDelegate:room:didUnSubscribeStream:
- (void)unsubscribe:(EnxStream * _Nonnull)stream;
/// Leave the room.
/// RTC and WS connections will be closed.
/// To close the Enx and WC connection use method:
/// @see EnxRoomDelegate:didRoomDisconnect:
- (void)disconnect;
/// To post Enx client SDK logs to server use the below method.
/// Note: To post client logs, first developer needs to enable the logs.
/// @see EnxRoomDelegate:room:logsUploadedSuccess:
/// @see EnxRoomDelegate:room:logsUploadedFailure:
- (void)postClientLogs;
/// To start Recording
/// @see EnxRoomDelegate:room:startRecordingEvent:
- (void)startRecord;
/// To stop Recording
/// @see EnxRoomDelegate:room:stopRecordingEvent:
- (void)stopRecord;
/// Client endpoint can use this method to adjust Layout of activetalker View, This method will valid only if user has requested for complete view of activetalker
- (void)adjustLayout;
/// Client endpoint can use this method to set delegate from talver view, this delegate will notify user for selected EnxStream
- (void)setActiveTalkerDelegate:(id <EnxTalkerStreamDelegate> _Nullable)delegate;
/// This methgod will used to switchged audiovideo call to audio only call.
/// @param audioOnly is a flag to switch over audiovideo to audioonly or vise versa
- (void)setAudioOnlyMode:(BOOL)audioOnly;
/// The getTalkerCount method is used to know opted streams in Active Talker.
- (void)setTalkerCount:(NSInteger)number;
/// This method is available for all users during Active Talker Mode. Using this method, you can get maximum number of allowed Active Talkers in the room.
- (void)getMaxTalkers;
/// The getTalkerCount method is used to know opted streams in Active Talker.
- (void)getTalkerCount;
/// Client endpoint can use this method to update Configuration in ongoing confrence ,
/// @param data it is a NSDictonary which contaion information about update configuration, its is a required property ,its can’t be nil.
- (void)updateConfiguration:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Client endpoint can use this method to start Annotations on given stream.
/// @param stream it is a EnxStream on which annotation going to be done. its is a required property which can’t be nil.
- (void)startAnnotation:(EnxStream * _Nonnull)stream;
- (void)stopAnnotation;
/// Requests the signaling server to extend the current conference duration beyond its scheduled end time.
- (void)extendConferenceDuration;
/// Live broadcast Streaming API
/// Client endpoint can use this method to start startStreaming in ongoing confrence.
/// @param streamingConfig it is a NSDictonary which contain information about streaming, it is a required parameter, its can’t be nil
- (void)startStreaming:(NSDictionary<NSString *, id> * _Nonnull)streamingConfig;
/// Client endpoint can use this method to start stopStreaming in ongoing confrence.
/// @param streamingConfig it is a NSDictonary which contain information about streaming, it is a required parameter, its can’t be nil
- (void)stopStreaming:(NSDictionary<NSString *, id> * _Nonnull)streamingConfig;
/// Client endpoint can use this method to pin any of the available user in room , while pass their clientIDs
/// @param clientIds - this is list of clientID who going to be pinged
/// this is a required property , can’t be nil.
- (void)pinUsers:(NSArray<NSString *> * _Nonnull)clientIds;
/// Client endpoint can use this method to unpin any of the pingged user in room , while pass their clientIDs of pinned user
/// @param clientIds - this is list of pingged clientID who going to be unpinned
/// this is a required property , can’t be nil.
- (void)unpinUsers:(NSArray<NSString *> * _Nonnull)clientIds;
/// Client endpoint can use this method to pause the room
- (void)pause;
/// Client endpoint can use this method to resume the parent room after disconnect from breakout room
- (void)resume;
/// Client endpoint can use this method to mute the parent room after connected to breakout room.
/// @param data its a NSDictonary which contain information about mute room , for example audio : true/false, video true/false
- (void)muteRoom:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Client endpoint can use this method to unmute the parent room after disconnect from breakout room.
/// @param data its a NSDictonary which contain information about mute room , for example audio : true/false, video true/false
- (void)unmuteRoom:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Approves an awaited user’s knock-knock request, allowing them to join the room.
- (void)approveAwaitedUser:(NSString * _Nonnull)clientId;
/// Denies an awaited user’s knock-knock request, preventing them from joining the room.
- (void)denyAwaitedUser:(NSString * _Nonnull)clientId;
/// Client endpoint can set options at room level. to set Talker Event option after join room
/// @param enable contain the flag information for either subscribe and unsubicribe Talker Events
- (void)subscribeForTalkerNotification:(BOOL)enable;
/// Client endpoint can use this method to add spotlight any of the available user in room , while pass their clientIDs
/// @param clientIds - this is list of clientID who going to be pinged
/// this is a required property , can’t be nil.
- (void)addSpotlightUsers:(NSArray<NSString *> * _Nonnull)clientIds;
/// Client endpoint can use this method to remove spotlight any of the pingged user in room , while pass their clientIDs of pinned user
/// @param clientIds - this is list of pingged clientID who going to be unpinned
/// this is a required property , can’t be nil.
- (void)removeSpotlightUsers:(NSArray<NSString *> * _Nonnull)clientIds;
/// Client endpoint can use this method to switch room mode  , while pass their group/lecture
/// @param roomMode - this is room mode for switch room mode
/// this is a required property , can’t be nil.
- (void)switchRoomMode:(NSString * _Nonnull)roomMode;
/// Starts live recording of the conference using the provided streaming configuration; only moderators may call this.
- (void)startLiveRecording:(NSDictionary<NSString *, id> * _Nonnull)streamingConfig;
/// Stops an in-progress live recording; only moderators may call this and a recording must already be running.
- (void)stopLiveRecording;
/// Switches the active-talker list view layout to either leader or grid mode based on the provided string.
- (void)switchATView:(NSString * _Nonnull)viewString;
/// Forces an immediate refresh of the active-talker list view.
- (void)forceUpdateATList;
/// Returns the <code>EnxPlayerView</code> associated with the given client ID from the active-talker list, or <code>nil</code> if not found.
- (EnxPlayerView * _Nullable)getPlayer:(NSString * _Nonnull)clientID SWIFT_WARN_UNUSED_RESULT;
/// Highlights the border of player views for the specified client IDs in the active-talker list.
- (void)highlightBorderForClient:(NSArray<NSString *> * _Nonnull)clientIDs;
/// Changes the background color of player views for the specified client IDs in the active-talker list.
- (void)changeBgColorForClients:(NSArray<NSString *> * _Nonnull)clientIDs withColor:(UIColor * _Nonnull)color;
/// Updates the composite layout for a specified service (liveRecording, streaming, screenShare, or all); only moderators may call this.
- (void)updateLayout:(NSDictionary<NSString *, id> * _Nonnull)layoutOptions;
/// Broadcasts or privately sends a typing-indicator event to inform recipients whether the local user is currently typing.
- (void)sendTypingIndicator:(BOOL)isShow toClientId:(NSArray<NSString *> * _Nullable)clientIds;
/// Persists custom key-value data to the server using the specified scope and data options.
- (void)saveCustomData:(NSDictionary<NSString *, id> * _Nonnull)dataOption withData:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Retrieves previously saved custom data matching the specified query options, returning results via the delegate.
- (void)getCustomData:(NSDictionary<NSString *, id> * _Nonnull)dataOption;
/// Updates existing custom data in-memory and propagates the change to the server with the specified scope and broadcast options.
- (void)setCustomData:(NSDictionary<NSString *, id> * _Nonnull)dataOption withData:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Subscribes to or unsubscribes from live transcription events for the current participant.
- (void)subscribeForLiveTranscription:(BOOL)enable;
/// Starts room-wide live speech-to-text transcription in the specified language; only moderators may call this.
- (void)startLiveTranscriptionForRoom:(NSString * _Nullable)languge;
/// Stops an in-progress room-wide live transcription session; only moderators may call this.
- (void)stopLiveTranscription;
/// Client end point use this method to adjust  audio volume of all subcribe streams.
/// @param volume 0.0 - 1.0
- (void)setSpeakerVolume:(float)volume;
/// Sends a share-permission request for the specified publish type; only participants (non-moderators) may call this.
- (void)requestSharePermission:(enum EnxPubType)pubType;
/// Cancels a previously sent but not-yet-granted share-permission request; only participants may call this.
- (void)cancelSharePermission:(enum EnxPubType)pubType;
/// Changes the share-permission mode for a publish type at runtime; only moderators may call this.
- (void)setSharePermissionMode:(enum EnxPubType)pubType withmode:(enum EnxPubMode)pubMode;
/// Grants share permission to a specific requesting participant; only moderators may call this.
- (void)grantSharePermission:(enum EnxPubType)pubType requestyId:(NSString * _Nonnull)clientID;
/// Denies a pending share-permission request from the specified participant; only moderators may call this.
- (void)denySharePermission:(enum EnxPubType)pubType requestyId:(NSString * _Nonnull)clientID;
/// Revokes a previously granted share permission from the specified participant; only moderators may call this.
- (void)releaseSharePermission:(enum EnxPubType)pubType requestyId:(NSString * _Nonnull)clientID;
/// Returns the current share-permission settings dictionary for all publish types in the room.
- (NSDictionary<NSString *, id> * _Nonnull)getSharePermissions SWIFT_WARN_UNUSED_RESULT;
/// Returns the current room mode string (e.g., “normal”, “lecture”) for the connected room.
- (NSString * _Nonnull)getRoomMode SWIFT_WARN_UNUSED_RESULT;
/// Client endpoint can use this method to lock the ongoing confrence.
- (void)lockRoom;
/// Client endpoint can use this method to unlock the ongoing confrence.
- (void)unlockRoom;
- (NSArray * _Nullable)getUserList SWIFT_WARN_UNUSED_RESULT;
- (void)requestFloor;
- (void)cancelFloor;
- (void)finishFloor;
- (void)grantFloor:(NSString * _Nonnull)clientId;
- (void)denyFloor:(NSString * _Nonnull)clientId;
- (void)releaseFloor:(NSString * _Nonnull)clientId;
- (void)inviteToFloor:(NSString * _Nonnull)clientId;
- (void)acceptInviteFloorRequest:(NSString * _Nonnull)clientId;
- (void)cancelFloorInvite:(NSString * _Nonnull)clientId;
/// Rejects a moderator’s floor-invite for the specified participant, declining the invitation to speak; only participants may call this.
- (void)rejectInviteFloor:(NSString * _Nonnull)clientId;
/// mute all audio stream.
/// Note: Hardmute functionality is only applicable to moderator.
/// @see EnxRoomDelegate:didMutedAllUser::data:
- (void)hardMute;
/// unmute all audio stream.
/// Note: Hardmute functionality is only applicable to moderator.
/// @see EnxRoomDelegate:didUnMutedAllUser:data:
- (void)hardUnMute;
/// mute single audio stream.
/// Note: Hardmute functionality is only applicable to moderator.
/// @param clientId is the participant who is being mute to the floor.
/// @see EnxRoomDelegate:didMutedSingleUser:::data:
- (void)hardMuteUserAudio:(NSString * _Nonnull)clientId;
/// unmute single audio stream.
/// Note: Hardmute functionality is only applicable to moderator.
/// @param clientId is the participant who is being mute to the floor.
/// @see EnxRoomDelegate:didUnMutedSingleUser:::data:
- (void)hardUnmuteUserAudio:(NSString * _Nonnull)clientId;
/// Hard-mutes the video of a specific participant by client ID; only moderators may call this.
- (void)hardMuteUserVideo:(NSString * _Nonnull)clientId;
/// Hard-unmutes the video of a specific participant by client ID; only moderators may call this.
- (void)hardUnmuteUserVideo:(NSString * _Nonnull)clientId;
/// client end point will used this method for sending chat message in same confrent either private or publically.
/// @param message contain actual chat message. its can’t be null
/// @param broadcast true/false if breadcast true means this message will sent to all user in confrence false mesan only listed participent
/// @param clientIds here will maintain list of client id who going to receive chat message. it can be nil if broadcast true.
- (void)sendMessage:(NSString * _Nonnull)message isBroadCast:(BOOL)broadcast recipientIDs:(NSArray<NSString *> * _Nullable)clientIds messageId:(NSInteger)id;
/// client end point will used this new method taking any auction on message, like edit, delete.
/// @param options its [String : Any] where user can eMessageId = interger ,type = chat-update/ chat-delete’ if wanted to edit then msg =  <edited message>
- (void)transactMessage:(NSDictionary<NSString *, id> * _Nonnull)options;
/// client end point will used this method for sending custome event message in same confrent either private or publically.
/// @param message contain actual chat message. its can’t be null
/// @param broadcast true/false if breadcast true means this message will sent to all user in confrence false mesan only listed participent
/// @param clientIds here will maintain list of client id who going to receive chat message. it can be nil if broadcast true.
- (void)sendUserData:(NSDictionary<NSString *, id> * _Nonnull)message isBroadCast:(BOOL)broadcast recipientIDs:(NSArray<NSString *> * _Nullable)clientIds;
/// Client endpoint can use this method to zoom remote stream,
/// @param value it is a CGFloat value which contain range form 0.1 to 1.0 scall to zoom
/// @param clientIds this is a list of clientids which streams are going to zoom. its is a required property , its can’t be nil.
- (void)setZoomFactor:(CGFloat)value clientId:(NSArray<NSString *> * _Nullable)cids;
/// Client endpoint will call this method to a mute/unmute remote stream while application in the background.
/// @param flag will carry a flag value for mute/unmute remote stream during background
- (void)stopVideoTracksOnApplicationWithBackground:(BOOL)flag;
/// Client end point use this method to active/inactive audio of all subcribe streams.
/// @param flag true/false
- (void)muteSubscribeStreamsAudio:(BOOL)flag;
/// Client endpoint (Moderators only)  can use this method to switch their role or handover their authority to any of the participent
/// @param clientId here user will pass a string of clientId, this clientId must not be nill.
- (void)switchUserRole:(NSString * _Nonnull)clientId;
/// Client endpoint (Moderators only)can use this method to switch role of any participant either moderator/audiance/user
/// @param options here user will pass list of clint list and respective role,this options must not be nill or empty .
- (void)switchUsersRole:(NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull)options;
/// Client endpoint (Participant/ Audiance/Viewer ) can use this method to request for switch his/her current rolle to moderatore
/// @param options here user will pass the details of roile wanted to switch.
- (void)requestUserRoleChange:(NSDictionary<NSString *, NSString *> * _Nonnull)options;
/// Client endpoint (Participant/ Audiance ) can use this method to request for switch his/her current rolle to moderatore
- (void)cancelUserRoleChangeRequest;
/// Client endpoint (Moderator ) can use this method to approve  switch  rolle requested from participant/audiance
/// @param options here user will pass the details of roile wanted to switch.
- (void)acceptUserRoleChange:(NSDictionary<NSString *, NSString *> * _Nonnull)options;
/// Client endpoint (Moderator ) can use this method to deny  switch  rolle requested from participant/audiance
/// @param options here user will pass the details of roile wanted to switch.
- (void)denyUserRoleChange:(NSDictionary<NSString *, NSString *> * _Nonnull)options;
/// Old APIs for Client endpoint can use this method to connect through outbond call,
/// @param number it is a NSString value which contain end user mobile number, its is a required property which can’t be nil.
/// @param callerId this is a NSString which carry callerID,  its is a required property which can’t be nil.
/// This method for initiating outbound call
- (void)makeOutboundCall:(NSString * _Nonnull)number callerId:(NSString * _Nonnull)cID;
/// New APIs for Client endpoint can use this method to connect through outbond call, here in this apis user can pass their aditional dailer information
/// @param number it is a NSString value which contain end user mobile number, its is a required property which can’t be nil.
/// @param callerId this is a NSString which carry callerID,  its is a required property which can’t be nil.
/// This method for initiating outbound call
- (void)makeOutboundCall:(NSString * _Nonnull)number callerId:(NSString * _Nonnull)cID withDialOptions:(NSDictionary<NSString *, id> * _Nonnull)dialOptions;
/// Initiates dial-out calls to multiple phone numbers simultaneously, subject to room capacity constraints.
- (void)makeOutboundCalls:(NSArray<NSString *> * _Nonnull)numberList callerId:(NSString * _Nonnull)cID withDialOptions:(NSDictionary<NSString *, id> * _Nonnull)dialOptions;
/// Cancels an in-progress dial-out call to the specified phone number.
- (void)cancelOutboundCall:(NSString * _Nonnull)number;
/// Sends DTMF digit tones to an active dial-out call identified by the given phone number.
- (void)sendDTMF:(NSString * _Nonnull)number digits:(NSString * _Nonnull)dg;
/// Client endpoint can use this method to drop any user from ongoing confrence,
/// @param clientIds its contain list of clientID who going to be dropped from ongoing confrence, Its is a required property, can’t be nil.
- (void)dropUser:(NSArray<NSString *> * _Nonnull)clientIds;
/// Client endpoint can use this method to destroy  ongoing confrence at any time,
- (void)destroy;
/// This method is required instance of EnxScreenshareDelegate along with token
/// @param token The auth token for room access. See initWithEncodedToken:
/// for token composition details.
- (void)connectWithScreenshare:(NSString * _Nonnull)token withScreenDelegate:(id <EnxBroadCastDelegate> _Nonnull)delegate;
/// Client endpoint can use this method to start screen share in ongoing confrence.
- (void)startScreenShare;
/// Client endpoint can use this method to start screen share in ongoing confrence with custome information.
- (void)startScreenShare:(NSDictionary<NSString *, id> * _Nonnull)option;
/// Client endpoint can use this method to send video buffer after screen shared started.
/// Send Video Buffer from app to publish over screen share channel
/// @param sampleBuffer it is a required property, can’t be nil.
- (void)sendVideoBuffer:(CVPixelBufferRef _Nonnull)sampleBuffer withTimeStamp:(int64_t)timeStampNs frameOrientation:(NSString * _Nonnull)orientation;
/// Client endpoint can use this method to stop screen share, this method only work when screen shared all ready running.
- (void)stopScreenShare;
/// Client endpoint can use this method to infoirm chiled user to exit from room, this method only work when screen shared all ready running.
- (void)exitScreenShare;
/// Client endpoint - Moderator can use this method to stop all sharing in the room.
- (void)stopAllSharing;
/// Client endpoint -n use this method to override Screen share
- (void)overrideScreenShare;
/// Client endpoint can use this method to create breakout room after join parents room only.
/// @param data - this is a NSDictionary which contain information about create breakout room.
/// this is a required property , can’t be nil.
- (void)createBreakOutRoom:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Client endpoint can use this method to create and invite breakout room after join parents room only.
/// @param data - this is a NSDictionary which contain information about create breakout room.
/// this is a required property , can’t be nil.
- (void)createAndInviteBreakoutRoom:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Client endpoint can use this method to join breakout room after join parents room only.
/// @param data - this is a NSDictionary which contain information about create breakout room.
/// this is a required property , can’t be nil.
/// @param streamInfo this is a NSDictionary which contain information about stream like video : true/false, audio : true/false etc…..
- (void)joinBreakOutRoom:(NSDictionary<NSString *, id> * _Nonnull)data withStreamInfo:(NSDictionary<NSString *, id> * _Nonnull)streamInfo;
/// Client endpoint can use this method to invite any participent which has connected in parent room
/// @param data - this is a NSDictionary which contain information about create breakout room.
/// this is a required property , can’t be nil.
- (void)inviteToBreakOutRoom:(NSDictionary<NSString *, id> * _Nonnull)data;
/// Client endpoint can use this method to reject Breakout room invitation
/// @param roomId - this is a String which contain room Id.
- (void)rejectBreakOutRoom:(NSString * _Nonnull)roomId;
/// Client endpoint can use this method to disconenct from breakoutRoom and clear all breakout room instance.
- (void)clearAllBreakOutSession;
/// Client endpoint can use this method to destroy all breakoutRoom and clear all breakout room instance.
/// this method only for moderator
- (void)destroyAllBreakOutSession;
/// Client endpoint can use this method to send any type of file in confrence.
/// @param isBroadcast true/false true for public share and false fro private share
/// @param clientIds list of client id who going to receive a private files, its is a required only if user will send a private file.
- (void)sendFiles:(BOOL)isBroadcast clientIds:(NSArray<NSString *> * _Nonnull)cID;
/// Cancels a single in-progress file upload identified by the given job ID.
- (void)cancelUpload:(NSInteger)jobID;
/// Cancels all in-progress file uploads.
- (void)cancelAllUploads;
/// Initiates the download of the specified file, optionally auto-saving it to the device.
- (void)downloadFile:(NSDictionary<NSString *, id> * _Nonnull)file autoSave:(BOOL)flag;
/// Cancels a single in-progress file download identified by the given job ID.
- (void)cancelDownload:(NSInteger)jobID;
/// Cancels all in-progress file downloads.
- (void)cancelAllDownloads;
/// Client endpoint can use this method to know all list of available files which he/she can download.
/// @return its will return list of available file to be download for the participent
- (NSArray * _Nullable)getAvailableFiles SWIFT_WARN_UNUSED_RESULT;
/// Client endpoint can use this method to start Canvas on given UIview.
/// @param view it is a UIview on which canvas is running. its is a required property which can’t be nil.
- (void)startCanvas:(UIView * _Nonnull)view;
/// Client endpoint can use this method to stop ongoing canvas , this method only excute if all ready canvas is running in confrence and only owner of annotation can stop annotation.
- (void)stopCanvas;
/// This API use to request server to set the remote video stream in different quality.
/// @param opt which should be “Auto, HD , SD, LD and talker/canvas”
- (void)setReceiveVideoQuality:(NSDictionary<NSString *, id> * _Nonnull)opt;
/// This API use to return the remote video stream quality.
/// @param streamType which should be “talker/canvas”
/// @return its will return as NSString which has stream video quality information like “Auto, HD , SD, LD”
- (NSString * _Nullable)getReceiveVideoQuality:(NSString * _Nonnull)streamType SWIFT_WARN_UNUSED_RESULT;
/// Client endpoint can set options at room level. to set adavance option after join room
/// @param data contain list of advance option going to subscribe, data can’t be nill
- (void)setAdvanceOptions:(NSArray * _Nonnull)data;
/// To get list Advance options set by client endpoint.
- (void)getAdvanceOptions;
/// Client End point will call this method to enable/disable stats by passing flag = true/false
/// @param flag true/false
/// ‘True’ for enable stats and ‘False’ for desable Stats
- (void)enableStats:(BOOL)flag;
/// This method Will return Current selected Audio device
/// @return as NSString of current stelected audio device.
- (NSString * _Nullable)getSelectedDevice SWIFT_WARN_UNUSED_RESULT;
/// This method Will return all list of connected Audio Device
/// @return list of audio device
/// *
- (NSArray<NSString *> * _Nullable)getDevices SWIFT_WARN_UNUSED_RESULT;
/// This method Will Switch to selected media device
/// @param mediaName as NSString of new audio media name on which we overwride the audio media
/// *
- (void)switchMediaDevice:(NSString * _Nonnull)mediaName;
/// Client endpoint can use this method to enable/disable proximitry Sensor ,
/// @param value true/false , ture for unable proximitry Sensor and false for diasable proximitry Sensor
- (void)enableProximitySensor:(BOOL)value;
/// Client endpoint can use this method to enable/desiable faceX ,
- (void)startClientUsage:(NSDictionary<NSString *, id> * _Nonnull)request;
/// Stops reporting client usage statistics to the server using the provided request parameters.
- (void)stopClientUsage:(NSDictionary<NSString *, id> * _Nonnull)request;
/// Enables or disables Voice Activity Detection (VAD) for the local audio stream.
- (void)enableVAD:(BOOL)isenable;
/// Returns <code>true</code> if the room status is <code>.connected</code>; posts an error event and returns <code>false</code> otherwise.
- (BOOL)isRoomConnected SWIFT_WARN_UNUSED_RESULT;
@end

@class WKWebView;
@class WKNavigationAction;
@class WKNavigation;
@interface EnxRoom (SWIFT_EXTENSION(EnxRTCiOS)) <WKNavigationDelegate>
- (void)webView:(WKWebView * _Nonnull)webView decidePolicyForNavigationAction:(WKNavigationAction * _Nonnull)navigationAction decisionHandler:(void (^ _Nonnull)(WKNavigationActionPolicy))completionHandler;
- (void)webView:(WKWebView * _Nonnull)webView didStartProvisionalNavigation:(WKNavigation * _Null_unspecified)navigation;
- (void)webView:(WKWebView * _Nonnull)webView didFinishNavigation:(WKNavigation * _Null_unspecified)navigation;
- (void)webView:(WKWebView * _Nonnull)webView didFailNavigation:(WKNavigation * _Null_unspecified)navigation withError:(NSError * _Nonnull)error;
@end

@class NSDate;
/// Delegate protocol that receives all room lifecycle, media, messaging, and feature event callbacks from an <code>EnxRoom</code> instance.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS15EnxRoomDelegate_")
@protocol EnxRoomDelegate
/// Fired when signaling channel connected with Enx Room.
/// @param room Instance of the room where event happen.
/// @param roomMetadata has all information about connected room , Example as below
/// roomMetadata sample:
/// {
/// defaultVideoBW = 300;
/// iceServers = (
/// {
/// url = “stun:stun.l.google.com:19302”;
/// },
/// {
/// credential = secret;
/// url = “turn:xxx.xxx.xxx.xxx:443”;
/// username = me;
/// }
/// );
/// id = 591df649e29e562067143117;
/// maxAudioBW = 64;
/// maxVideoBW = 300;
/// streams =(
/// {
/// audio = 1;
/// id = 208339986973492030;
/// video = 1;
/// }
/// );
/// }
/// @Details This delegate method will notify to current user after room connected success ,who is trying to connect with available room. This method will give roomMetadata which has all details of connected room.
- (void)room:(EnxRoom * _Nullable)room didConnect:(NSDictionary<NSString *, id> * _Nullable)roomMetadata;
/// Fired when used will disconnect room by hem self or by modiatore
/// @param response has all information about disconnect room
/// @Details This delegate method will notify to current user after room disconnect success , Disconnect happen either by self or by modiatore or by room duration exrire.
/// Here “response” will carry information about disconnection of room.
- (void)didRoomDisconnect:(NSArray * _Nullable)response;
/// Fired each time there is an error with the room.
/// It doesn’t mean the room has been disconnected. For example you could receive
/// this message when one of the streams subscribed did fail for some reason.
/// @param room Instance of the room where event happen.
/// @param reason Text explaining the error. (Not always available)
/// @Details This delegate method will notify to the user , who try to connect with any confrence but its has failed due to any resion like- token not valid, room full, not a valid user to join etc..
/// Here reason has details about failure of room connect.
- (void)room:(EnxRoom * _Nullable)room didError:(NSArray * _Nullable)reason;
@optional
/// Fired to pass info related to any event if required.
/// @param room Instance of the room where event happen.
/// @param infoData Its will give a dictonary with details of events
/// @Details This delegate method will notify to the user , who try to consume any EnxRoom API or EnxStream API with details for the events
- (void)room:(EnxRoom * _Nullable)room didEventInfo:(NSDictionary<NSString *, id> * _Nullable)infoData;
/// Fired each time whenever user will do some action and its failed due to invalide action type or action state.
/// @param room Instance of the room where event happen.
/// @param reason Its will give an Array of dictonary with cause of failure with their error code.
/// @Details This delegate method will notify to the user , who try to consume any EnxRoom API or EnxStream API again and again with invalid sate, as sdk will maintain all event state. For example- User will do video mute and after successfully mute video or in progress to mute video, he is try agin to mute video.
- (void)room:(EnxRoom * _Nullable)room didEventError:(NSArray * _Nullable)reason;
@required
/// Event fired once a new stream has been added to the room.
/// It is up to you to subscribe that stream or not.
/// It is worth to notice that your published stream will not be notified
/// by this method, use EnxRoomDelegate:didPublishStream: instead.
/// @param room Instance of the room where event happen.
/// @param stream EnxStream object (not subscribed yet), that were just added
/// to the room.
- (void)room:(EnxRoom * _Nullable)room didAddedStream:(EnxStream * _Nullable)stream;
@optional
/// Fired when server sent the streamId of the subscribed stream.
/// @param room Instance of the room where event happen.
/// @param stream The subscribed Stream object.
/// @Details This room event will notify to the user, who has subscribed any stream after connected to room
- (void)room:(EnxRoom * _Nullable)room didSubscribeStream:(EnxStream * _Nullable)stream;
/// Fired when server has succesfully unsubscribed a stream.
/// @param room Instance of the room where event happen.
/// @param stream The unSubscribed Stream object.
/// @Details This room event will notify to the user, who has unsubscribed any stream after connected to room and has all ready subscribe that stream
- (void)room:(EnxRoom * _Nullable)room didUnSubscribeStream:(EnxStream * _Nullable)stream;
/// Fired when server sent the streamId of the published stream.
/// @param room Instance of the room where event happen.
/// @param stream EnxStream being published.
/// @Details This room event will notify to the user, who has published their owne stream after connected to room
- (void)room:(EnxRoom * _Nullable)room didPublishStream:(EnxStream * _Nullable)stream;
/// Fired when server ACK to unpublish the requested stream by EnxRoom:unpublish.
/// After this method is called the Room will close and nilify the publishing
/// client. You need to unreference the publishing stream from your side to let
/// the object be deallocated.
/// @param room Instance of the room where event happen.
/// @param stream The stream being unpublished.
/// @Details This room event will notify to the user, who has unpublished their owne stream after connected to room, and has all ready published their stream
- (void)room:(EnxRoom * _Nullable)room didUnpublishStream:(EnxStream * _Nullable)stream;
/// Fired each time the room changed his state.
/// @param room Instance of the room where event happen.
/// @param status EnxRoomStatus value.
/// @Details This delegate method will notify to the user with room current state or if state has changed.
- (void)room:(EnxRoom * _Nullable)room didChangeStatus:(enum EnxRoomStatus)status;
/// Fired to inform user once reconnect happen.
/// @param room Instance of the room where event happen.
/// @param reason Its will give a NSString with cause of reconnect
/// @Details This delegate method will notify to the user, with cause of reconnect, reconnect can happen if network connect got disconnect or ice connection has failed etc….
- (void)room:(EnxRoom * _Nullable)room didReconnect:(NSString * _Nullable)reason;
/// Fired when a network clunch receive.
/// @param room Instance of the room where event happen.
/// @param data network intruption alert info.
/// @details this delegate method will inform to user, if he/she has network clunch during call.
- (void)room:(EnxRoom * _Nullable)room didConnectionInterrupted:(NSArray * _Nullable)data;
/// Fired when a Network lost
/// @param room Instance of the room where event happen.
/// @param data network Time Out alert info.
/// @details this delegate method will call when network will not resume within given time out time.
- (void)room:(EnxRoom * _Nullable)room didConnectionLost:(NSArray * _Nullable)data;
/// Fired when a reconnect success .
/// @param room Instance of the room where event happen.
/// @param data Inform user for reconnect success.
/// @details this delegate method will get called when reconnect get successfully resume.
- (void)room:(EnxRoom * _Nullable)room didUserReconnectSuccess:(NSDictionary<NSString *, id> * _Nullable)data;
/// Fired when a data stream is received.
/// @param room Instance of the room where event happen.
/// @param stream The EnxStream received from.
/// @param data stream message received.
- (void)room:(EnxRoom * _Nullable)room didReceiveData:(NSArray * _Nullable)data fromStream:(EnxStream * _Nullable)stream;
/// Fired when message received in room
/// @param room Instance of the room where event happen.
/// @param data information of message.
/// @details this delegates methods get called, when any participent will exchanges chat message in same room.
- (void)room:(EnxRoom * _Nonnull)room didMessageReceived:(NSArray * _Nullable)data;
/// Fired when receive custom signalingmessage in room
/// @param room Instance of the room where event happen.
/// @param data information of custom signalling message.
/// @details This delegate method called to receive custom signaling event message at room Level.
- (void)room:(EnxRoom * _Nonnull)room didUserDataReceived:(NSArray * _Nullable)data;
/// Fired Acknowledgment for send data
/// @param room Instance of the room where event happen.
/// @param data information about send data
/// @details This is an acknowledgment delegate method for send data, when any of participent will send their data to other participent,
- (void)room:(EnxRoom * _Nullable)room didAcknowledgSendData:(NSArray * _Nullable)data;
/// Fired Acknowledgment for chat send
/// @param data information about send chat , it has updated request ID
/// @details This is an acknowledgment delegate method for send chat, when any of participent will send their data to other participent,
- (void)didACKSendMessage:(NSArray * _Nullable)data;
/// Fired Acknowledgment for chat delete
/// @param data information about send chat , it has updated request ID
/// @details This is an acknowledgment delegate method for  chat delete, when any of participent will send their data to other participent,
- (void)didACKDeleteMessage:(NSArray * _Nullable)data;
/// Fired when message  delete in room
/// @param data information about delete chat , it has updated request ID
/// @details This is an acknowledgment delegate method for  chat delete, when any of participent will send their data to other participent,
- (void)didMessageDelete:(NSArray * _Nullable)data;
/// Fired Acknowledgment for chat update
/// @param data information about send chat , it has updated request ID
/// @details This is an acknowledgment delegate method for  chat update, when any of participent will send their data to other participent,
- (void)didACKUpdateMessage:(NSArray * _Nullable)data;
/// Fired when message  update in room
/// @param data information about delete chat , it has updated request ID
/// @details This is an acknowledgment delegate method for  chat delete, when any of participent will send their data to other participent,
- (void)didMessageUpdate:(NSArray * _Nullable)data;
/// Fired when start file sharing
/// @param room Instance of the room where event happen.
/// @param data information file.
/// @details This delegate method called When any of the user in same room will start sharing file.
- (void)room:(EnxRoom * _Nonnull)room didFileUploadStarted:(NSArray * _Nullable)data;
/// Fired when user will initiate file sharing
/// @param room Instance of the room where event happen.
/// @param data information of  file.
/// @details This delegate method called When self user will start sharing file.
- (void)room:(EnxRoom * _Nonnull)room didInitFileUpload:(NSArray * _Nullable)data;
/// Fired when user will isuccessfully upload file
/// @param room Instance of the room where event happen.
/// @param data information of  file.
/// @details This delegate method called When any user will share file successfully and now File available to download for other participent.
- (void)room:(EnxRoom * _Nonnull)room didFileAvailable:(NSArray * _Nullable)data;
/// Fired when user will isuccessfully upload file
/// @param room Instance of the room where event happen.
/// @param data information of  file.
/// @details This delegate method called upload file is success.
- (void)room:(EnxRoom * _Nonnull)room didFileUploaded:(NSArray * _Nullable)data;
/// Fired when user will  upload file failed
/// @param room Instance of the room where event happen.
/// @param data information of  file.
/// @details This delegate method called upload file is failed.
- (void)room:(EnxRoom * _Nonnull)room didFileUploadFailed:(NSArray * _Nullable)data;
/// Fired when file download done
/// @param room Instance of the room where event happen.
/// @param data information of  file.
/// @details This delegate method called When download of file success.
- (void)room:(EnxRoom * _Nonnull)room didFileDownloaded:(NSString * _Nullable)data;
/// Fired when file download failed
/// @param room Instance of the room where event happen.
/// @param data information of  file.
/// @details This delegate method called When file download failed.
- (void)room:(EnxRoom * _Nonnull)room didFileDownloadFailed:(NSArray * _Nullable)data;
/// Fired when file download started
/// @param room Instance of the room where event happen.
/// @param data information of file.
/// @details This delegate method called When file download initiated.
- (void)room:(EnxRoom * _Nonnull)room didInitFileDownload:(NSArray * _Nullable)data;
/// Fired when file download Cancle
/// @param room Instance of the room where event happen.
/// @param data information of file.
/// @details This delegate method called When file download Cancel.
- (void)room:(EnxRoom * _Nonnull)room didFileDownloadCancelled:(NSArray * _Nullable)data;
/// Fired when file upload Cancle
/// @param room Instance of the room where event happen.
/// @param data information of file.
/// @details This delegate method called When file Upload Cancel.
- (void)room:(EnxRoom * _Nonnull)room didFileUploadCancelled:(NSArray * _Nullable)data;
/// Fired when a user did zoom for remote user stream
/// @param room Instance of the room where event happen.
/// @param data has the information of zoom coordinate
/// @Details This delegate method will notify to end user about zoom of their stream, for example- in room there are 4 participent like p1,p2,p3,p4 now p1 try to zoom p4 , so p4 will get a signaling notification and zoom their local scream.
- (void)room:(EnxRoom * _Nullable)room didStreamZoom:(NSDictionary<NSString *, id> * _Nullable)data;
/// Fired when stream attribute updated.
/// @param room Instance of the room where event happen.
/// @param stream The stream that updated his attributes.
/// @Details Look EnxStream:streamAttributes to know which.
- (void)room:(EnxRoom * _Nullable)room didUpdateAttributesOfStream:(EnxStream * _Nullable)stream;
/// Fired when user will uplaod their sdk logs to server
/// @param data has detail informtion of upload logs
/// @Details This delegate method will inform to self user , who is uploading their sdk logs to server.
- (void)didLogUpload:(NSArray * _Nullable)data;
/// Here, Data is result form EnxServer on requestFloor event.
/// Response:
/// {
/// “msg” : “Floor Request Received”,
/// “result” : 1701
/// }
/// Fired when any participent  will will request for floor access@
/// @param Data has detail informtion about floor
/// @Details- This delegate method for participent who requested for floor access.
- (void)didFloorRequested:(NSArray * _Nullable)Data;
/// This ACK method for Participent , When he/she will cancle their request floor
/// @param Data has detail informtion about floor
/// @Details This ACK method for Participent only, When he/she will cancle their request floor
/// Response will be
/// {
/// msg = Success;
/// request =     {
/// id = processFloorRequest;
/// params =         {
/// action = cancelFloor;
/// clientId = “ClentID”;
/// };
/// };
/// result = 0;
/// }
- (void)didFloorCancelled:(NSArray * _Nullable)Data;
/// Fired when any participent will finished their floor access.
/// Response will be
/// {
/// msg = Success;
/// request =     {
/// id = processFloorRequest;
/// params =         {
/// action = finishFloor;
/// clientId = “ClentID”;
/// };
/// };
/// result = 0;
/// }
/// @param Data has detail informtion about floor
/// @Details This ACK method for Participent , When he/she will finished their request floor
/// after request floor accepted by any modiatore
- (void)didFloorFinished:(NSArray * _Nullable)Data;
/// This delegate invoke when Moderator accepts the floor request.
/// Participant Delegate:
/// Here, Data is result form EnxServer on receiving grantFloor event.
/// Response:
/// {
/// “msg” : “Floor Request Granted”
/// }
/// @param Data has detail informtion about floor
/// @Details This delegate invoke when Moderator accepts the floor request.
- (void)didGrantedFloorRequest:(NSArray * _Nullable)Data;
/// This delegate methos will invoke , when moderator will diny any participent floor access request
/// Here, Data is result form EnxServer on receiving denyFloor event.
/// Participant Delegate: Denied:
/// Response:
/// {
/// “msg” : “Floor Request Denied”
/// }
- (void)didDeniedFloorRequest:(NSArray * _Nullable)Data;
/// This delegate methos will invoke , when moderator will release/finished any participent  whover floor request has approved.
/// Here, Data is result form EnxServer on releaseFloor event.
/// Participant Delegate: Releases:
/// Here, Data is result form EnxServer on receiving releaseFloor event.
/// Response:
/// {
/// “msg” : “Floor Released”
/// }
- (void)didReleasedFloorRequest:(NSArray * _Nullable)Data;
/// Fired when moderator will cancle any floor access , requested by participent
/// @param Data has detail informtion about moderator , who has cancle the floor access.
/// @Details This delegate method will notify to all available modiatore, Once any participent has cancled there floor request
- (void)didCancelledFloorRequest:(NSArray * _Nullable)Data;
/// Fired when moderator will finished  any floor access , requested by participent
/// @param Data has detail informtion about moderator , who has finished the floor access.
/// @Details This delegate method will notify to all available modiatore, Once any participent has finished there floor request
- (void)didFinishedFloorRequest:(NSArray * _Nullable)Data;
/// There would be listener for participant and moderator when participant request floor. For this delegates are:
/// Moderator Delegates:
/// Here, Data is result form EnxServer on receiving requestFloor event.
/// Response:
/// {
/// “clientId” : “720aa92f-193f-4e9e-a62b-48b72cd196a8”,
/// “name” : “iOS”
/// }
- (void)didFloorRequestReceived:(NSArray * _Nullable)Data;
/// Here, Data is result form EnxServer on grantFloor,releaseFloor and denyFloor event.
/// Moderator Delegate:
/// Response:
/// Here, Data is result form EnxServer on grantFloor event.
/// {
/// “msg” : “Floor Granted”,
/// “result” : 1708
/// }
/// Here, Data is result form EnxServer on releaseFloor event.
/// {
/// “msg”: “Floor Released”,
/// “result”: “1712”
/// }
/// Here, Data is result form EnxServer on denyFloor event.
/// {
/// “msg”: “Floor Denied”,
/// “result”: “1709”
/// }
- (void)didProcessFloorRequested:(NSArray * _Nullable)Data;
- (void)didACKInviteToFloorRequested:(NSArray * _Nullable)Data;
- (void)didInviteToFloorRequested:(NSArray * _Nullable)Data;
- (void)didInvitedForFloorAccess:(NSArray * _Nullable)Data;
- (void)didCanceledFloorInvite:(NSArray * _Nullable)Data;
- (void)didRejectedInviteFloor:(NSArray * _Nullable)Data;
- (void)didAcceptedFloorInvite:(NSArray * _Nullable)Data;
/// Moderator get raish hand and approve hand list
/// @param room Instance of the room where event happen.<br/>
/// @param data has contain current state of room.
/// @Details This methods will inform to all user in confrence about current state of floor request
- (void)room:(EnxRoom * _Nullable)room chairControlStates:(NSDictionary<NSString *, id> * _Nullable)data;
/// Fired when any modiatore in confrence will do room mute
/// @param Data has detail informtion about room mute
/// @Details This delegate method for all modiatores in room including owner of hard mute room will got notify
/// Moderator Delegates
/// There would be listener for moderator when hardmute used by moderator. For this delegates are:
- (void)didhardMute:(NSArray * _Nullable)Data;
/// Fired when any modiatore in confrence will do room unmute
/// @param Data has detail informtion about room unmute
/// @Details This delegate method for all modiatores in room including owner of hard unmute room will got notify
/// Moderator Delegates
/// There would be listener for moderator when hardunmute used by moderator. For this delegates are:
- (void)didhardUnMute:(NSArray * _Nullable)Data;
/// Fired when any modiatore in confrence will do room mute
/// @param Data has detail informtion about room mute
/// @Details This delegate method for all participent in room once any moderator will do room mute in same confrence
/// Paricipant Delegates
/// There would be listener for paricipant when hardunmute used by moderator. For this delegates are:
- (void)didHardMuteRecived:(NSArray * _Nullable)Data;
/// Fired when any modiatore in confrence will do room unmute
/// @param Data has detail informtion about room unmute
/// @Details This delegate method for all participent in room once any moderator will do room unmute in same confrence
/// Paricipant Delegates
/// There would be listener for paricipant when hardunmute used by moderator. For this delegates are:
- (void)didHardunMuteRecived:(NSArray * _Nullable)Data;
/// Fired when any modiatore in confrence will do mute to any participent/other modiatore  audio in same room
/// @param Data has detail informtion about room mute
/// @Details This ack delegate method for the modiatore in room who did user hardmute audio
/// There would be listener for owner of the event
/// Moderator Delegates
- (void)didAckHardMuteUserAudio:(NSArray * _Nullable)data;
/// Fired when any modiatore in confrence will do unmute to any participent/other modiatore  audio in same room
/// @param Data has detail informtion about room mute
/// @Details This ack delegate method for the modiatore in room who did user hardunmute audio
/// There would be listener for owner of the event
/// Moderator Delegates
- (void)didAckHardunMuteUserAudio:(NSArray * _Nullable)data;
/// Fired when any modiatore in confrence will do mute to any participent/other modiatore video in same room
/// @param Data has detail informtion about room mute
/// @Details :- This ack delegate method for the modiatore in room who did user hardmute video
/// There would be listener for owner of the event
/// Moderator Delegates
- (void)didAckHardMuteUserVideo:(NSArray * _Nullable)data;
/// Fired when any modiatore in confrence will do unmute to any participent/other modiatore video in same room
/// @param Data has detail informtion about room mute
/// @Details  This ack delegate method for the modiatore in room who did user hardunmute video
/// There would be listener for owner of the event
- (void)didAckHardUnMuteUserVideo:(NSArray * _Nullable)data;
/// Fired when any modiatore in confrence will do unmute to any participent/other video modiatore in same room.
/// @param Data has detail informtion about room mute
/// @Details This delegate method for all participent in room once any moderator will do unmute to any participent/moderator in same room
/// There would be listener for paricipant when hardmute used by moderator. For this delegates are:
/// Paricipant Delegates
- (void)didHardUnMuteSingleUser:(NSArray * _Nullable)data;
@required
/// This API is designed to return a JSON Structure containing the user information who connected  to the Room.
/// @param room Instance of the room where event happen.
/// @param Data has full information of participent who has join in same confrence.
/// @Details  This delegate method will inform to all partipient/moderator in same confrence with details information about the user who has just join the room.
- (void)room:(EnxRoom * _Nullable)room userDidJoined:(NSArray * _Nullable)Data;
/// This API is designed to return a JSON Structure containing the user disconnected to the Room.
/// This delegate call when any user leave the room.
/// @param room Instance of the room where event happen.
/// @param Data has full information of participent who has disconencted from same confrence.
/// @Details This delegate method will inform to all partipient/moderator in same confrence with details information about the user who has just disconnected from confrence.
- (void)room:(EnxRoom * _Nullable)room userDidDisconnected:(NSArray * _Nullable)Data;
@optional
/// Fired when server sent the recordingId of a stream being published and
/// recorded.
/// @param room Instance of the room where event happen.
/// @param stream String representing the Id of the stream being recorded.
/// @param recordingId String representing the Id of the recording of the stream.
/// @param recordingDate moment when the server started to record the stream.
- (void)room:(EnxRoom * _Nullable)room didStartRecordingStream:(EnxStream * _Nullable)stream withRecordingId:(NSString * _Nullable)recordingId recordingDate:(NSDate * _Nullable)data;
/// Fired when recording start successful
/// @param response Instance of the room where event happen.
/// @Details This delegate method will notify to all end users, once room recording has started successfully.
- (void)startRecordingEvent:(NSArray * _Nullable)response;
/// Fired when recording stop successful
/// @param response Instance of the room where event happen.
/// @Details This delegate method will notify to all end users, once room recording has stopped successfully.
- (void)stopRecordingEvent:(NSArray * _Nullable)response;
/// To start Recording Participant delegate
/// Paricipant delegate
/// @param Data has contain information about recording.
/// @Details All particpents/Moderator in room will receive this delegate method once recoding has started in same confrence
- (void)roomRecordOn:(NSArray * _Nullable)Data;
/// To stop Recording Participant delegate
/// Paricipant delegate
/// @param Data has contain information about recording.
/// @Details All particpents/Moderator in room will receive this delegate method once recoding has stopped in same confrence
- (void)roomRecordOff:(NSArray * _Nullable)Data;
/// A Participant get of active talker list
/// @param room Instance of the room where event happen.
/// @param Data will contain list of EnxStream.
/// @Details once any participent successfully completed subscription of all avaialble stream in same confrence will receive available active talker list.
/// By default its will give list of EnxStream, if user want complete view of active talker in that case he/she will pass a parameter “activeviews” = @“view” in “roominfo” duringb join room.
- (void)room:(EnxRoom * _Nullable)room didActiveTalkerList:(NSArray<EnxStream *> * _Nullable)Data;
/// A Participant get of active talker list
/// @param room Instance of the room where event happen.
/// @param view will contain full view of active talker list
/// @Details once any participent successfully completed subscription of all avaialble stream in same confrence will receive available active talker list.
/// By default its will give list of EnxStream, if user want complete view of active talker in that case he/she will pass a parameter “activeviews” = @“view” in “roominfo” duringb join room.
- (void)room:(EnxRoom * _Nullable)room didActiveTalkerView:(UIView * _Nullable)view;
/// This api will notify after join is any active talker availabe or during call if all talkers disconnect
- (void)didAvailableWithActiveUser:(NSInteger)count;
/// A Participant get of max number of talker count .
/// @param room Instance of the room where event happen.
/// @param Data will contain information about max possible talker in same confrence.
/// @details this delegate method will give information about max  possible active talker in same confrence. so that user can change any number of active talker which is less than possible active talkers in room. User can request to know max possible AT in room at any time after join room.
- (void)room:(EnxRoom * _Nullable)room didGetMaxTalkers:(NSArray * _Nullable)Data;
/// A Participant get of number of talker count .
/// @param room Instance of the room where event happen.
/// @param Data will contain number of current active talker in room.
/// @Details with the help of this delegate methoder, use can check current number of active taker in same confrence.
- (void)room:(EnxRoom * _Nullable)room didGetTalkerCount:(NSArray * _Nullable)Data;
/// A Participant set of number of talker count .
/// @param room Instance of the room where event happen.
/// @param Data will contain information about set active talker
/// @details - this delegate method will fired once user will request to set active talker in same confrence.
- (void)room:(EnxRoom * _Nullable)room didSetTalkerCount:(NSArray * _Nullable)Data;
/// A Participant listens to this delegate to know about a screen shared started by a user.
/// @param room Instance of the room where event happen.
/// @param stream has list of required information to display screen share stream
/// @details all participants (Except owner of screen share) in same confrence will get this delegate method, whenever screen share has stared by any participent in same confrence.
- (void)room:(EnxRoom * _Nullable)room didScreenShareStarted:(EnxStream * _Nullable)stream;
/// A Participant listens to this delegate to know about a screen shared by a user has stopped.
/// @param room Instance of the room where event happen.
/// @param stream has list of required information to remove screen share stream
/// @details all participants (Except owner of screen share) in same confrence will get this delegate method, whenever screen share has stopped by any participent in same confrence.
- (void)room:(EnxRoom * _Nullable)room didScreenShareStopped:(EnxStream * _Nullable)stream;
/// A user will receive this ack delegate, when he/she will start screen share.
/// @param room Instance of the room where event happen.
/// @param Data ACK list of start Annotation
/// @details This delegate method will receive the owner of screen share , means who has started screen share.
- (void)room:(EnxRoom * _Nullable)room didStartScreenShareACK:(NSArray * _Nullable)data;
/// A user will receive this ack delegate, when he/she will stop screen share.
/// @param room Instance of the room where event happen.
/// @param  Data ACK list of Stop Annotation
/// @details This delegate method will receive the owner of screen share , means who has stopped screen share.
- (void)room:(EnxRoom * _Nullable)room didStoppedScreenShareACK:(NSArray * _Nullable)data;
/// Owner of the method will received this call back
/// @param room Instance of the room where event happen.
/// @param  Data ACK list of Stop screen share
/// @details This delegate method will Acknowledge  to the owner of screen share , means who has stopped screen share.
- (void)room:(EnxRoom * _Nullable)room didExitScreenShareACK:(NSArray * _Nullable)data;
/// Owner of the method will received this call back
/// @param room Instance of the room where event happen.
/// @param  data ACK list of Stop share
/// @details This delegate method will Acknowledge  to the owner of API , means who has requested for stop Share.
- (void)room:(EnxRoom * _Nullable)room didStopAllSharingACK:(NSArray * _Nullable)data;
/// Owner of the method will received this call back
/// @param room Instance of the room where event happen.
/// @param  data ACK list of override screen  share
/// @details This delegate method will Acknowledge  to the owner of API , means who has requested for stop Share.
- (void)room:(EnxRoom * _Nullable)room didOverrideScreenShareACK:(NSArray * _Nullable)data;
/// A Participant listens to this delegate to know about a Canvas started by a user.
/// @param room Instance of the room where event happen.
/// @param stream has  list of required information to display canvas stream
/// @details all participants (Except owner of start canvas) in same confrence will get this delegate method, whenever canvashas  stared by any participent in same confrence.
- (void)room:(EnxRoom * _Nullable)room didCanvasStarted:(EnxStream * _Nullable)stream;
/// A Participant listens to this delegate to know about that Canvas  has stopped by user.
/// @param room Instance of the room where event happen.
/// @param stream list of required information to remove canvas
/// @details all participants (Except owner of stop canvas) in same confrence will get this delegate method, whenever canvas has stopped by any participent in same confrence.
- (void)room:(EnxRoom * _Nullable)room didCanvasStopped:(EnxStream * _Nullable)stream;
/// Canvas Start/Stop Delegate for Self User
/// @param room Instance of the room where event happen.
/// @param Data ACK list of start canvas
/// @details -  This delegate method will receive the owner of strart canvas , means who has started Canvas only receive this delegate method.
- (void)room:(EnxRoom * _Nullable)room didStartCanvasACK:(NSArray * _Nullable)data;
/// A Participant listens to this delegate to know about that Canvas  has stopped by user.
/// @param room Instance of the room where event happen.
/// @param  Data ACK list of Stop Canvas
/// @details -  This delegate method will receive the owner of stopped canvas , means who has stopped Canvas, only receive this delegate method.
- (void)room:(EnxRoom * _Nullable)room didStoppedCanvasACK:(NSArray * _Nullable)data;
/// A Participant listens to this delegate to know about a Anotation started by a user.
/// @param room Instance of the room where event happen.
/// @param stream EnxStream of Annotation
/// @details all participants (Except owner of start annotation) in same confrence will get this delegate method, whenever Annotation has started by any participent in same confrence.
- (void)room:(EnxRoom * _Nullable)room didAnnotationStarted:(EnxStream * _Nullable)stream;
/// A Participant listens to this delegate to know about that Annotation  has stopped by user.
/// @param room Instance of the room where event happen.
/// @param stream EnxStream of Annotation
/// @details all participants (Except owner of stop annotation) in same confrence will get this delegate method, whenever Annotation has stopped by any participent in same confrence.
- (void)room:(EnxRoom * _Nullable)room didAnnotationStopped:(EnxStream * _Nullable)stream;
/// A Participant listens to this delegate to know about a Anotation started by a user.
/// @param room Instance of the room where event happen.
/// @param Data ACK list of start Annotation
/// @details -  This delegate method will receive the owner of strart annotation , means who has started annotation only receive this delegate method.
- (void)room:(EnxRoom * _Nullable)room didStartAnnotationACK:(NSArray * _Nullable)Data;
/// A Participant listens to this delegate to know about that Annotation  has stopped by user.
/// @param room Instance of the room where event happen.
/// @param  Data ACK list of Stop Annotation
/// @details -  This delegate method will receive the owner of stopped annotation , means who has stopped annotation, only receive this delegate method.
- (void)room:(EnxRoom * _Nullable)room didStoppedAnnotationACK:(NSArray * _Nullable)Data;
/// Fired when a bandWidth alert received from server.
/// @param room Instance of the room where event happen.
/// @param data bandWidthAlert info on a stream.
/// @details this delegate method will inform to all use in confrence, whenever any bandwidth update hapen by server in same room.
- (void)room:(EnxRoom * _Nullable)room didBandWidthUpdated:(NSArray * _Nullable)data;
/// Fired when a canvas stream state change due to bandwidth change.
/// @param room Instance of the room where event happen.
/// @param data CanvasStateEvent info on a stream.
- (void)room:(EnxRoom * _Nullable)room didCanvasStreamEvent:(NSArray * _Nullable)data;
/// Fired when a share stream state change due to bandwidth change.
/// @param room Instance of the room where event happen.
/// @param data ShareStateEvent info on a stream.
/// @details this delegate method will inform to the current user , share screen state changes due to any cause like low bandwidth.
- (void)room:(EnxRoom * _Nullable)room didShareStreamEvent:(NSArray * _Nullable)data;
/// This delegate for response on setting video quality of remote streams.
/// @param room Instance of the room where event happen.
/// @param data has details about remote stream video resolution information.
/// @details this delegate method will update about remote stream video quality.
- (void)room:(EnxRoom * _Nullable)room didSetVideoQuality:(NSArray * _Nullable)data;
/// Audio media changed.
/// @param updates carry information about current audio media
/// @details This delegate Method Will Notify app user for any Audio media changes happen recentally(Like :- New device connected/Doisconnected).
- (void)didNotifyDeviceUpdate:(NSString * _Nonnull)updates;
- (void)didReceiveStats:(NSArray * _Nullable)statsData;
/// Fired when a user enable/desable stats
/// @param subUnSubResponse has all stats information.
/// @details this delegate method will get called when request for subscribe/unsubscribe stats in room
- (void)didAcknowledgeStats:(NSArray * _Nullable)subUnSubResponse;
/// Fired for ACK advance option
/// @param room Instance of the room where event happen.
/// @param data ACK  information of advance options.
/// @details This delegate called for advance options updates.
- (void)room:(EnxRoom * _Nullable)room didAcknowledgementAdvanceOption:(NSDictionary<NSString *, id> * _Nullable)data;
/// Fired for battery update
/// @param room Instance of the room where event happen.
/// @param data information of device batter energy.
/// @details This delegate called once user will set advance option and after that better energy lable getting low.
- (void)room:(EnxRoom * _Nullable)room didBatteryUpdates:(NSDictionary<NSString *, id> * _Nullable)data;
/// Fired for resolution update
/// @param room Instance of the room where event happen.
/// @param data information of device stream resolution update.
/// @details This delegate called once user will set advance option and request to know about aspect retion update during call.
- (void)room:(EnxRoom * _Nullable)room didAspectRatioUpdates:(NSDictionary<NSString *, id> * _Nullable)data;
/// Fired for video resolution update
/// @param room Instance of the room where event happen.
/// @param data information of device stream video resolution update.
/// @details This delegate called once user will set advance option and request to know about video resolution update during call.
- (void)room:(EnxRoom * _Nullable)room didVideoResolutionUpdates:(NSArray * _Nullable)data;
/// Fired for advance opt update
/// @param room Instance of the room where event happen.
/// @param data information of advanceoption update.
/// @details This delegate called once user will set advance option and request to know about advance option update during call.
- (void)room:(EnxRoom * _Nullable)room didGetAdvanceOptions:(NSArray * _Nullable)data;
/// Fired for advance opt update of Privacy Mode
/// @param room Instance of the room where event happen.
/// @param data information of advanceoption update.
/// @details This delegate mothed notify to all the user, once Moderator will set privacy mode advance option l.
- (void)room:(EnxRoom * _Nullable)room didPrivacyModeUpDated:(NSArray * _Nullable)data;
/// Fired for confrence duration update
/// @param room Instance of the room where event happen.
/// @param data information about confrence duration
/// @details This delegate called for all participent in same confrence, 5mint before confrence duration.
- (void)room:(EnxRoom * _Nullable)room didConferenceRemainingDuration:(NSArray * _Nullable)data;
/// Fired for confrence duration extended
/// @param room Instance of the room where event happen.
/// @param data information about confrence duration extended
/// @details This delegate called for all participent in same confrence, once any of moderatore has exted the confrence duration.
- (void)room:(EnxRoom * _Nullable)room didConferencessExtended:(NSArray * _Nullable)data;
/// Fired when switch user role happen
/// @param room Instance of the room where event happen.
/// @param data information about user role when switched
/// @details This delegate called, when any moderatore has switched their role or hand over their role to any of the participent in same room.
- (void)room:(EnxRoom * _Nullable)room didSwitchUserRole:(NSArray * _Nullable)data;
/// Fired when current role changed
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate called, when any moderatore has switched their role or hand over their role to any of the participent in same room.
- (void)room:(EnxRoom * _Nullable)room didUserRoleChanged:(NSArray * _Nullable)data;
/// Fired  to Event Acknowledge ,when any participant/audiance request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to the owner of the requesty  in the room , when any participant/audioan  has requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didAckUserRoleChangeRequest:(NSArray * _Nullable)data;
/// Fired  to Event Acknowledge ,when any participant/audiance cancel request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to the owner of the requesty  in the room , when any participant/audioan  has cancel there requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didAckUserRoleChangeCanceRequest:(NSArray * _Nullable)data;
/// Fired when any participant/audiance request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to all moderators in the room , when any participant/audioan  has requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didUserRoleChangeRequest:(NSArray * _Nullable)data;
/// Fired when any participant/audiance cancle request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to all moderators in the room , when any participant/audioan  has been cancel there requesat for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didUserRoleChangeCancel:(NSArray * _Nullable)data;
/// Fired  to Event Acknowledge ,when any Moderator will accept request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to the owner of the requesty  in the room , when any moderator has accept the  requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didAckAcceptUserRoleChange:(NSArray * _Nullable)data;
/// Fired  to Event Acknowledge ,when any Moderator will deny request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to the owner of the requesty  in the room , when any moderator has deny the  requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didAckDenyUserRoleChange:(NSArray * _Nullable)data;
/// Fired  to Event to requested participants,viewers, audience  ,when any Moderator will accept the request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to the requested participants,viewers, audience  in the room , when any moderator has accept the  requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didUserRoleChangeAccepted:(NSArray * _Nullable)data;
/// Fired  to Event to requested participants,viewers, audience  ,when any Moderator will deny the request for change role
/// @param room Instance of the room where event happen.
/// @param data information about user role
/// @details This delegate notify to the requested participants,viewers, audience  in the room , when any moderator has deny the  requesated for switched their role  in same room.
- (void)room:(EnxRoom * _Nullable)room didUserRoleChangeDenied:(NSArray * _Nullable)data;
/// This is an acknolagement for switch room
/// @param room Instance of the room where event happen.
/// @param data Acknowldgement details.
/// @details this is an acknowladgement owner of the method  .
- (void)room:(EnxRoom * _Nullable)channel didAckSwitchedRoom:(NSArray * _Nullable)data;
/// This is  notification  for switch room
/// @param room Instance of the room where event happen.
/// @param data details of the new room details.
/// @details this is notification for all participants or moderator   .
- (void)room:(EnxRoom * _Nullable)channel didRoomModeSwitched:(NSArray * _Nullable)data;
/// Fired when outbond call initiated
/// @param room Instance of the room where event happen.
/// @param data information about outbond call
/// @details This delegate method will called, when any of user will initiate for botbond call in same room.
- (void)room:(EnxRoom * _Nullable)room didOutBoundCallInitiated:(NSArray * _Nullable)data;
/// Fired when outbond call state changed
/// @param room Instance of the room where event happen.
/// @param state information about outbond call state
/// @details This delegate method will called, when any of user will initiate for botbond call and call state has changed.
- (void)room:(EnxRoom * _Nullable)room didDialStateEvents:(enum EnxOutBoundCallState)state;
- (void)didDialStateEvents:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)channel didOutBoundCallCancel:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)channel didOutBoundCallSendDtmf:(NSArray * _Nullable)data;
/// Fired when outbond call started
/// @param room Instance of the room where event happen.
/// @param dtmfCollected information about DTMF number
/// @details This delegate method will called, when any of user will initiate for outbound call and end user will press any DTMF number
- (void)room:(EnxRoom * _Nullable)room didDTMFCollected:(NSString * _Nullable)data;
/// Fired when locked room called
/// @param room Instance of the room where event happen.
/// @param data information about lookroom event
/// @details this is an acklodgment method for lockroom, whenever any moderatore will call lock room method.
- (void)room:(EnxRoom * _Nullable)room didAckLockRoom:(NSArray * _Nullable)data;
/// Fired when unlocked room called
/// @param room Instance of the room where event happen.
/// @param data information about unlookroom event
/// @details this is an acklodgment method for unlockroom, whenever any moderatore will call unlock room method.
- (void)room:(EnxRoom * _Nullable)room didAckUnlockRoom:(NSArray * _Nullable)data;
/// Fired when room locked
/// @param room Instance of the room where event happen.
/// @param data information about lookroom event
/// @details this delegate method will call, when moderatore will lock the room, other participent will receive this method.
- (void)room:(EnxRoom * _Nullable)room didLockRoom:(NSArray * _Nullable)data;
/// Fired when room unlocked
/// @param room Instance of the room where event happen.
/// @param data information about unlookroom event
/// @details this delegate method will call, when moderatore will unlock the room, other participent will receive this method.
- (void)room:(EnxRoom * _Nullable)room didUnlockRoom:(NSArray * _Nullable)data;
/// Fired when drop user called
/// @param room Instance of the room where event happen.
/// @param data information about drop user event
/// @details this is an acklodgment method for dropuser, Moderatore can drop any user at any time.
- (void)room:(EnxRoom * _Nullable)room didAckDropUser:(NSArray * _Nullable)data;
/// Fired when destroy room called
/// @param room Instance of the room where event happen.
/// @param data information about destroy room event
/// @details this is an acklodgment method for destroy room, Moderatore can destroy room  at any time.
- (void)room:(EnxRoom * _Nullable)room didAckDestroy:(NSArray * _Nullable)data;
/// Fired when start streaning event called
/// @param room Instance of the room where event happen.
/// @param data information about streaming  event
/// @details this is an acklodgment method for streaming in room, Moderatore can start streaming at any time in confrence.
- (void)room:(EnxRoom * _Nullable)room didAckStartStreaming:(NSArray * _Nullable)data;
/// Fired when stop streaning event called
/// @param room Instance of the room where event happen.
/// @param data information about streaming  event
/// @details this is an acklodgment method for streaming in room, Moderatore can stop streaming at any time in confrence.
- (void)room:(EnxRoom * _Nullable)room didAckStopStreaming:(NSArray * _Nullable)data;
/// Fired when  streaning started in room
/// @param room Instance of the room where event happen.
/// @param data information about streaming  event
/// @details This delegate method will called, when any modiatore will started streaming in room.
- (void)room:(EnxRoom * _Nullable)room didStreamingStarted:(NSArray * _Nullable)data;
/// Fired when  streaning Stopped in room
/// @param room Instance of the room where event happen.
/// @param data information about streaming  event
/// @details This delegate method will called, when any modiatore will Stopped streaming in room.
- (void)room:(EnxRoom * _Nullable)room didStreamingStopped:(NSArray * _Nullable)data;
/// Fired when  streaning failed in room
/// @param room Instance of the room where event happen.
/// @param data information about streaming  event
/// @details This delegate method will called, when any modiatore will failed streaming in room.
- (void)room:(EnxRoom * _Nullable)room didStreamingFailed:(NSArray * _Nullable)data;
/// Fired when  streaning update in room
/// @param room Instance of the room where event happen.
/// @param data information about streaming  event
/// @details This delegate method will called, when any modiatore will update streaming in room.
- (void)room:(EnxRoom * _Nullable)room didStreamingUpdated:(NSArray * _Nullable)data;
/// Fired when create breakout room event called
/// @param room Instance of the room where event happen.
/// @param data information about create breakout room  event
/// @details this is an acklodgment method for create breakout  room, Moderatore/Participent can create a breakout room at any time in running confrence.
- (void)room:(EnxRoom * _Nullable)room didAckCreateBreakOutRoom:(NSArray * _Nullable)data;
/// Fired when create and nvite breakout room event called
/// @param room Instance of the room where event happen.
/// @param data information about createand invite breakout room  event
/// @details this is an acklodgment method for create room, Moderatore/Participent can create and invite a breakout room at any time in running confrence.
- (void)room:(EnxRoom * _Nullable)room didAckCreateAndInviteBreakOutRoom:(NSArray * _Nullable)data;
/// Fired when join breakout room failed
/// @param room Instance of the room where event happen.
/// @param data information about failure to join breakoutroom
/// @details this delegate method will called when any user will try to join breakout room and failed.
- (void)room:(EnxRoom * _Nullable)room didFailedJoinBreakOutRoom:(NSArray * _Nullable)data;
/// Fired when  invite breakout room event called
/// @param room Instance of the room where event happen.
/// @param data information about  invite breakout room  event
/// @details this is an acklodgment method for invite brealout room, Moderatore/Participent can intite to any user to join any breakout room.
- (void)room:(EnxRoom * _Nullable)room didAckInviteBreakOutRoom:(NSArray * _Nullable)data;
/// Fired when   breakout room connected
/// @param room Instance of the room where event happen.
/// @param roomMetadata information of room after join breakout room
/// @details this delegate method will called, when user joined breakout room successfully.
- (void)room:(EnxRoom * _Nullable)room didConnectedBreakoutRoom:(NSArray * _Nullable)data;
/// Fired when user disconnect from breakout room
/// @param room Instance of the room where event happen.
/// @param respons information of breakout room disconnection
/// @details This delegate method will called, when user will disconnected from breakout room either self or due to any cause.
- (void)room:(EnxRoom * _Nullable)room didDisconnectedBreakoutRoom:(NSArray * _Nullable)data;
/// Fired when user joined from breakout room
/// @param room Instance of the room where event happen.
/// @param data information of user who has joined breakout room.
/// @details This delegate method will called, when user will joined any breakout room.
- (void)room:(EnxRoom * _Nullable)room didUserJoinedBreakoutRoom:(NSArray * _Nullable)data;
/// Fired when  joined from breakout room
/// @param room Instance of the room where event happen.
/// @param data information of user for join breakout room
/// @details This delegate method will called, when user will joined any breakout room.
- (void)room:(EnxRoom * _Nullable)room didInvitationForBreakoutRoom:(NSArray * _Nullable)data;
/// Event fired when user will disconnect from breakout room
/// @param room Instance of the room where event happen.
/// @param data details user , which got disconnected from breakout room.
/// @details this is the Room on listrener method, Which will inform to owner of breakout room that all user has disconencted and room get destroied.
- (void)room:(EnxRoom * _Nullable)room didDestroyedBreakoutRoom:(NSArray * _Nullable)data;
/// Event fired when user will disconnect from breakout room
/// @param room Instance of the room where event happen.
/// @param data details user , which got disconnected from breakout room.
/// @details this is the socket on listrener method for all use in parents room will get notify about user disconnected from breakout room resently.
- (void)room:(EnxRoom * _Nullable)room didUserDisconnectedFromBreakoutRoom:(NSArray * _Nullable)data;
/// Event fired when invitee user will reject breakout room invitation
/// @param room Instance of the room where event happen.
/// @param data details user , acknoledgmet details for reject breakout room invitation
/// @details this is the socket emit acknowledgment listrener method for the user who has rejected to join breakout room.
- (void)room:(EnxRoom * _Nullable)room didAckRejectBreakoutRoom:(NSArray * _Nullable)data;
/// Event fired for all available moderator in room
/// @param room Instance of the room where event happen.
/// @param data details of breakout room ,
/// @details this is the socket on room managment listrener method for all moderator , once breakout room created.
- (void)room:(EnxRoom * _Nullable)room didBreakoutRoomCreated:(NSArray * _Nullable)data;
/// Event fired for all available moderator in room
/// @param room Instance of the room where event happen.
/// @param data details of user who has intivet in breakout room
/// @details this is the socket on room managment listrener method, will be sent to all the moderators about a participant being invited to breakout room
- (void)room:(EnxRoom * _Nullable)room didBreakoutRoomInvited:(NSArray * _Nullable)data;
/// Event fired for all available moderator in room
/// @param room Instance of the room where event happen.
/// @param data details user , How has rejected for breakout room invitation.
/// @details this is the socket on room managment listrener method, event will be sent to the invitee and all the moderator if the breakout invite is rejected. The message will contain the room_id and rejected client id.
- (void)room:(EnxRoom * _Nullable)room didBreakoutRoomInviteRejected:(NSArray * _Nullable)data;
/// Event fired when participent get force join to breakout room
/// @param data details user , Who has invited for force join
/// @details this notification for the participent user , whoi going to ve force joining in a breakout room.
- (void)didBreakoutroomjoining:(NSArray * _Nullable)data;
/// Fired when user pause room
/// @param room Instance of the room where event happen.
/// @param data information of room pause event
/// @details this is an ackniwledgment method for pause room, Any participent in room can pause the main room after join breakout room.
- (void)room:(EnxRoom * _Nullable)room didAckPause:(NSArray * _Nullable)data;
/// Fired when user resume room
/// @param room Instance of the room where event happen.
/// @param data information of room resume event
/// @details this is an ackniwledgment method for resume room, Any participent in room can resume a paused main room after join/disconnect breakout room.
- (void)room:(EnxRoom * _Nullable)room didAckResume:(NSArray * _Nullable)data;
/// Fired when user pause hem self
/// @param room Instance of the room where event happen.
/// @param data information of room pause information
/// @details this is an callback  method for remote user available in room, once any of the user will call pause room apis
- (void)room:(EnxRoom * _Nullable)room didUserPaused:(NSArray * _Nullable)data;
/// Fired when user resume hem self
/// @param room Instance of the room where event happen.
/// @param data information of room resume event
/// @details this is an callback  method for remote user available in room, once any of the user will call resume room apis
- (void)room:(EnxRoom * _Nullable)room didUserResumed:(NSArray * _Nullable)data;
/// Fired when user mute room
/// @param room Instance of the room where event happen.
/// @param data information of room mute event
/// @details this is an ackniwledgment method for mute room, Any participent can mute an individua behaviour of room like audio,video after join breakout room.
- (void)room:(EnxRoom * _Nullable)room didAckMuteRoom:(NSArray * _Nullable)data;
/// Fired when user unmute room
/// @param room Instance of the room where event happen.
/// @param data information of room unmute event
/// @details this is an ackniwledgment method for unmute room, Any participent can unmute an individua behaviour of room like audio,video after mute such bahaviour after join/disconnect from breakout room
- (void)room:(EnxRoom * _Nullable)room didAckUnmuteRoom:(NSArray * _Nullable)data;
/// Fired when a Moderator request for add Ping user .
/// @param room Instance of the room where event happen.
/// @param data Inform user for pinged  success/failure.
/// @details this is an acknowledgment method for pinUser events done by any modiatore.
- (void)room:(EnxRoom * _Nullable)room didAckPinUsers:(NSArray * _Nullable)data;
/// Fired when a Moderator request for remove Ping user .
/// @param room Instance of the room where event happen.
/// @param data Inform user for pinged  success/failure.
/// @details this is an acknowledgment method for UnpinUsers events done by any modiatore.
- (void)room:(EnxRoom * _Nullable)room didAckUnpinUsers:(NSArray * _Nullable)data;
/// Fired when a any user has pinned by any moderatore .
/// @param room Instance of the room where event happen.
/// @param data Inform user for pinged  user list.
/// @details this delegate method will update the list of pinned user list in same confrence.
- (void)room:(EnxRoom * _Nullable)channel didpinnedUsers:(NSArray * _Nullable)data;
/// Fired when your have join knock knoc room or wait for moderatore enable room.
/// @param room Instance of the room where event happen.
/// @param reason Inform user regarding why room waited
/// @details this delegate method will inform to a participent , who is going to join a knock-knock room or wait for moderatore enable room.
/// This API will inform either its knock-knoc room or wait for moderatore room.
/// This API only for participent.
- (void)room:(EnxRoom * _Nullable)channel didRoomAwated:(NSArray * _Nullable)data;
/// Fired when a modiatore will approve any awaited user in knock - kock room
/// @param room Instance of the room where event happen.
/// @param data Inform about approved awated user.
/// @details this acknowledgment method for modeator, when  he/she will approved awated user in knock knock room.
- (void)room:(EnxRoom * _Nullable)channel didAckForApproveAwaitedUser:(NSArray * _Nullable)data;
/// Fired when a any user has pinned by any moderatore .
/// @param room Instance of the room where event happen.
/// @param data  Inform about deny awated user.
/// @details this acknowledgment method for modeator, when he/she will deny  awated user in knock knock room.
- (void)room:(EnxRoom * _Nullable)channel didAckForDenyAwaitedUser:(NSArray * _Nullable)data;
/// Fired when a any participent waiting in lobby of knock knock room
/// @param room Instance of the room where event happen.
/// @param data  Inform about waited user
/// @details this callback method for modeartor , when any user user join after modeartor join and waiting in lobby.
- (void)room:(EnxRoom * _Nullable)channel diduserAwaited:(NSArray * _Nullable)data;
/// Fired for ACK for Talker subscribe notification option
/// @param room Instance of the room where event happen.
/// @param data ACK  information of Talker notification.
/// @details This delegate called for Talker notification subscribe
- (void)room:(EnxRoom * _Nullable)room didAckSubscribeTalkerNotification:(NSArray * _Nullable)data;
/// Fired for ACK for Talker unsubscribe notification option
/// @param room Instance of the room where event happen.
/// @param data ACK  information of Talker notification.
/// @details This delegate called for Talker notification unsubscribe updates.
- (void)room:(EnxRoom * _Nullable)room didAckUnsubscribeTalkerNotification:(NSArray * _Nullable)data;
/// Fired for giving all list of active speaker details
/// @param room Instance of the room where event happen.
/// @param data  information of active speker.
/// @details This delegate called for Talker notification subscribe/unsubscribeupdates.
- (void)room:(EnxRoom * _Nullable)room didTalkerNotification:(NSArray * _Nullable)data;
/// Fired to notify user for his/her subscriber bandwidth alart
/// @param room Instance of the room where event happen.
/// @param data  information about subscriber bandwidth.
/// @details This delegate notify to the user incase of subscriber bandwidth goes low
- (void)room:(EnxRoom * _Nullable)room didRoomBandwidthAlert:(NSArray * _Nullable)data;
/// Fired when a Moderator request for add Spotlight user .
/// @param room Instance of the room where event happen.
/// @param data Inform user for Spotlight  success/failure.
/// @details this is an acknowledgment method for add Spotlight events done by any modiatore.
- (void)room:(EnxRoom * _Nullable)channel didAckAddSpotlightUsers:(NSArray * _Nullable)data;
/// Fired when a Moderator request for remove Spotlight user .
/// @param room Instance of the room where event happen.
/// @param data Inform user for Spotlight  success/failure.
/// @details this is an acknowledgment method for remove Spotlight events done by any modiatore.
- (void)room:(EnxRoom * _Nullable)channel didAckRemoveSpotlightUsers:(NSArray * _Nullable)data;
/// Fired when a any user has Spotlight by any moderatore .
/// @param room Instance of the room where event happen.
/// @param data Inform user for pinged  user list.
/// @details this delegate method will update the list of Spotlight user list in same confrence.
- (void)room:(EnxRoom * _Nullable)channel didUpdatedSpotlightUsers:(NSArray * _Nullable)data;
/// Acknowledgment for Live Recording on
/// @param room Instance of the room where event happen.
/// @param data details of the live recording
/// @details this acknowledgment notification will notify to the user who start live recording
- (void)room:(EnxRoom * _Nullable)channel didACKStartLiveRecording:(NSArray * _Nullable)data;
/// Acknowledgment for Live Recording off
/// @param room Instance of the room where event happen.
/// @param data details of the live recording
/// @details this acknowledgment notification will notify to the user who stop live recording
- (void)room:(EnxRoom * _Nullable)channel didACKStopLiveRecording:(NSArray * _Nullable)data;
/// This is  the event for Start live recording  in room
/// @param room Instance of the room where event happen.
/// @param data details of the live recording
/// @details this CAllback  to all users available in room including the owner of the methos also, about live reecording started
- (void)room:(EnxRoom * _Nullable)room didRoomLiveRecordingOn:(NSArray * _Nullable)data;
/// This is  the event for Stop live recording  in room
/// @param room Instance of the room where event happen.
/// @param data details of the live recording
/// @details this CAllback  to all users available in room including the owner of the methos also, about live reecording Stop
- (void)room:(EnxRoom * _Nullable)room didRoomLiveRecordingOff:(NSArray * _Nullable)data;
/// This is  the event for failed to Start/Stop  live recording  in room
/// @param room Instance of the room where event happen.
/// @param data details of the live recording
/// @details this CAllback  to all users available in room including the owner of the methos also, about live reecording failed to Start/Stop
- (void)room:(EnxRoom * _Nullable)room didRoomLiveRecordingFailed:(NSArray * _Nullable)data;
/// This is  the event for Update current status of live recording  in room
/// @param room Instance of the room where event happen.
/// @param data details of the live recording
/// @details this Callback  to all users available in room including the owner of the methos also, about live reecording update
- (void)room:(EnxRoom * _Nullable)room didRoomLiveRecordingUpdated:(NSArray * _Nullable)data;
/// This is  notification  for layout update to the event owner
/// @param room Instance of the room where event happen.
/// @param data status Acknowledgment for events
/// @details this acknowledgment  will notify to the owner of the event
- (void)room:(EnxRoom * _Nullable)room didACKUpdateLayout:(NSArray * _Nullable)data;
/// This is  event callback for all user in room for layout update in room
/// @param room Instance of the room where event happen.
/// @param data details about new purposed layout
/// @details this is layout update for all users in room
- (void)room:(EnxRoom * _Nullable)room didLayoutupdated:(NSArray * _Nullable)data;
/// This is  event callback for all user in room for typing inidicator
/// @param isTryping true/false
/// @details this is indicate that user start typing *
- (void)didUserStartTyping:(NSDictionary<NSString *, id> * _Nonnull)response;
/// This is  event callback for the owner of the event
/// @param data update about save custom data
/// @details update about save custom data to the event owner *
- (void)didCustomDataSaved:(NSArray * _Nullable)data;
/// This is  event callback for the owner of the event
/// @param data update about Updated custom data
/// @details update about Updated custom data to the event owner *
- (void)didCustomDataUpdated:(NSArray * _Nullable)data;
/// This is  event callback for the owner of the event
/// @param data information about custome data
/// @details notify list of getdata *
- (void)didGetCustomData:(NSArray * _Nullable)data;
- (void)didACKCustomDataUpdated:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKSubscribePageVideo:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKUnsubscribePageVideo:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKGetPageVideo:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didPageTalkerList:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKStartLiveTranscription:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKStopLiveTranscription:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKSubscribeForLiveTranscription:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didTranscriptionEvents:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didRoomTranscriptionOn:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didRoomTranscriptionOff:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSelfTranscriptionOn:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSelfTranscriptionOff:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didHlsStarted:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didHlsStopped:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didHlsFailed:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didHlsWaiting:(NSArray * _Nullable)data;
- (void)didSpeakerMuted;
- (void)didSpeakerUnmuted;
- (void)room:(EnxRoom * _Nullable)room didSharePermissionsModeChanged:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKSetSharePermissionMode:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKGrantSharePermission:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKDenySharePermission:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKReleaseSharePermission:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKRequestSharePermission:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didACKCancelSharePermission:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSharePermissionRequested:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSharePermissionReleased:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSharePermissionDeny:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSharePermissionCancled:(NSArray * _Nullable)data;
- (void)room:(EnxRoom * _Nullable)room didSharePermissionGranted:(NSArray * _Nullable)data;
- (void)vadDidDetectSpeech:(float)confidence;
- (void)vadDidDetectNoise:(NSString * _Nonnull)noiseType;
@end

/// Represents the current connection state of an <code>EnxRoom</code> instance.
typedef SWIFT_ENUM(NSInteger, EnxRoomStatus, open) {
  EnxRoomStatusReady = 0,
  EnxRoomStatusConnected = 1,
  EnxRoomStatusDisconnected = 2,
  EnxRoomStatusError = 3,
  EnxRoomStatusExprired = 4,
  EnxRoomStatusDisconnectedByModerator = 5,
};

@protocol EnxTroubleShooterDelegate;
/// Entry point for the EnableX RTC SDK; use this class to join a room or run a pre-call diagnostic.
SWIFT_CLASS("_TtC9EnxRTCiOS6EnxRtc")
@interface EnxRtc : NSObject
/// Delegate receiving pre-call diagnostics events.
/// Marked weak to prevent a retain cycle between EnxRtc and the owning ViewController.
@property (nonatomic, weak) id <EnxTroubleShooterDelegate> _Nullable delegate;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// To quick start and join the room.
/// @param token it is encoded token string received from Enx application server.
/// @param delegate <EnxRoomDelegate>). If developer looks to handle the success or failure of the action, then they can implement delegates methods for the same.
/// @param publishStreamInfo JSON
/// @param roomInfo JSON
/// @param advanceOptions list of JSON
/// @return EnxStream object
- (EnxStream * _Nullable)joinRoom:(NSString * _Nonnull)token delegate:(id <EnxRoomDelegate> _Nonnull)del publishStreamInfo:(NSDictionary<NSString *, id> * _Nonnull)publishInfo roomInfo:(NSDictionary<NSString *, id> * _Nonnull)rInfo advanceOptions:(NSArray * _Nullable)advOptn SWIFT_WARN_UNUSED_RESULT;
/// Registers the delegate that will receive callbacks from the client diagnostics (pre-call test) session.
- (void)setTroubleShooterDelegate:(id <EnxTroubleShooterDelegate> _Nonnull)trubleShootDelegate;
/// Starts the client diagnostics (pre-call test) using the given options dictionary, loading a hidden WKWebView to execute the test.
- (void)clientDiagnostics:(NSDictionary<NSString *, id> * _Nonnull)options;
@end

@class WKUserContentController;
@class WKScriptMessage;
@interface EnxRtc (SWIFT_EXTENSION(EnxRTCiOS)) <WKNavigationDelegate, WKScriptMessageHandler, WKUIDelegate>
/// Receives JavaScript messages from the diagnostics web page and forwards them to the appropriate <code>EnxTroubleShooterDelegate</code> callback.
- (void)userContentController:(WKUserContentController * _Nonnull)userContentController didReceiveScriptMessage:(WKScriptMessage * _Nonnull)message;
/// Allows all navigation actions unconditionally so the diagnostics page can load its resources.
- (void)webView:(WKWebView * _Nonnull)webView decidePolicyForNavigationAction:(WKNavigationAction * _Nonnull)navigationAction decisionHandler:(void (^ _Nonnull)(WKNavigationActionPolicy))decisionHandler;
/// Called when the diagnostics web view begins loading; no action is required at this stage.
- (void)webView:(WKWebView * _Nonnull)webView didStartProvisionalNavigation:(WKNavigation * _Null_unspecified)navigation;
/// Called when the diagnostics page finishes loading; injects the JavaScript to start the pre-call test.
- (void)webView:(WKWebView * _Nonnull)webView didFinishNavigation:(WKNavigation * _Null_unspecified)navigation;
/// Called when the diagnostics web view fails to load; the error is currently silently ignored.
- (void)webView:(WKWebView * _Nonnull)webView didFailNavigation:(WKNavigation * _Null_unspecified)navigation withError:(NSError * _Nonnull)error;
@end

/// Manages the Socket.IO signaling connection between the client and an EnableX room server.
/// <code>EnxSignalingChannel</code> handles token decoding, socket lifecycle (connect, reconnect, disconnect),
/// and emits/listens for all signaling events needed to publish/subscribe streams, control media,
/// manage recordings, breakout rooms, live transcription, and more.
SWIFT_CLASS("_TtC9EnxRTCiOS19EnxSignalingChannel")
@interface EnxSignalingChannel : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol EnxStreamDelegate;
@protocol EnxVBDelegate;
@class NSException;
/// Represents a single audio/video media stream (local or remote) within an EnableX room session.
SWIFT_CLASS("_TtC9EnxRTCiOS9EnxStream")
@interface EnxStream : NSObject
@property (nonatomic, copy) NSString * _Null_unspecified streamId;
/// EnxStreamDelegate were this stream will invoke methods as events.
/// Marked weak to prevent a retain cycle between EnxStream and its owner (e.g. EnxRoom or a ViewController).
@property (nonatomic, weak) id <EnxStreamDelegate> _Nullable delegate;
/// Marked weak to prevent a retain cycle between EnxStream and the virtual-background consumer.
@property (nonatomic, weak) id <EnxVBDelegate> _Nullable vbDelegate;
@property (nonatomic, readonly, strong) EnxPlayerView * _Null_unspecified enxPlayerView;
@property (nonatomic, copy) NSString * _Null_unspecified clientId;
@property (nonatomic, copy) NSString * _Null_unspecified name;
@property (nonatomic, copy) NSString * _Null_unspecified layout;
@property (nonatomic, copy) NSString * _Null_unspecified streamLayout;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Creates an instance of EnxStream capturing audio/video data
/// from host device with defaultVideoConstraints and defaultAudioConstraints.
/// @see initWithLocalStreamVideoConstraints:audioConstraints:
/// @see initLocalStreamWithOptions:attributes:videoConstraints:audioConstraints:
/// @return instancetype
- (nonnull instancetype)initWithLocalStream:(BOOL)localStream OBJC_DESIGNATED_INITIALIZER;
/// Creates an instance of EnxStream capturing Screen Frame data
/// from host device with defaultVideoConstraints.
/// @see initLocalStreamWithOptions:attributes:videoConstraints:audioConstraints:
/// @return instancetype
- (nonnull instancetype)initWithCanvasStream:(BOOL)canvasStream OBJC_DESIGNATED_INITIALIZER;
/// Creates an instance of EnxStream capturing Screen Frame data
/// from host device with defaultVideoConstraints.
/// @see initLocalStreamWithOptions:attributes:videoConstraints:audioConstraints:
/// @return instancetype
- (nonnull instancetype)initWithScreenShareStream:(BOOL)screenShareStream OBJC_DESIGNATED_INITIALIZER;
/// Creates an instance of EnxStream with a given stream id and signaling channel.
/// @param streamId Enx stream id for this stream object.
/// @param attributes Stream attributes. Attributes will not be sent to the server.
/// @return instancetype
- (nonnull instancetype)initWithStreamId:(NSString * _Nonnull)withStreamId attributes:(NSDictionary<NSString *, id> * _Nonnull)attributes OBJC_DESIGNATED_INITIALIZER;
- (EnxSignalingChannel * _Nullable)signalingChannel SWIFT_WARN_UNUSED_RESULT;
- (void)setAttributes:(NSDictionary<NSString *, id> * _Nonnull)attributes;
- (void)stopCapture SWIFT_AVAILABILITY(macos_app_extension,unavailable) SWIFT_AVAILABILITY(maccatalyst_app_extension,unavailable) SWIFT_AVAILABILITY(ios_app_extension,unavailable);
- (void)startCapture SWIFT_AVAILABILITY(macos_app_extension,unavailable) SWIFT_AVAILABILITY(maccatalyst_app_extension,unavailable) SWIFT_AVAILABILITY(ios_app_extension,unavailable);
- (void)startPreviewCapture;
- (void)stopPreviewCapture;
- (void)switchCameraPreview;
- (void)setZoomFactor:(CGFloat)value;
- (void)attachRenderer:(EnxPlayerView * _Nonnull)enxPlayer;
- (void)detachRenderer;
- (void)setStreamResolution:(NSInteger)width height:(NSInteger)height;
- (void)updateConfiguration:(NSDictionary<NSString *, id> * _Nonnull)data;
- (NSException * _Nullable)switchCamera SWIFT_WARN_UNUSED_RESULT;
/// mute/unmute stream audio.
/// @param isMuted BOOL to send true to mute or false to unmute.
/// @see EnxStreamDelegate:didAudioEvents:data:
- (void)muteSelfAudio:(BOOL)isMute;
- (void)selfHardMuteWithAudio:(BOOL)isMuted;
/// mute/unmute stream video when user cross over senssor .
/// @param flag BOOL to send true to mute or false to unmute.
- (void)muteUnMuteVideowithSenssorUpdate:(BOOL)flag;
- (void)SelfHardMuteVideo:(BOOL)isMuted;
/// mute/unmute stream video.
/// @param isMuted BOOL to send true to mute or false to unmute.
- (void)muteSelfVideo:(BOOL)isMuted;
/// mute single audio stream.
/// Note: Hardmute functionality is only applicable to moderator.
/// @param clientId is the participant who is being mute to the floor.
- (void)hardMuteAudio:(NSString * _Nonnull)clientId;
/// unmute single audio stream.
/// Note: Hardmute functionality is only applicable to moderator.
/// @param clientId is the participant who is being mute to the floor.
- (void)hardUnMuteAudio:(NSString * _Nonnull)clientId;
/// mute stream video.
/// @param clientId for whome mute video
- (void)hardMuteVideo:(NSString * _Nonnull)clientId;
/// unmute stream video.
/// @param clientId for whome unmute video
- (void)hardUnMuteVideo:(NSString * _Nonnull)clientId;
/// Send data stream on channel
/// data Dictionary.
- (void)sendData:(NSDictionary<NSString *, id> * _Nonnull)data;
- (BOOL)hasAudio SWIFT_WARN_UNUSED_RESULT;
- (BOOL)hasVideo SWIFT_WARN_UNUSED_RESULT;
- (BOOL)hasData SWIFT_WARN_UNUSED_RESULT;
/// Sets the Virtual Background delegate and immediately delivers the current media stream if video tracks are already available.
- (void)setEnxVBDelegate:(id <EnxVBDelegate> _Nonnull)vbDelegate;
@end

/// Delegate that receives audio, video, and data events fired by an <code>EnxStream</code> instance.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS17EnxStreamDelegate_")
@protocol EnxStreamDelegate
@optional
/// Fired when audio self mute/unmute events call on EnxStream object.
/// @param data NSDictionary gives the result of Audio event.
- (void)didAudioEvents:(NSDictionary<NSString *, id> * _Nullable)responseData;
/// Fired when video self On/Off events call on EnxStream object.
/// @param data NSDictionary gives the result of Video event.
- (void)didVideoEvents:(NSDictionary<NSString *, id> * _Nullable)responseData;
/// Fired when a data stream is received.
/// @param data stream message received.
- (void)didReceiveData:(NSDictionary<NSString *, id> * _Nullable)responseData;
/// Fired when a hard mute video alert moderator received from server.
/// @param stream Instance of the stream where event happen.
/// @param data hardVideoMute info on a stream.
- (void)stream:(EnxStream * _Nullable)stream didHardVideoMute:(NSArray * _Nullable)responseData;
/// Fired when a hard unmute video alert moderator received from server.
/// @param stream Instance of the stream where event happen.
/// @param data hardVideoUnmute info on a stream.
- (void)stream:(EnxStream * _Nullable)stream didHardVideoUnMute:(NSArray * _Nullable)responseData;
/// Fired when a hard mute video alert participant received from server.
/// @param stream Instance of the stream where event happen.
/// @param data Receive hard mute video info on a stream.
- (void)stream:(EnxStream * _Nullable)stream didReceivehardMuteVideo:(NSArray * _Nullable)responseData;
/// Fired when a hard unmute video alert participant received from server.
/// @param stream Instance of the stream where event happen.
/// @param data Receive hard unmute video info on a stream.
- (void)stream:(EnxStream * _Nullable)stream didRecivehardUnmuteVideo:(NSArray * _Nullable)responseData;
/// Fired when a self mute video alert participant received from server.
/// @param stream Instance of the stream where event happen.
/// @param data self mute video info on a stream.
/// Paricipant delegate
- (void)stream:(EnxStream * _Nullable)stream didRemoteStreamVideoMute:(NSArray * _Nullable)responseData;
/// Fired when a self unmute video alert participant received from server.
/// @param stream Instance of the stream where event happen.
/// @param data self unmute video info on a stream.
/// Paricipant delegate
/// }
- (void)stream:(EnxStream * _Nullable)stream didRemoteStreamVideoUnMute:(NSArray * _Nullable)responseData;
/// Fired when a self mute audio alert participant received from server.
/// @param stream Instance of the stream where event happen.
/// @param data self mute audio info on a stream.
/// Paricipant delegate
- (void)stream:(EnxStream * _Nullable)stream didRemoteStreamAudioMute:(NSArray * _Nullable)responseData;
/// Fired when a self unmute audio alert participant received from server.
/// @param stream Instance of the stream where event happen.
/// @param data self unmute audio info on a stream.
/// Paricipant delegate
- (void)stream:(EnxStream * _Nullable)stream didRemoteStreamAudioUnMute:(NSArray * _Nullable)responseData;
/// There would be listener for moderator when hardmute used by moderator. For this delegates are:
/// Moderator Delegates
/// @param Data has information about mute audio
- (void)didhardMuteAudio:(NSArray * _Nullable)responseData;
/// There would be listener for moderator when hardmute done by moderator. For this delegates are:
/// Moderator Delegates
/// @param Data has information about unmute audio
- (void)didhardUnMuteAudio:(NSArray * _Nullable)responseData;
/// There would be listener for Paricipant when hardmute used by moderator. this delegates is a
/// Paricipant Delegate
/// @param Data has information about hard mute
- (void)didRecievedHardMutedAudio:(NSArray * _Nullable)responseData;
/// There would be listener for Paricipant when hard unmute done by moderator. this delegates is a
/// Paricipant Delegate
/// @param Data has information about hard unmute
- (void)didRecievedHardUnmutedAudio:(NSArray * _Nullable)responseData;
@end

/// Delegate for receiving tap events on participant tiles in an <code>EnxATListView</code>.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS23EnxTalkerStreamDelegate_")
@protocol EnxTalkerStreamDelegate
@optional
- (void)didSelectedStreamAtIndex:(EnxStream * _Nonnull)stream;
@end

/// A floating toolbar for canvas annotation controls.
/// Contains buttons for drawing, text insertion, color selection, undo / undo-all,
/// and play/pause. User interactions are broadcast as <code>kIsCanvasStarted</code> notifications
/// so that <code>EnxCanVasView</code> can react without a direct delegate reference.
SWIFT_CLASS("_TtC9EnxRTCiOS10EnxToolBar")
@interface EnxToolBar : UIView
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
/// Called when the toolbar is loaded from a Storyboard / XIB.
- (void)awakeFromNib;
- (void)layoutSubviews;
@end

/// Delegate that receives progress and result callbacks from a client diagnostics (pre-call test) session.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS25EnxTroubleShooterDelegate_")
@protocol EnxTroubleShooterDelegate
/// Called when the client diagnosis session completes successfully.
- (void)didClientDiagnosisFinished:(NSArray * _Nullable)data;
/// Called when the client diagnosis session encounters a fatal error.
- (void)didClientDiagnosisFailed:(NSArray * _Nullable)data;
/// Called periodically with incremental status updates during the diagnosis session.
- (void)didClientDiagnosisStatus:(NSArray * _Nullable)data;
/// Called when the client diagnosis session is stopped before completing.
- (void)didClientDiagnosisStopped:(NSArray * _Nullable)data;
@end

/// Singleton utility manager that centralises network monitoring, audio session control, logging, and event reporting for the EnxRTC SDK.
SWIFT_CLASS("_TtC9EnxRTCiOS17EnxUtilityManager")
@interface EnxUtilityManager : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) EnxUtilityManager * _Nonnull shareInstance;)
+ (EnxUtilityManager * _Nonnull)shareInstance SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (void)startLog;
- (void)setAppWithGroupsName:(NSString * _Nonnull)appGroup withUserKey:(NSString * _Nonnull)key;
@end

@class RTCMediaStream;
/// Delegate used internally by the Virtual Background (VB) module to receive the raw video media stream.
SWIFT_PROTOCOL("_TtP9EnxRTCiOS13EnxVBDelegate_")
@protocol EnxVBDelegate
@optional
/// Delivers the live <code>RTCMediaStream</code> so the VB pipeline can process video frames.
- (void)sendVideoMedia:(RTCMediaStream * _Nonnull)videoStrem;
@end

#endif // defined(__OBJC__)
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#if defined(__cplusplus)
#endif
#pragma clang diagnostic pop
#endif

#else
#error unsupported Swift architecture
#endif
