Current File : /home/mdkeenpw/shafqattraders.com/wp-content/plugins/plugnmeet/helpers/plugNmeetConnect.php
<?php
/*
 * Copyright (c) 2022 MynaParrot
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */


use Mynaparrot\Plugnmeet\Parameters\AnalyticsDownloadTokenParameters;
use Mynaparrot\Plugnmeet\Parameters\BreakoutRoomFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\ChatFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\CopyrightConfParameters;
use Mynaparrot\Plugnmeet\Parameters\CreateRoomParameters;
use Mynaparrot\Plugnmeet\Parameters\DeleteAnalyticsParameters;
use Mynaparrot\Plugnmeet\Parameters\DeleteRecordingParameters;
use Mynaparrot\Plugnmeet\Parameters\DisplayExternalLinkFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\EndRoomParameters;
use Mynaparrot\Plugnmeet\Parameters\EndToEndEncryptionFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\ExternalMediaPlayerFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\FetchAnalyticsParameters;
use Mynaparrot\Plugnmeet\Parameters\FetchPastRoomsParameters;
use Mynaparrot\Plugnmeet\Parameters\FetchRecordingsParameters;
use Mynaparrot\Plugnmeet\Parameters\GenerateJoinTokenParameters;
use Mynaparrot\Plugnmeet\Parameters\GetActiveRoomInfoParameters;
use Mynaparrot\Plugnmeet\Parameters\IngressFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\IsRoomActiveParameters;
use Mynaparrot\Plugnmeet\Parameters\LockSettingsParameters;
use Mynaparrot\Plugnmeet\Parameters\RecordingDownloadTokenParameters;
use Mynaparrot\Plugnmeet\Parameters\RecordingFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\RecordingInfoParameters;
use Mynaparrot\Plugnmeet\Parameters\RoomFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\RoomMetadataParameters;
use Mynaparrot\Plugnmeet\Parameters\SharedNotePadFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\SpeechToTextTranslationFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\UserMetadataParameters;
use Mynaparrot\Plugnmeet\Parameters\WaitingRoomFeaturesParameters;
use Mynaparrot\Plugnmeet\Parameters\WhiteboardFeaturesParameters;
use Mynaparrot\Plugnmeet\PlugNmeet;
use Mynaparrot\Plugnmeet\Responses\AnalyticsDownloadTokenResponse;
use Mynaparrot\Plugnmeet\Responses\ClientFilesResponses;
use Mynaparrot\Plugnmeet\Responses\CreateRoomResponse;
use Mynaparrot\Plugnmeet\Responses\DeleteAnalyticsResponse;
use Mynaparrot\Plugnmeet\Responses\DeleteRecordingResponse;
use Mynaparrot\Plugnmeet\Responses\EndRoomResponse;
use Mynaparrot\Plugnmeet\Responses\FetchAnalyticsResponse;
use Mynaparrot\Plugnmeet\Responses\FetchPastRoomsResponse;
use Mynaparrot\Plugnmeet\Responses\FetchRecordingsResponse;
use Mynaparrot\Plugnmeet\Responses\GenerateJoinTokenResponse;
use Mynaparrot\Plugnmeet\Responses\GetActiveRoomInfoResponse;
use Mynaparrot\Plugnmeet\Responses\GetActiveRoomsInfoResponse;
use Mynaparrot\Plugnmeet\Responses\IsRoomActiveResponse;
use Mynaparrot\Plugnmeet\Responses\RecordingDownloadTokenResponse;
use Mynaparrot\Plugnmeet\Responses\RecordingInfoResponse;

require __DIR__ . "/libs/plugnmeet-sdk-php/vendor/autoload.php";

/**
 *
 */
class plugNmeetConnect {
	/**
	 * @var PlugNmeet
	 */
	protected $plugnmeet;

	function __construct( $config ) {
		$this->plugnmeet = new PlugNmeet(
			$config->plugnmeet_server_url,
			$config->plugnmeet_api_key,
			$config->plugnmeet_secret
		);
	}

	/**
	 * @return PlugNmeet
	 */
	public function getPlugnmeet(): PlugNmeet {
		return $this->plugnmeet;
	}

	/**
	 * @return string
	 */
	public function getUUID(): string {
		return $this->plugnmeet->getUUID();
	}

	/**
	 * Generate UUID v4 random string
	 *
	 * @return string
	 */
	public static function generateUuid4(): string {
		return PlugNmeet::generateUuid4();
	}

