export interface ILabel {
  uuid?: string;
  tagId?: string;
  stroke?: string;
  fill?: string;
  index: number;
  word: string;
  selected?: boolean;
  direction?: string;
}

export interface ILabelStyle {
  uuid: string;
  fill?: string;
  stroke?: string;
}
export interface ISerarchParams {
  keyword: string;
  caseSensitive: boolean;
}

export interface ISearchResult extends ISerarchParams {
  result?: {
    [prop: number]: {
      pageNumber: number;
      pre: string;
      next: string;
    }[];
  };
}


export interface IClickMetadata {
  altKey: boolean;
  ctrlKey: boolean;
  metaKey: boolean;
  shiftKey: boolean;
  which: number;
}

interface ILabelsEvent {
  data: ILabel[];
  position: {
    top: number;
    left: number;
    width: number;
    height: number;
  };
}

export type ILabelingEvent = ILabelsEvent;
export type IDeleteLabelsEvent = ILabelsEvent;
export type IHoverInLabelsEvent = ILabelsEvent;
export interface IClickLabelsEvent extends ILabelsEvent {
  metadata: IClickMetadata;
}

export interface IPagination {
  pageNumber: number;
  pageCount: number;
}

export interface IInitOptions {
  id: string;
  pdfUrl: string;
  pdfInfoUrl: string;
  pdfCharsUrl: string;
  pdfMode: string;
  labelMode: LabelTableMode | LabelTextMode;
  pdfSize?: number;
  labels?: ILabel[];
  tables?: ISafeAny[];
}

export interface ISearchLabelByUuidParams {
  uuid: string;
  pageNumber?: number;
  isHighlight?: boolean;
  level?: number;
  offsetTop?: number;
  stroke?: string;
  fill?: string;
}


export interface ISearchLabelByIndexParams {
  index: number;
  word?: string;
  isHighlight?: boolean;
  level?: number; // 定位等级 1.置顶 2.当前页 3.窗口视图中间
  offsetTop?: number; // 距离窗口高度
}

export interface ISearchTableCellParams {
  pageNumber: number;
  x: number;
  y: number;
  scale?: number;
}

export interface IViewPort {
  height: number;
  left: number;
  scale: number;
  top: number;
  width: number;
  zoom: number;
}

export interface ITableMatrix {
  tableId: string;
  type: 'update' | 'insert' | 'delete';
  pageNumber: number;
  area: number[]; // [left top width height]
  lines: number[][][];
}

// tslint:disable-next-line: no-any
export type ISafeAny = any;

export enum LabelTextMode {
  /**
   * 禁止标注
   */
  non = 'non',
  /**
   * 划选
   */
  textSlip = 'textSlip',
  /**
   * 框选
   */
  textFrame = 'textFrame',
  /**
   * 组合
   */
  textGroup = 'textGroup'
}

export enum LabelTableMode {
  /**
   * 新增表格
   */
  tableAddTbl = 'tableAddTbl',
  /**
   * 调整表格
   */
  tableResizeTbl = 'tableResizeTbl',
  /**
   * 删除表格
   */
  tableDelTbl = 'tableDelTbl',
  /**
   * 增加横线
   */
  tableAddHLine = 'tableAddHLine',
  /**
   * 增加竖线
   */
  tableAddVLine = 'tableAddVLine',
  /**
   * 增加表格线 (任意长度)
   */
  tableAddLine = 'tableAddLine',
  /**
   * 调整线条
   */
  tableResizeCell = 'tableResizeCell',
  /**
   * 删除线
   */
  tableDelLine = 'tableDelLine',
  /**
   * 删除单元格线
   */
  tableDelCellLine = 'tableDelCellLine',
  /**
   * 合并单元格
   */
  tableMergeCell = 'tableMergeCell',
  /**
   * 拆分单元格
   */
  tableSplitCell = 'tableSplitCell',

  // /**
  //  * 选择单元格
  //  */
  // tableSelectCell = 'tableSelectCell',

  /**
   * 隐藏框线
   */
  tableHideTable = 'tableHideTable',
  /**
   * 显示框线
   */
  tableShowTable = 'tableShowTable'
}


export enum PdfMode {
  /**
   * 全部功能
   */
  full = 'full',
  /**
   * 只读
   */
  readonly = 'readonly',
  /**
   * 只删
   */
  deleteonly = 'deleteonly',

  /**
   * 预览（只能查看pdf文档）
   */
  preview = 'preview'
}
