import { RunningStatusMap, type RunningStatus } from '@/constants/knowledge';
import type { IDocumentInfo } from './document';


/**
{
  "code": 0,
  "data": {
    "avatar": null,
    "chunk_num": 1,
    "create_date": "Mon, 03 Nov 2025 10:39:46 GMT",
    "create_time": 1762137586655,
    "created_by": "cd77706ca4d811f0876d42010a8e0002",
    "description": "  ",
    "doc_num": 2,
    "embd_id": "qwen3-embedding:4b@Ollama#cd77706ca4d811f0876d42010a8e0002",
    "graphrag_task_finish_at": null,
    "graphrag_task_id": null,
    "id": "5c7b2afeb85e11f09ce242010a8e0004",
    "language": "English",
    "mindmap_task_finish_at": null,
    "mindmap_task_id": null,
    "name": "k1123",
    "pagerank": 0,
    "parser_config": {
      "auto_keywords": 0,
      "auto_questions": 0,
      "chunk_token_num": 512,
      "delimiter": "\n",
      "graphrag": {
        "entity_types": [
          "organization",
          "person",
          "geo",
          "event",
          "category"
        ],
        "method": "light",
        "use_graphrag": true
      },
      "html4excel": false,
      "layout_recognize": "DeepDOC",
      "raptor": {
        "max_cluster": 64,
        "max_token": 256,
        "prompt": "Please summarize the following paragraphs. Be careful with the numbers, do not make things up. Paragraphs as following:\n      {cluster_content}\nThe above is the content you need to summarize.",
        "random_seed": 0,
        "threshold": 0.1,
        "use_raptor": true
      },
      "toc_extraction": false,
      "topn_tags": 3
    },
    "parser_id": "naive",
    "permission": "me",
    "pipeline_id": "",
    "raptor_task_finish_at": null,
    "raptor_task_id": null,
    "similarity_threshold": 0.2,
    "status": "1",
    "tenant_id": "cd77706ca4d811f0876d42010a8e0002",
    "token_num": 256,
    "update_date": "Mon, 03 Nov 2025 16:30:55 GMT",
    "update_time": 1762158655195,
    "vector_similarity_weight": 0.3
  },
  "message": "success"
}
 */



/**
 * 知识库接口定义
 * 包含知识库的基本信息、配置和状态
 */
export interface IKnowledge {
  /** 知识库头像，可选字段 */
  avatar?: any;
  /** 知识库中的文档块数量 */
  chunk_num: number;
  /** 知识库Pagerank值 */
  pagerank: number;
  /** 创建日期（字符串格式） */
  create_date: string;
  /** 创建时间戳 */
  create_time: number;
  /** 创建者ID */
  created_by: string;
  /** 知识库描述 */
  description: string;
  /** 知识库中的文档数量 */
  doc_num: number;
  /** 知识库语言 */
  language: string;
  /** 知识库唯一标识符 */
  id: string;
  /** 知识库名称 */
  name: string;
  /** 解析器配置 */
  parser_config: IParserConfig;
  /** 解析器ID */
  parser_id: string;
  /** 管道ID */
  pipeline_id?: string;
  /** 管道名称 */
  pipeline_name?: string;
  /** 管道头像 */
  pipeline_avatar?: string;
  /** 权限设置 */
  permission: string;
  /** 相似度阈值 */
  similarity_threshold: number;
  /** 知识库状态 */
  status: string;
  /** 租户ID */
  tenant_id: string;
  /** 令牌数量 */
  token_num: number;
  /** 更新日期（字符串格式） */
  update_date: string;
  /** 更新时间戳 */
  update_time: number;
  /** 向量相似度权重 */
  vector_similarity_weight: number;
  /** 嵌入模型ID */
  embd_id: string;
  /** 昵称 */
  nickname: string;
  /** 操作权限级别 */
  operator_permission: number;
  /** 知识库大小（字节） */
  size: number;
  /** Raptor任务完成时间，可选 */
  raptor_task_finish_at?: string;
  /** Raptor任务ID，可选 */
  raptor_task_id?: string;
  /** 思维导图任务完成时间，可选 */
  mindmap_task_finish_at?: string;
  /** 思维导图任务ID，可选 */
  mindmap_task_id?: string;
  /** GraphRAG任务完成时间，可选 */
  graphrag_task_finish_at?: string;
  /** GraphRAG任务ID，可选 */
  graphrag_task_id?: string;
}

/**
 * 知识库查询结果接口
 * 包含知识库列表和总数
 */
export interface IKnowledgeResult {
  /** 知识库列表 */
  kbs: IKnowledge[];
  /** 知识库总数 */
  total: number;
}

