/**
 * All available commands that can be sent to the WebComponent.
 */
export enum WebComponentCommand {
	/**
	 * Initializes the WebComponent with the given configuration.
	 * @private
	 */
	INITIALIZE = 'INITIALIZE',

	/**
	 * Ends the current meeting for all participants.
	 * This command is only available for the moderator.
	 */
	END_MEETING = 'END_MEETING',
	/**
	 * Disconnects the local participant from the current room.
	 */
	LEAVE_ROOM = 'LEAVE_ROOM'
	// TOGGLE_CHAT = 'TOGGLE_CHAT'
}

/**
 * Type definitions for command payloads.
 * Each property corresponds to a command in {@link WebComponentCommand}.
 * @category Communication
 */
export interface CommandPayloads {
	/**
	 * Payload for the INITIALIZE command.
	 * @private
	 */
	[WebComponentCommand.INITIALIZE]: {
		domain: string;
	};
	[WebComponentCommand.END_MEETING]: void;
	[WebComponentCommand.LEAVE_ROOM]: void;
	// [WebComponentCommand.TOGGLE_CHAT]: void;
}

/**
 * Gets the type-safe payload for a specific command.
 * This type allows TypeScript to infer the correct payload type based on the command.
 * @category Type Helpers
 * @private
 */
export type CommandPayloadFor<T extends WebComponentCommand> = T extends keyof CommandPayloads
	? CommandPayloads[T]
	: never;