	/**
	 * @param string $roomId
	 *
	 * @return IsRoomActiveResponse
	 */
	public function isRoomActive( string $roomId ): IsRoomActiveResponse {
		$isRoomActiveParameters = new IsRoomActiveParameters();
		$isRoomActiveParameters->setRoomId( $roomId );

		return $this->plugnmeet->isRoomActive( $isRoomActiveParameters );
	}

	/**
	 * @param string $roomId
	 * @param string $roomTitle
	 * @param string $welcomeMessage
	 * @param int $max_participants
	 * @param string $webHookUrl
	 * @param array $roomMetadata
	 * @param int $empty_timeout
	 * @param string $logoutUrl
	 * @param string|null $extraData
	 *
	 * @return CreateRoomResponse
	 */
	public function createRoom( string $roomId, string $roomTitle, string $welcomeMessage, int $max_participants, string $webHookUrl, array $roomMetadata, int $empty_timeout = 0, string $logoutUrl = "", string $extraData = null ): CreateRoomResponse {
		$roomFeatures = $roomMetadata['room_features'];
		$features     = new RoomFeaturesParameters();

		if ( isset( $roomFeatures['allow_webcams'] ) ) {
			$features->setAllowWebcams( $roomFeatures['allow_webcams'] );
		}
		if ( isset( $roomFeatures['mute_on_start'] ) ) {
			$features->setMuteOnStart( $roomFeatures['mute_on_start'] );
		}
		if ( isset( $roomFeatures['allow_screen_share'] ) ) {
			$features->setAllowScreenShare( $roomFeatures['allow_screen_share'] );
		}
		if ( isset( $roomFeatures['allow_rtmp'] ) ) {
			$features->setAllowRTMP( $roomFeatures['allow_rtmp'] );
		}
		if ( isset( $roomFeatures['allow_view_other_webcams'] ) ) {
			$features->setAllowViewOtherWebcams( $roomFeatures['allow_view_other_webcams'] );
		}
		if ( isset( $roomFeatures['allow_view_other_users_list'] ) ) {
			$features->setAllowViewOtherParticipants( $roomFeatures['allow_view_other_users_list'] );
		}
		if ( isset( $roomFeatures['admin_only_webcams'] ) ) {
			$features->setAdminOnlyWebcams( $roomFeatures['admin_only_webcams'] );
		}
		if ( isset( $roomFeatures['allow_polls'] ) ) {
			$features->setAllowPolls( $roomFeatures['allow_polls'] );
		}
		if ( isset( $roomFeatures['room_duration'] ) && $roomFeatures['room_duration'] > 0 ) {
			$features->setRoomDuration( $roomFeatures['room_duration'] );
		}
		if ( isset( $roomFeatures['enable_analytics'] ) ) {
			$features->setEnableAnalytics( $roomFeatures['enable_analytics'] );
		}
		if ( isset( $roomFeatures['allow_virtual_bg'] ) ) {
			$features->setAllowVirtualBg( $roomFeatures['allow_virtual_bg'] );
		}
		if ( isset( $roomFeatures['allow_raise_hand'] ) ) {
			$features->setAllowRaiseHand( $roomFeatures['allow_raise_hand'] );
		}
		if ( isset( $roomFeatures['auto_gen_user_id'] ) ) {
			$features->setAutoGenUserId( $roomFeatures['auto_gen_user_id'] );
		}

		if ( isset( $roomMetadata['recording_features'] ) ) {
			$roomRecordingFeatures = $roomMetadata['recording_features'];
			$recordingFeatures     = new RecordingFeaturesParameters();
			if ( isset( $roomRecordingFeatures['is_allow'] ) ) {
				$recordingFeatures->setIsAllow( $roomRecordingFeatures['is_allow'] );
			}
			if ( isset( $roomRecordingFeatures['is_allow_cloud'] ) ) {
				$recordingFeatures->setIsAllowCloud( $roomRecordingFeatures['is_allow_cloud'] );
			}
			if ( isset( $roomRecordingFeatures['is_allow_local'] ) ) {
				$recordingFeatures->setIsAllowLocal( $roomRecordingFeatures['is_allow_local'] );
			}
			if ( isset( $roomRecordingFeatures['enable_auto_cloud_recording'] ) ) {
				$recordingFeatures->setEnableAutoCloudRecording( $roomRecordingFeatures['enable_auto_cloud_recording'] );
			}
			if ( isset( $roomRecordingFeatures['only_record_admin_webcams'] ) ) {
				$recordingFeatures->setOnlyRecordAdminWebcams( $roomRecordingFeatures['only_record_admin_webcams'] );
			}
			$features->setRecordingFeatures( $recordingFeatures );
		}

		if ( isset( $roomMetadata['chat_features'] ) ) {
			$roomChatFeatures = $roomMetadata['chat_features'];
			$chatFeatures     = new ChatFeaturesParameters();
			if ( isset( $roomChatFeatures['allow_chat'] ) ) {
				$chatFeatures->setAllowChat( $roomChatFeatures['allow_chat'] );
			}
			if ( isset( $roomChatFeatures['allow_file_upload'] ) ) {
				$chatFeatures->setAllowFileUpload( $roomChatFeatures['allow_file_upload'] );
			}
			$features->setChatFeatures( $chatFeatures );
		}

		if ( isset( $roomMetadata['shared_note_pad_features'] ) ) {
			$roomSharedNotepadFeatures = $roomMetadata['shared_note_pad_features'];
			$sharedNotePadFeatures     = new SharedNotePadFeaturesParameters();
			if ( isset( $roomSharedNotepadFeatures['allowed_shared_note_pad'] ) ) {
				$sharedNotePadFeatures->setAllowedSharedNotePad( $roomSharedNotepadFeatures['allowed_shared_note_pad'] );
			}
			$features->setSharedNotePadFeatures( $sharedNotePadFeatures );
		}

		if ( isset( $roomMetadata['whiteboard_features'] ) ) {
			$roomWhiteboardFeatures = $roomMetadata['whiteboard_features'];
			$whiteboardFeatures     = new WhiteboardFeaturesParameters();
			if ( isset( $roomWhiteboardFeatures['allowed_whiteboard'] ) ) {
				$whiteboardFeatures->setAllowedWhiteboard( $roomWhiteboardFeatures['allowed_whiteboard'] );
			}
			if ( isset( $roomWhiteboardFeatures['preload_file'] ) ) {
				$whiteboardFeatures->setPreloadFile( $roomWhiteboardFeatures['preload_file'] );
			}
			$features->setWhiteboardFeatures( $whiteboardFeatures );
		}

		if ( isset( $roomMetadata['external_media_player_features'] ) ) {
			$roomExternalMediaPlayerFeatures = $roomMetadata['external_media_player_features'];
			$externalMediaPlayerFeatures     = new ExternalMediaPlayerFeaturesParameters();
			if ( isset( $roomExternalMediaPlayerFeatures['allowed_external_media_player'] ) ) {
				$externalMediaPlayerFeatures->setAllowedExternalMediaPlayer( $roomExternalMediaPlayerFeatures['allowed_external_media_player'] );
			}
			$features->setExternalMediaPlayerFeatures( $externalMediaPlayerFeatures );
		}

		if ( isset( $roomMetadata['waiting_room_features'] ) ) {
			$roomWaitingRoomFeatures = $roomMetadata['waiting_room_features'];
			$waitingRoomFeatures     = new WaitingRoomFeaturesParameters();
			if ( isset( $roomWaitingRoomFeatures['is_active'] ) ) {
				$waitingRoomFeatures->setIsActive( $roomWaitingRoomFeatures['is_active'] );
			}
			if ( ! empty( $roomWaitingRoomFeatures['waiting_room_msg'] ) ) {
				$waitingRoomFeatures->setWaitingRoomMsg( $roomWaitingRoomFeatures['waiting_room_msg'] );
			}
			$features->setWaitingRoomFeatures( $waitingRoomFeatures );
		}

		if ( isset( $roomMetadata['breakout_room_features'] ) ) {
			$roomBreakoutRoomFeatures = $roomMetadata['breakout_room_features'];
			$breakoutRoomFeatures     = new BreakoutRoomFeaturesParameters();
			if ( isset( $roomBreakoutRoomFeatures['is_allow'] ) ) {
				$breakoutRoomFeatures->setIsAllow( $roomBreakoutRoomFeatures['is_allow'] );
			}
			if ( isset( $roomBreakoutRoomFeatures['allowed_number_rooms'] ) ) {
				$breakoutRoomFeatures->setAllowedNumberRooms( (int) $roomBreakoutRoomFeatures['allowed_number_rooms'] );
			}
			$features->setBreakoutRoomFeatures( $breakoutRoomFeatures );
		}

		if ( isset( $roomMetadata['display_external_link_features'] ) ) {
			$roomDisplayExternalLinkFeatures = $roomMetadata['display_external_link_features'];
			$displayExternalLinkFeatures     = new DisplayExternalLinkFeaturesParameters();
			if ( isset( $roomDisplayExternalLinkFeatures['is_allow'] ) ) {
				$displayExternalLinkFeatures->setIsAllow( $roomDisplayExternalLinkFeatures['is_allow'] );
			}
			$features->setDisplayExternalLinkFeatures( $displayExternalLinkFeatures );
		}

		if ( isset( $roomMetadata['ingress_features'] ) ) {
			$roomIngressFeatures = $roomMetadata['ingress_features'];
			$ingressFeatures     = new IngressFeaturesParameters();
			if ( isset( $roomIngressFeatures['is_allow'] ) ) {
				$ingressFeatures->setIsAllow( $roomIngressFeatures['is_allow'] );
			}
			$features->setIngressFeatures( $ingressFeatures );
		}

		if ( isset( $roomMetadata['speech_to_text_translation_features'] ) ) {
			$roomSpeechToTextTranslationFeatures = $roomMetadata['speech_to_text_translation_features'];
			$speechToTextTranslationFeatures     = new SpeechToTextTranslationFeaturesParameters();
			if ( isset( $roomSpeechToTextTranslationFeatures['is_allow'] ) ) {
				$speechToTextTranslationFeatures->setIsAllow( $roomSpeechToTextTranslationFeatures['is_allow'] );
			}
			if ( isset( $roomSpeechToTextTranslationFeatures['is_allow_translation'] ) ) {
				$speechToTextTranslationFeatures->setIsAllowTranslation( $roomSpeechToTextTranslationFeatures['is_allow_translation'] );
			}
			$features->setSpeechToTextTranslationFeatures( $speechToTextTranslationFeatures );
		}

		if ( isset( $roomMetadata['end_to_end_encryption_features'] ) ) {
			$roomEndToEndEncryptionFeatures = $roomMetadata['end_to_end_encryption_features'];
			$endToEndEncryptionFeatures     = new EndToEndEncryptionFeaturesParameters();
			if ( isset( $roomEndToEndEncryptionFeatures['is_enabled'] ) ) {
				$endToEndEncryptionFeatures->setIsEnable( $roomEndToEndEncryptionFeatures['is_enabled'] );

				if ( isset( $roomEndToEndEncryptionFeatures['included_chat_messages'] ) ) {
					$endToEndEncryptionFeatures->setIncludedChatMessages( $roomEndToEndEncryptionFeatures['included_chat_messages'] );
				}

				if ( isset( $roomEndToEndEncryptionFeatures['included_whiteboard'] ) ) {
					$endToEndEncryptionFeatures->setIncludedWhiteboard( $roomEndToEndEncryptionFeatures['included_whiteboard'] );
				}
			}
			$features->setEndToEndEncryptionFeatures( $endToEndEncryptionFeatures );
		}

		$metadata = new RoomMetadataParameters();
		$metadata->setRoomTitle( $roomTitle );

		if ( ! empty( $welcomeMessage ) ) {
			$metadata->setWelcomeMessage( $welcomeMessage );
		}
		if ( ! empty( $webHookUrl ) ) {
			$metadata->setWebhookUrl( $webHookUrl );
		}
		if ( ! empty( $logoutUrl ) ) {
			$metadata->setLogoutUrl( $logoutUrl );
		}
		if ( ! empty( $extraData ) ) {
			$metadata->setExtraData( $extraData );
		}

		$metadata->setFeatures( $features );

		if ( isset( $roomMetadata['default_lock_settings'] ) ) {
			$defaultLocks = $roomMetadata['default_lock_settings'];
			$lockSettings = new LockSettingsParameters();

			if ( isset( $defaultLocks['lock_microphone'] ) ) {
				$lockSettings->setLockMicrophone( $defaultLocks['lock_microphone'] );
			}
			if ( isset( $defaultLocks['lock_webcam'] ) ) {
				$lockSettings->setLockWebcam( $defaultLocks['lock_webcam'] );
			}
			if ( isset( $defaultLocks['lock_screen_sharing'] ) ) {
				$lockSettings->setLockScreenSharing( $defaultLocks['lock_screen_sharing'] );
			}
			if ( isset( $defaultLocks['lock_whiteboard'] ) ) {
				$lockSettings->setLockWhiteboard( $defaultLocks['lock_whiteboard'] );
			}
			if ( isset( $defaultLocks['lock_shared_notepad'] ) ) {
				$lockSettings->setLockSharedNotepad( $defaultLocks['lock_shared_notepad'] );
			}
			if ( isset( $defaultLocks['lock_chat'] ) ) {
				$lockSettings->setLockChat( $defaultLocks['lock_chat'] );
			}
			if ( isset( $defaultLocks['lock_chat_send_message'] ) ) {
				$lockSettings->setLockChatSendMessage( $defaultLocks['lock_chat_send_message'] );
			}
			if ( isset( $defaultLocks['lock_chat_file_share'] ) ) {
				$lockSettings->setLockChatFileShare( $defaultLocks['lock_chat_file_share'] );
			}
			if ( isset( $defaultLocks['lock_private_chat'] ) ) {
				$lockSettings->setLockPrivateChat( $defaultLocks['lock_private_chat'] );
			}

			$metadata->setDefaultLockSettings( $lockSettings );
		}

		if ( isset( $roomMetadata['copyright_conf'] ) ) {
			$conf          = $roomMetadata['copyright_conf'];
			$copyrightConf = new CopyrightConfParameters();

			if ( isset( $conf["display"] ) ) {
				$copyrightConf->setDisplay( $conf["display"] );
			}
			if ( isset( $conf["text"] ) ) {
				$copyrightConf->setText( $conf["text"] );
			}

			$metadata->setCopyrightConf( $copyrightConf );
		}

		$roomCreateParams = new CreateRoomParameters();
		$roomCreateParams->setRoomId( $roomId );
		if ( $max_participants > 0 ) {
			$roomCreateParams->setMaxParticipants( $max_participants );
		}
		if ( $empty_timeout > 0 ) {
			$roomCreateParams->setEmptyTimeout( $empty_timeout );
		}
		$roomCreateParams->setRoomMetadata( $metadata );

		return $this->plugnmeet->createRoom( $roomCreateParams );
	}

