/* eslint-disable import/no-unresolved */
// Contains the type definitions for all the emscripten bound methods from the wasm debugger.
// These are defined in //skia/experimental/wasm-skp-debugger/debugger_bindings.cpp
import type {
  CanvasKit,
  Surface,
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  // @ts-ignore
} from '../wasm_libs/types/canvaskit'; // gazelle:ignore

export interface Debugger extends CanvasKit {
  SkpFilePlayer(ab: ArrayBuffer): SkpFilePlayerResult;
  MinVersion(): number;
}
// An object containing either the successfully loaded file player or an error.
export interface SkpFilePlayerResult {
  readonly error: string;
  readonly player: SkpDebugPlayer;
}
export interface SkpDebugPlayer {
  changeFrame(index: number): void;
  deleteCommand(index: number): void;
  draw(surface: Surface): void;
  drawTo(surface: Surface, index: number): void;
  findCommandByPixel(
    surface: Surface,
    x: number,
    y: number,
    upperBound: number
  ): number;
  getBounds(): SkIRect;
  getBoundsForFrame(frame: number): SkIRect;
  getFrameCount(): number;
  getImageResource(index: number): string;
  getImageCount(): number;
  getImageInfo(index: number): ImageInfoNoColorspace;
  getLayerKeys(): LayerKey[];
  getLayerSummariesJs(): LayerSummary[];
  getSize(): number;
  imageUseInfo(frame: number, nodeid: number): ImageUseMap;
  jsonCommandList(surface: Surface): string;
  lastCommandInfo(): string;
  loadSkp(ptr: number, len: number): string;
  setClipVizColor(color: Color): void;
  setCommandVisibility(index: number, visible: boolean): void;
  setGpuOpBounds(visible: boolean): void;
  setInspectedLayer(nodeId: number): void;
  setOriginVisible(visible: boolean): void;
  setOverdrawVis(visible: boolean): void;
  setAndroidClipViz(visible: boolean): void;
  TRANSPARENT: number;
}
export interface ImageInfoNoColorspace {
  width: number;
  height: number;
  colorType: number;
  alphaType: number;
}
export interface SkIRect {
  fLeft: number;
  fTop: number;
  fRight: number;
  fBottom: number;
}
export type Color = number;
export type Matrix3x3 = [
  [number, number, number],
  [number, number, number],
  [number, number, number],
];
export type Matrix4x4 = [
  [number, number, number, number],
  [number, number, number, number],
  [number, number, number, number],
  [number, number, number, number],
];
// return type of lastCommandInfo after json.parse
export interface MatrixClipInfo {
  ClipRect: [number, number, number, number];
  ViewMatrix: Matrix3x3 | Matrix4x4;
}

export interface SkpJsonGpuOp {
  Name: string;
  ClientID: number;
  OpsTaskID: number;
  ChildID: number;
  // TODO(nifong): bounds, stack
}
export interface SkpJsonAuditTrail {
  Ops: SkpJsonGpuOp[];
}
export interface SkpJsonCommand {
  command: string; // name
  shortDesc?: string; // short description
  layerNodeId?: number;
  imageIndex?: number;
  key?: string; // text that goes along with a DrawAnnotation command
  auditTrail: SkpJsonAuditTrail;
}
// Return type of SkpDebugPlayer.jsonCommandList() after json.parse
export interface SkpJsonCommandList {
  commands: SkpJsonCommand[];
}
// Indentifier of a layer update evenet
export interface LayerKey {
  frame: number;
  nodeId: number;
}
// Info about layer events relevant to a particular layer and frame
// struct from LayerManager.h
export interface LayerSummary {
  nodeId: number;
  frameOfLastUpdate: number;
  fullRedraw: boolean;
  layerWidth: number;
  layerHeight: number;
}
// return type of imageUseInfoForFrame
// Keys are image ids, values are lists of command indices
export type ImageUseMap = Map<string, number[]>;
