// An entry of the command histogram obtained by totalling up
//  occurrences in the range filtered command list
export interface HistogramEntry {
  // name of a command (original CamelCase)
  name: string;
  // number of occurrences in the current frame (or the whole file for a single-frame SKP)
  countInFrame: number;
  // number of occurrences in the current range filter
  countInRange: number;
}

// An event signaling the histogram-sk element should update itself
export const HistogramUpdateEvent = 'histogram-update';
export interface HistogramUpdateEventDetail {
  // A newly computed histogram that needs to be displayed by histogram-sk
  hist?: HistogramEntry[];
  // Whether the command is include by the filter
  included?: Set<string>;
}

// An event to trigger the inspector for a given layer update.
// A layer update is fully specified by the node id and a frame on which an
// update to it occurred.
export const InspectLayerEvent = 'inspect-layer';
export const JumpInspectLayerEvent = 'jump-inspect-layer';
export interface InspectLayerEventDetail {
  id: number;
  frame: number;
}

// Event issued when the user wants to jump to a command, specifying the unfiltered index
// in the detail.
export const JumpCommandEvent = 'jump-command';
export interface JumpCommandEventDetail {
  unfilteredIndex: number;
}

export type PlayMode = 'play' | 'pause';

export const ModeChangedManuallyEvent = 'mode-changed-manually';
export interface ModeChangedManuallyEventDetail {
  readonly mode: PlayMode;
}

export const MoveCommandPositionEvent = 'move-command-position';
export interface MoveCommandPositionEventDetail {
  // the index of a command in the frame to which the wasm view should move.
  position: number;
  // true if we're currently paused
  paused: boolean;
}

export type Point = [number, number];

export const MoveCursorEvent = 'move-cursor';
export const RenderCursorEvent = 'render-cursor';
// This event detail is used for both move-cursor and render-cursor
export interface CursorEventDetail {
  // the position of the cursor.
  position: Point;
  // If true, indicates only the data under the cursor has changed.
  // since some consumers don't need to update in this case.
  onlyData: boolean;
}

export const MoveFrameEvent = 'move-frame';
export interface MoveFrameEventDetail {
  frame: number;
}

export const MoveToEvent = 'moveto';
export interface MoveToEventDetail {
  readonly item: number;
}

export const NextItemEvent = 'next-item';
export interface NextItemEventDetail {
  item: number;
}

// Event issued when the user clicks on an 'Image', indicating to jump to the image with the
// id in the detail.
export const SelectImageEvent = 'select-image';
export interface SelectImageEventDetail {
  id: number;
}
export type BackgroundStyle = 'dark-checkerboard' | 'light-checkerboard';

export const ToggleBackgroundEvent = 'light-dark';
export interface ToggleBackgroundEventDetail {
  mode: BackgroundStyle;
}

export const ToggleCommandInclusionEvent = 'toggle-command-inclusion';
export interface ToggleCommandInclusionEventDetail {
  // the name of a command to toggle in the filter
  // Clicking rows of the histogram is an alternate way to add or remove command names
  // from the command filter. The filter is managed by commands-sk
  name: string;
}