	/**
	 * @param string $roomId
	 * @param string $name
	 * @param string $userId
	 * @param bool $isAdmin
	 * @param bool $isHidden
	 * @param UserMetadataParameters|null $userMetadata
	 * @param LockSettingsParameters|null $lockSettings
	 *
	 * @return GenerateJoinTokenResponse
	 */
	public function getJoinToken( string $roomId, string $name, string $userId, bool $isAdmin, bool $isHidden = false, UserMetadataParameters $userMetadata = null, LockSettingsParameters $lockSettings = null ): GenerateJoinTokenResponse {
		$generateJoinTokenParameters = new GenerateJoinTokenParameters();
		$generateJoinTokenParameters->setRoomId( $roomId );
		$generateJoinTokenParameters->setName( $name );
		$generateJoinTokenParameters->setUserId( $userId );
		$generateJoinTokenParameters->setIsAdmin( $isAdmin );
		$generateJoinTokenParameters->setIsHidden( $isHidden );

		if ( $userMetadata !== null ) {
			$generateJoinTokenParameters->setUserMetadata( $userMetadata );
			if ( $lockSettings !== null ) {
				$generateJoinTokenParameters->setLockSettings( $lockSettings );
			}
		}

		return $this->plugnmeet->getJoinToken( $generateJoinTokenParameters );
	}

