/**
 * Defines the possible states of a video layer.
 *
 * @since 5.0
 */
export type VideoState = "can-play" | "not-ready" | "paused" | "playing" | "ready" | "waiting" | "data-loaded";

/**
 * Defines the possible sources for the sensor orientation.
 *
 * @since 5.0
 */
export type SensorOrientationSource = "platformHeading" | "cameraAzimuth";

/**
 * Defines the orientation source and symbol offset for the sensor symbol.
 *
 * @since 5.0
 */
export interface SensorOrientationInfo {
  /**
   * Defines the orientation source for the sensor symbol. Possible values are "platformHeading" and "cameraAzimuth".
   *
   * @since 5.0
   */
  source: SensorOrientationSource;
  /**
   * Defines the offset angle in degrees to apply to the sensor symbol.
   *
   * @since 5.0
   */
  symbolOffset: number;
}

/**
 * Defines an object that represents a metadata entry for the video layer.
 *
 * @since 5.0
 */
export interface VideoMetadataEntry {
  /**
   * The name of the metadata entry.
   *
   * @since 5.0
   */
  name: string;
  /**
   * The tag id of the metadata entry.
   *
   * @since 5.0
   */
  tagId: number;
  /**
   * The value of the metadata entry.
   *
   * @since 5.0
   */
  value: any;
}

/**
 * Defines an object that represents the livestream status of a video layer.
 *
 * @since 4.34
 */
export interface LivestreamStatus {
  /**
   * Indicates if the video layer is at the live edge.
   *
   * @since 5.0
   */
  atLiveEdge?: boolean | null;
  /**
   * Indicates if the video layer is behind the live edge.
   *
   * @since 5.0
   */
  behindLiveEdge?: boolean | null;
  /**
   * The current time of the livestream in seconds.
   *
   * @since 5.0
   */
  liveCurrentTime?: number | null;
  /**
   * The live window of the livestream in seconds.
   *
   * @since 5.0
   */
  liveWindow?: number | null;
  /**
   * The time in seconds that the video layer is past the seek end.
   *
   * @since 5.0
   */
  pastSeekEnd?: number | null;
  /**
   * The end time of the seekable range in seconds.
   *
   * @since 5.0
   */
  seekableEnd?: number | null;
  /**
   * The start time of the seekable range in seconds.
   *
   * @since 5.0
   */
  seekableStart?: number | null;
}

/**
 * Defines an object that represents the available coverage data of the layer.
 *
 * @since 5.1
 */
export interface Coverage {}

/**
 * Defines an object that contains metadata defining layer previews information.
 *
 * @since 5.1
 */
export interface PreviewsInfo {
  /**
   * The number of preview thumbnails in the sprite sheet.
   *
   * @since 5.1
   */
  count: number;
  /**
   * The height in pixels of each preview thumbnail in the sprite sheet.
   *
   * @since 5.1
   */
  height: number;
  /**
   * The time in milliseconds between each preview thumbnail in the sprite sheet.
   *
   * @since 5.1
   */
  interval: number;
  /**
   * The number of columns of preview thumbnails in the sprite sheet.
   *
   * @since 5.1
   */
  numCols: number;
  /**
   * The number of rows of preview thumbnails in the sprite sheet.
   *
   * @since 5.1
   */
  numRows: number;
  /**
   * An array of objects containing metadata for each preview thumbnail in
   * the sprite sheet, including the time offset of each thumbnail in
   * milliseconds.
   *
   * @since 5.1
   */
  thumbnailInfo: { offset: number; }[];
  /**
   * The URL fragment for fetching the sprite sheet containing the thumbnails.
   * This URL is relative to the video source URL and can be used to construct
   * the full URL to the sprite sheet.
   *
   * @since 5.1
   */
  urlFragment: string;
  /**
   * The width in pixels of each preview thumbnail in the sprite sheet.
   *
   * @since 5.1
   */
  width: number;
}