/**
 * Raptor配置接口
 * 用于配置是否启用Raptor功能
 {
    "max_cluster": 64,
    "max_token": 256,
    "prompt": "\u8bf7\u603b\u7ed3\u4ee5\u4e0b\u6bb5\u843d\u3002 
    \u5c0f\u5fc3\u6570\u5b57\uff0c\u4e0d\u8981\u7f16\u9020\u3002 \u6bb5\u843d\u5982\u4e0b\uff1a\n      
    {cluster_content}\n\u4ee5\u4e0a\u5c31\u662f\u4f60\u9700\u8981\u603b\u7ed3\u7684\u5185\u5bb9\u3002",
    "random_seed": 0,
    "threshold": 0.1,
    "use_raptor": false
  }
 */
export interface IRaptor {
  /** 是否使用Raptor */
  use_raptor: boolean;
  /** 最大集群数，可选 */
  max_cluster?: number;
  /** 最大令牌数，可选 */
  max_token?: number;
  /** 提示模板，可选 */
  prompt?: string;
  /** 随机种子，可选 */
  random_seed?: number;
  /** 阈值，可选 */
  threshold?: number;
}

/**
 * GraphRAG配置接口
 * 用于配置是否启用GraphRAG功能
  {
      "entity_types": [
          "organization",
          "person",
          "geo",
          "event",
          "category"
      ],
      "method": "light",
      "use_graphrag": true
  }
 */
export interface IGraphrag {
  use_graphrag: boolean;
  /** 实体类型列表，可选 */
  entity_types?: string[];
  /** 方法，可选 */ 
  method?: string;
}

/**
 * 解析器配置接口
 * 定义文档解析的各种参数和选项
 */
export interface IParserConfig {
  /** 起始页码，可选 */
  from_page?: number;
  /** 结束页码，可选 */
  to_page?: number;
  /** 自动关键词数量，可选 */
  auto_keywords?: number;
  /** 自动问题数量，可选 */
  auto_questions?: number;
  /** 每个文档块的令牌数量，可选 */
  chunk_token_num?: number;
  /** 分隔符，可选 */
  delimiter?: string;
  /** 是否将HTML转换为Excel格式，可选 */
  html4excel?: boolean;
  /** 是否启用布局识别，可选 */
  layout_recognize?: boolean;
  /** Raptor配置，可选 */
  raptor?: IRaptor;
  /** 标签知识库ID列表，可选 */
  tag_kb_ids?: string[];
  /** 顶部标签数量，可选 */
  topn_tags?: number;
  /** GraphRAG配置，可选 */
  graphrag?: IGraphrag;
  /** 目录提取配置，可选 */
  toc_extraction?: boolean;
}

/**
 * 知识库文件解析器配置接口
 * 定义文件解析的具体参数
 */
export interface IKnowledgeFileParserConfig {
  /** 每个文档块的令牌数量 */
  chunk_token_num: number;
  /** 是否启用布局识别 */
  layout_recognize: boolean;
  /** 页面范围数组 */
  pages: number[][];
  /** 任务页面大小 */
  task_page_size: number;
}

/**
 * 知识库文件接口
 * 定义知识库中单个文件的信息和状态
 */
export interface IKnowledgeFile {
  /** 文件中的文档块数量 */
  chunk_num: number;
  /** 创建日期（字符串格式） */
  create_date: string;
  /** 创建时间戳 */
  create_time: number;
  /** 创建者ID */
  created_by: string;
  /** 文件唯一标识符 */
  id: string;
  /** 所属知识库ID */
  kb_id: string;
  /** 文件存储位置 */
  location: string;
  /** 文件名称 */
  name: string;
  /** 解析器ID */
  parser_id: string;
  /** 处理开始时间，可选 */
  process_begin_at?: any;
  /** 处理持续时间 */
  process_duration: number;
  /** 解析进度百分比 */
  progress: number;
  /** 解析进度消息 */
  progress_msg: string;
  /** 解析运行状态 */
  run: RunningStatus;
  /** 文件大小（字节） */
  size: number;
  /** 文件来源类型 */
  source_type: string;
  /** 文件状态（1 启用/ 0 禁用） */
  status: string;
  /** 文件缩略图（base64编码），可选 */
  thumbnail?: any;
  /** 文件中的令牌数量 */
  token_num: number;
  /** 文件类型 */
  type: string;
  /** 更新日期（字符串格式） */
  update_date: string;
  /** 更新时间戳 */
  update_time: number;
  /** 解析器配置 */
  parser_config: IKnowledgeFileParserConfig;
}

/**
 * 租户信息接口
 * 定义租户的各种服务配置
 */
export interface ITenantInfo {
  /** 自动语音识别服务ID */
  asr_id: string;
  /** 嵌入模型服务ID */
  embd_id: string;
  /** 图像转文本服务ID */
  img2txt_id: string;
  /** 大语言模型服务ID */
  llm_id: string;
  /** 租户名称 */
  name: string;
  /** 解析器ID列表 */
  parser_ids: string;
  /** 租户角色 */
  role: string;
  /** 租户ID */
  tenant_id: string;
  /** 聊天服务ID */
  chat_id: string;
  /** 语音转文本服务ID */
  speech2text_id: string;
  /** 文本转语音服务ID */
  tts_id: string;
  //  rerank模型服务ID
  rerank_id: string;
}