	/**
	 * @param string $roomId
	 *
	 * @return EndRoomResponse
	 */
	public function endRoom( string $roomId ): EndRoomResponse {
		$endRoomParameters = new EndRoomParameters();
		$endRoomParameters->setRoomId( $roomId );

		return $this->plugnmeet->endRoom( $endRoomParameters );
	}

	/**
	 * @param string $roomId
	 *
	 * @return GetActiveRoomInfoResponse
	 */
	public function getActiveRoomInfo( string $roomId ): GetActiveRoomInfoResponse {
		$getActiveRoomInfoParameters = new GetActiveRoomInfoParameters();
		$getActiveRoomInfoParameters->setRoomId( $roomId );

		return $this->plugnmeet->getActiveRoomInfo( $getActiveRoomInfoParameters );
	}

	/**
	 * @return GetActiveRoomsInfoResponse
	 */
	public function getActiveRoomsInfo(): GetActiveRoomsInfoResponse {
		return $this->plugnmeet->getActiveRoomsInfo();
	}

	/**
	 * @param array $roomIds
	 * @param int $from
	 * @param int $limit
	 * @param string $orderBy
	 *
	 * @return FetchPastRoomsResponse
	 */
	public function getPastRooms( array $roomIds, int $from = 0, int $limit = 20, string $orderBy = "DESC" ): FetchPastRoomsResponse {
		$fetchPastRoomsParameters = new FetchPastRoomsParameters();
		$fetchPastRoomsParameters->setRoomIds( $roomIds );
		$fetchPastRoomsParameters->setFrom( $from );
		$fetchPastRoomsParameters->setLimit( $limit );
		$fetchPastRoomsParameters->setOrderBy( $orderBy );

		return $this->plugnmeet->fetchPastRoomsInfo( $fetchPastRoomsParameters );
	}

