/**
 * 字段结构
 */
export interface ColumnItem {
  langName?: string;
  schemaName?: string;
  type: number;
  maxLength?: number;
  // 必填
  isRequired?: boolean;
  // 唯一
  isUnique?: boolean;
  displayOrder?: number;
  // 表id
  tableId?: string;
  // 描述
  memo?: string;
  alignment?: string;
  isDisplayEnable?: boolean;
  isLinkEnable?: boolean;
  isWhereEnable?: boolean;
  isOrderByEnable?: boolean;
  isGroupByEnable?: boolean;
  isAggregateEnable?: boolean;
  whereInputType?: string;
  // 内容
  whereInputContent?: string;
  precision?: number;
  scale?: number;
  isPreDefined?: boolean;
  // 默认值
  defaultValue?: string;
  alterId?: string;
  temp_rename?: string;
  id: string;
  charset?: string;
  orderChar?: string;
  langNameList: Record<string, string>[];
  // 字符集
  chartset?: string;
  cnName?: string;
  enName?: string;
}

/**
 * 表结构
 */
export interface ViewTable {
  aliasName: string;
  creationTime: string;
  creatorUserId: string;
  displayOrder: number;
  id: string;
  isDeleted: boolean;
  langDescription?: string;
  langName?: string;
  parentBusinessTableId: string;
  schemaName: string;
  type: number;
  updateTime: string;
  langNameList?: Record<string, string>[];
  langDescriptionList?: Record<string, string>[];
  cnName?: string;
  enName?: string;
  enDescription?: string;
  cnDescription?: string;
}

/**
 * 字段关系
 */
export interface ColumnRelation {
  id: string;
  // 名称
  name: string;
  // 主键
  primaryKey: string;
  // 主键表
  primaryTable: string;
  // 外键
  foreignKey: string;
  // 外键表
  foreignTable: string;
  // 关系类型 1 一对一 2 一对多 3 多对一
  relationType: 1 | 2 | 3;
  // 连线样式
  style: Record<string, any>;
  dataModelId?: string;
}

/**
 * 待办
 */
export interface TodoItem {
  id: string;
  name: string;
  text: string;
  isDone: boolean;
  level: 0 | 1 | 2 | 3; // 0 默认 1 一般 2 紧急 3 最高
  dataModelId?: string;
}

/**
 * 主题区域信息
 */
export interface TopicAreaInfo {
  // 主题区域id
  id: string;
  // 主题区域名称
  name: string;
  // 主题区域样式
  style: Record<string, any>;
  // 主题区域
  isTopicArea: boolean;
  dataModelId?: string;
}

/**
 * 注释信息
 */
export interface RemarkInfo {
  id: string;
  // 名称
  name: string;
  // 内容
  text: string;
  // 样式
  style: {
    x: number;
    y: number;
    width: number;
    height: number;
    background: string;
  };
  isRemark: boolean;
  dataModelId?: string;
}

/**
 * 表数据
 */
export type TableItemType = {
  table: ViewTable & {openSync: boolean; style: Record<string, any>, dataModelId: string},
  tableColumnList: ColumnItem[],
  isTable: boolean;
};

/**
 * 数据模型项目信息
 */
export interface ProjectInfo {
  id: string;
  // 名称
  name: string;
  // 文件夹
  directory: string;
  // 封面
  coverImage?: string;
  // 模型类型
  type: number; // 2 流程 3 业务表
  // 创建时间
  createTime?: string;
  // 创建者
  createdBy?: string;
  createdByName?: string;
  // 更新者
  updateBy?: string;
  updateByName?: string;
  // 更新时间
  updateTime?: string;
  // 模型说明
  description?: string;
  // 是否模版
  isTemplate: boolean;
  // 所属行业
  industry?: string;
  // 发布状态
  publishStatus: string;
  // 数据表 openSync 开启同步
  tables: TableItemType[];
  // 关系
  relations: ColumnRelation[];
  // 主题区域
  topicAreas: TopicAreaInfo[];
  // 注释节点
  remarkInfos: RemarkInfo[];
  // 操作记录
  // history: any[];
  // 待办事项
  todos: TodoItem[];
  // 画布设置
  setting: {
    // 展示菜单栏
    showMenu: boolean;
    // 展示侧边栏
    showSidebar: boolean;
    // 展示字段详情
    showColumnDetail: boolean;
    // 展示网格
    showGrid: boolean;
    // 展示关系
    showRelation: boolean;
    // 自动更新
    autoUpdate: boolean;
    // 表格宽度
    tableWidth: number;
  }
}
