// 指引库类型
export enum BillGuideLibType {
  // 清单指引
  GUIDE = 1,
  // 清单精灵
  ELF,
}

// 标准指引库
export interface IBillGuideLibResult {
  type: BillGuideLibType;
  ID: string;
  compilationId: string;
  compilationName: string;
  billsLibId: number;
  billsLibName: string;
  name: string;
  creator: string;
  createDate: string;
  deleted?: boolean;
}

// 标准指引库（更正命名）
export interface IBillGuideLib {
  type: BillGuideLibType;
  ID: string;
  compilationID: string;
  compilationName: string;
  billsLibID: number;
  billLibName: string;
  name: string;
  creator: string;
  createDate: string;
}

// 指引项类型
export enum BillGuideItemType {
  // 工作内容
  CONTENT = 0,
  // 定额
  RATION,
}

export interface IBillGuideCommonProp {
  outputItemCharacter?: boolean;
  required?: boolean;
  unit?: string; // 单位，识别辅助运距功能
  interval?: string; // 区间，辅助运距功能
  isMaterial?: boolean; // 材料，辅助替换材料规格
  isDefaultOption?: boolean; // 是否是默认选项
}

// 指引原数据
export interface IBillGuideItemResult extends IBillGuideCommonProp {
  libID: string;
  ID: string;
  ParentID: string;
  NextSiblingID: string;
  billsID: string;
  name: string;
  type: BillGuideItemType;
  rationID?: number;
  deleted?: boolean;
}

// 指引数据
export interface IBillGuideItem extends IBillGuideCommonProp {
  libID: string;
  ID: string;
  parentID: string;
  seq: number;
  billID: string;
  name: string;
  type: BillGuideItemType;
  rationID?: number;
  select?: boolean;
}

// 清单精灵数据选项
export interface IBillElfOption {
  ID: string; // 选项对应原数据ID
  name: string;
  checked: boolean;
  unit?: string; // 单位，来自父项（工序）
}

// 清单精灵数据
export interface IBillElfItem extends IBillGuideCommonProp {
  ID: string;
  parentID: string;
  seq: number;
  // 工序
  process: string;
  // 工序选项数据
  options: IBillElfOption[];
  // 选项名称
  optionName: string;
  // 是否是用户额外新增行，而非标准数据
  isAdditional: boolean;
  outputItemCharacter?: boolean;
  required?: boolean;
  unit?: string; // 单位，识别辅助运距功能
  isMaterial?: boolean; // 材料，辅助替换材料规格
  isDefaultOption?: boolean; // 是否是默认选项
}

// 清单下记录的清单精灵选项数据（1.为了后续为项目特征识别提供样本 2.审核可知道插入的定额是否准确）
export interface IElfItem {
  // 工序
  process: string;
  // 工序对应的标准清单精灵节点ID，如果没有则说明是空行输入的
  processID?: string;
  // 选项值
  option: string;
  // 选项对应的标准清单精灵节点ID，如果没有则说明是空行输入的
  optionID?: string;
  // 辅助换算（运距、厚度等）值，是用户输入的，但是由于需要输出样本，需要根据输入值，关联背后选项文本（比如是区间）
  refOptionValue?: string;
  // 是否是额外的非标准的，这个标记只是方便前台清单精灵功能
  isAdditional: boolean;
  // 记录这个选项对应的标准定额ID（考虑其他功能可能有用）
  rationID?: number;
}

// 清单精灵单条材料
export interface IElfGlj {
  gljID: number;
  name?: string;
  specs?: string;
}

// 清单精灵材料：用于清单精灵材料替换
export interface IElfMaterial {
  // 清单精灵库
  libID: string;
  ID: string;
  billID: string;
  materials: IElfGlj[];
}