	/**
	 * @param array $roomIds
	 * @param int $from
	 * @param int $limit
	 * @param string $orderBy
	 *
	 * @return FetchRecordingsResponse
	 */
	public function getRecordings( array $roomIds, int $from = 0, int $limit = 20, string $orderBy = "DESC" ): FetchRecordingsResponse {
		$fetchRecordingsParameters = new FetchRecordingsParameters();
		$fetchRecordingsParameters->setRoomIds( $roomIds );
		$fetchRecordingsParameters->setFrom( $from );
		$fetchRecordingsParameters->setLimit( $limit );
		$fetchRecordingsParameters->setOrderBy( $orderBy );

		return $this->plugnmeet->fetchRecordings( $fetchRecordingsParameters );
	}

	/**
	 * @param string $recordingId
	 *
	 * @return RecordingInfoResponse
	 */
	public function getRecordingInfo( string $recordingId ): RecordingInfoResponse {
		$recordingInfoParameters = new RecordingInfoParameters();
		$recordingInfoParameters->setRecordId( $recordingId );

		return $this->plugnmeet->getRecordingInfo( $recordingInfoParameters );
	}

	/**
	 * @param  $recordingId
	 *
	 * @return RecordingDownloadTokenResponse
	 */
	public function getRecordingDownloadLink( $recordingId ): RecordingDownloadTokenResponse {
		$recordingDownloadTokenParameters = new RecordingDownloadTokenParameters();
		$recordingDownloadTokenParameters->setRecordId( $recordingId );

		return $this->plugnmeet->getRecordingDownloadToken( $recordingDownloadTokenParameters );
	}

