export class DeviceInfo extends MediaDeviceInfo {
  /**
   * A unique identifier for the device.
   * This value remains consistent across sessions.
   */
  deviceId: string;

  /**
   * A group identifier shared by devices that belong to the same physical hardware.
   * For example, a monitor that includes both a camera and a microphone.
   */
  groupId: string;

  /**
   * The type of media device.
   *
   * Possible values:
   * - `videoinput`
   * - `audioinput`
   * - `audiooutput`
   */
  kind: string;

  /**
   * A human-readable label describing the device
   * (for example, "External USB Webcam").
   */
  label: string;
}

export class CameraDeviceInfo extends DeviceInfo {
  /**
   * A unique identifier for the camera device.
   * This value persists across sessions.
   */
  deviceId: string;

  /**
   * A group identifier shared with related devices,
   * such as a built-in microphone and camera.
   */
  groupId: string;

  /**
   * The type of media device.
   * Always set to `videoinput`.
   */
  kind: string;

  /**
   * A human-readable label describing the camera
   * (for example, "External USB Webcam").
   */
  label: string;
}

export class MicrophoneDeviceInfo extends DeviceInfo {
  /**
   * A unique identifier for the microphone device.
   * This value persists across sessions.
   */
  deviceId: string;

  /**
   * A group identifier shared with related devices,
   * such as a built-in camera and microphone.
   */
  groupId: string;

  /**
   * The type of media device.
   * Always set to `audioinput`.
   */
  kind: string;

  /**
   * A human-readable label describing the microphone
   * (for example, "External Microphone").
   */
  label: string;
}

export class PlaybackDeviceInfo extends DeviceInfo {
  /**
   * A unique identifier for the playback device.
   * This value persists across sessions.
   */
  deviceId: string;

  /**
   * A group identifier shared with related devices,
   * such as speakers integrated into a monitor.
   */
  groupId: string;

  /**
   * The type of media device.
   * Always set to `audiooutput`.
   */
  kind: string;

  /**
   * A human-readable label describing the playback device
   * (for example, "External Headphones").
   */
  label: string;
}

declare class MediaDeviceInfo {
  constructor(deviceId: any, groupId: any, kind: any, label: any);

  /**
   * A unique identifier for the media device.
   */
  deviceId: string;

  /**
   * A group identifier shared among related hardware components.
   */
  groupId: string;

  /**
   * The type of media device.
   */
  kind: string;

  /**
   * A human-readable label for the device.
   */
  label: string;
}

export {};