/**
 * 文档块接口
 * 定义知识库中单个文档块的信息
 */
export interface IChunk {
  /** 是否启用，0：未启用，1：启用 */
  available_int: number;
  /** 文档块唯一标识符 */
  chunk_id: string;
  /** 带权重的内容 */
  content_with_weight: string;
  /** 所属文档ID */
  doc_id: string;
  /** 所属文档名称 */
  doc_name: string;
  /** 关联图像ID */
  image_id: string;
  /** 重要关键词列表，可选 */
  important_kwd?: string[];
  /** 问题关键词列表，可选 */
  question_kwd?: string[];
  /** 标签关键词列表，可选 */
  tag_kwd?: string[];
  /** 位置信息数组 */
  positions: number[][];
  /** 标签特征映射，可选 */
  tag_feas?: Record<string, number>;
}

export interface IChunkDetail extends IChunk {
  /** 文档块ID */
  id: string;
}


/**
 * 测试文档块接口
 * 用于知识库测试和检索的文档块信息
 */
export interface ITestingChunk {
  /** 文档块唯一标识符 */
  chunk_id: string;
  /** 内容的LTKS表示 */
  content_ltks: string;
  /** 带权重的内容 */
  content_with_weight: string;
  /** 所属文档ID */
  doc_id: string;
  /** 所属文档名称 */
  doc_name: string;
  /** 图像ID（旧字段） */
  img_id: string;
  /** 图像ID */
  image_id: string;
  /** 重要关键词列表 */
  important_kwd: any[];
  /** 所属知识库ID */
  kb_id: string;
  /** 相似度分数 */
  similarity: number;
  /** 词汇相似度分数 */
  term_similarity: number;
  /** 向量表示 */
  vector: number[];
  /** 向量相似度分数 */
  vector_similarity: number;
  /** 高亮显示的内容 */
  highlight: string;
  /** 位置信息数组 */
  positions: number[][];
  /** 文档名称关键词 */
  docnm_kwd: string;
  /** 文档类型关键词 */
  doc_type_kwd: string;
}

/**
 * 测试文档接口
 * 用于知识库测试的文档统计信息
 */
export interface ITestingDocument {
  /** 文档中的块数量 */
  count: number;
  /** 文档ID */
  doc_id: string;
  /** 文档名称 */
  doc_name: string;
}

/**
 * 测试结果接口
 * 知识库测试的完整结果
 */
export interface ITestingResult {
  /** 匹配的文档块列表 */
  chunks: ITestingChunk[];
  /** 匹配的文档列表 */
  documents: ITestingDocument[];
  /** 总匹配数量 */
  total: number;
  /** 标签统计，可选 */
  labels?: Record<string, number>;
}

/**
 * 下一代测试结果接口
 * 改进版本的知识库测试结果
 */
export interface INextTestingResult {
  /** 匹配的文档块列表 */
  chunks: ITestingChunk[];
  /** 文档聚合统计 */
  doc_aggs: ITestingDocument[];
  /** 总匹配数量 */
  total: number;
  /** 标签统计，可选 */
  labels?: Record<string, number>;
  /** 是否已运行，可选 */
  isRuned?: boolean;
}

export interface IChunkListResult {
  /** 文档块列表 */
  chunks: IChunk[];
  /** 文档信息列表 */
  doc: IDocumentInfo[]
  /** 总匹配数量 */
  total: number;
}

/**
 * 重命名标签类型
 * 用于标签重命名操作
 */
export type IRenameTag = { 
  /** 原标签名 */
  fromTag: string; 
  /** 新标签名 */
  toTag: string; 
};

/**
 * 知识图谱接口
 * 定义知识库的图谱结构
 */
export interface IKnowledgeGraph {
  /** 图谱数据结构 */
  graph: Record<string, any>;
  /** 思维导图数据（已注释） */
  // mind_map: TreeData;
}

/** 文档日志项接口 */
export interface IDocumentLog {
  fileName: string;
  status: RunningStatus;
  statusName: typeof RunningStatusMap[keyof typeof RunningStatusMap];
}

/** 日志统计项接口 */
export interface IOverviewTital {
  cancelled: number;
  failed: number;
  finished: number;
  processing: number;
}

/** 日志项接口 */
export interface IFileLogItem {
  create_date: string;
  create_time: number;
  document_id: string;
  document_name: string;
  document_suffix: string;
  document_type: string;
  dsl: any;
  path: string[];
  task_id: string;
  id: string;
  name: string;
  kb_id: string;
  operation_status: string;
  parser_id: string;
  pipeline_id: string;
  pipeline_title: string;
  avatar: string;
  process_begin_at: null | string;
  process_duration: number;
  progress: number;
  progress_msg: string;
  source_from: string;
  status: string;
  task_type: string;
  tenant_id: string;
  update_date: string;
  update_time: number;
}

/** 日志列表接口 */
export interface IFileLogList {
  logs: Array<IFileLogItem & IDocumentLog>;
  total: number;
}
