import type { Graph, G6GraphEvent, GraphOptions } from '@antv/g6';
import type { CSSProperties } from 'react';

export interface nodeItem {
  id: string;
  label?: string;
  size?: number;
  [propName: string]: any;
}
export interface edgesItem {
  label?: string;
  source: string;
  target: string;
  [propName: string]: any;
}
export interface GuidData {
  nodes: nodeItem[];
  edges: edgesItem[];
}

export interface IAddEvent {
  (example: Graph, enventProps: IEnventProps): void;
}

export interface IEnventProps {
  onNodeClick?: G6GraphFn;
  onNodeDblClick?: G6GraphFn;
}

export interface G6GraphFn {
  (e: G6GraphEvent, graph: Graph): void;
}

export interface FGDProps {
  graphCfg?: GraphOptions;
  graphData?: GuidData;
  onNodeClick?: G6GraphFn;
  onNodeDblClick?: G6GraphFn;
  style?: CSSProperties;
  request?: IGetGraphDataFn;
  params?: Record<string, any>;
  postData?: IpostData;
  [propName: string]: any;
}
export interface IRGraphData {
  data: GuidData;
}
export interface IpostData {
  (data: GuidData): GuidData;
}

export interface IGetGraphDataFn {
  (params?: Record<string, any>, graph?: Graph): Promise<IRGraphData>;
}

export interface FGDComponentProps {
  getInstance: () => Graph | undefined;
}