	/**
	 * @param  $recordingId
	 *
	 * @return DeleteRecordingResponse
	 */
	public function deleteRecording( $recordingId ): DeleteRecordingResponse {
		$deleteRecordingParameters = new DeleteRecordingParameters();
		$deleteRecordingParameters->setRecordId( $recordingId );

		return $this->plugnmeet->deleteRecordings( $deleteRecordingParameters );
	}

	/**
	 * @param array $roomIds
	 * @param int $from
	 * @param int $limit
	 * @param string $orderBy
	 *
	 * @return FetchAnalyticsResponse
	 */
	public function getAnalytics( array $roomIds, int $from = 0, int $limit = 20, string $orderBy = "DESC" ): FetchAnalyticsResponse {
		$fetchAnalyticsParameters = new FetchAnalyticsParameters();
		$fetchAnalyticsParameters->setRoomIds( $roomIds );
		$fetchAnalyticsParameters->setFrom( $from );
		$fetchAnalyticsParameters->setLimit( $limit );
		$fetchAnalyticsParameters->setOrderBy( $orderBy );

		return $this->plugnmeet->fetchAnalytics( $fetchAnalyticsParameters );
	}

	/**
	 * @param  $fileId
	 *
	 * @return AnalyticsDownloadTokenResponse
	 */
	public function getAnalyticsDownloadLink( $fileId ): AnalyticsDownloadTokenResponse {
		$analyticsDownloadTokenParameters = new AnalyticsDownloadTokenParameters();
		$analyticsDownloadTokenParameters->setFileId( $fileId );

		return $this->plugnmeet->getAnalyticsDownloadToken( $analyticsDownloadTokenParameters );
	}

	/**
	 * @param  $fileId
	 *
	 * @return DeleteAnalyticsResponse
	 */
	public function deleteAnalytics( $fileId ): DeleteAnalyticsResponse {
		$deleteAnalyticsParameters = new DeleteAnalyticsParameters();
		$deleteAnalyticsParameters->setFileId( $fileId );

		return $this->plugnmeet->deleteAnalytics( $deleteAnalyticsParameters );
	}

	/**
	 * @return ClientFilesResponses
	 */
	public function getClientFiles(): ClientFilesResponses {
		return $this->plugnmeet->getClientFiles();
	}
}