/* eslint-disable no-redeclare */
/**
 * @description 概念图谱对外接口，调用者以该接口传入配置
 * @interface IModalProps
 */
export interface IModalProps {}

/**
 * @description 节点层级
 * @enum {number}
 */
export enum Level {
  First = 'first',
  Second = 'second',
  Third = 'third',
}

export interface IKnowledge extends TreeNode {
  level: Level;
  needHighlight: boolean; // 判断节点是否需要高亮
  children?: IKnowledge[];
}

/**
 * @description 节点类型
 * @interface Node
 */
interface TreeNode {
  id: string;
  topic: any;
  direction?: string; // 排列方向
  expanded?: boolean; // 是否展开
  children?: TreeNode[];
}

/**
 * @description 元数据类型
 * @interface Meta
 */
interface Meta {
  name: string; // 思维导图名称
  author: string; // 思维导图坐着
  version: string; // 思维导图版本号
}

interface Mind {
  meta: Meta;
  format: string;
  data: TreeNode;
}

/**
 * @description 思维导图的基础配置
 * @interface Option
 */
export interface Option {
  container: string; // 容器ID
  editable?: boolean; // 是否启用编辑
  theme?: string; // 主题
  mode?: string; // 显示模式, full 动态分布两侧， side 只分布在右侧
  support_html?: boolean; // 是否支持节点里的html元素
  view?: {
    engine?: string; // 各节点之间的绘制引擎，canvas和svg
    hmargin?: number; // 思维导图距容器外框的最小水平距离
    vmargin?: number; // 思维导图距容器外框的最小垂直距离
    line_width?: number; // 思维导图线条粗细
    line_color?: string; // 思维导图线条颜色
  };
  layout?: {
    hspace?: number; // 节点之间的水平间距
    vspace?: number; // 节点之间的垂直间距
    pspace?: number; // 节点收缩/展开控制器的尺寸
  };
  shortcut?: {
    enable?: boolean;
    handles?: {
      [key: string]: any;
    };
    mapping?: {
      [key: string]: number;
    };
  };
}

export interface JsMindCreator {
  new (options: Option): JsMind;
}

export interface JsMind {
  show(mind: Mind): void;
}
