/** 工业图像处理相关类型定义 */

/** 项目实体接口定义 */
export interface ProjectInfo {
  projectId: string // 项目id
  projectName: string // 项目名称
  scale?: string // 项目规模
  turbineModel?: string // 风机型号
  status?: number // 状态：0待施工，1施工中，2已完工，3已验收，4已验收
  statusLabel?: string // 项目状态文本
  coverUrl?: string // 项目封面
  client?: string // 委托单位
  clientContact?: string // 委托单位联系人
  clientPhone?: string // 委托单位联系电话
  farmName?: string // 风场名称
  farmAddress?: string // 风场地址
  inspectionUnit?: string // 检查单位
  inspectionContact?: string // 检查单位联系人
  inspectionPhone?: string // 检查单位联系电话
  projectManagerId?: string // 项目经理id
  projectManagerName?: string // 项目经理名称
  qualityOfficerId?: string // 质量员id
  auditorId?: string // 安全员id
  constructionPersonnel?: string // 施工人员
  constructionPersonnelId?: string // 施工人员id
  constructionTeamLeaderId?: string // 施工组长id
  constructorIds?: string // 施工人员id
  constructorName?: string // 施工人员名称
  workType?: string // 项目工作类型 可能有多项，逗号分隔
  job?: string // 项目工作内容 可能有多项，json对象保存
  discloseContent?: string // 交底内容
  technicalContent?: string // 技术方案内容
  safetyContent?: string // 安全措施内容
  createBy?: string // 创建者
  createTime?: string // 创建时间
  updateBy?: string // 更新者
  idList?: string[] // id集合
}

/** 机组信息接口 */
export interface TurbineInfo {
  turbineId?: string // 机组ID
  projectId: string // 项目ID
  turbineName: string // 机组名称
  turbineDesc?: string // 机组描述
  turbineManufacturer?: string // 机组厂商
  turbineModel?: string // 机组型号
  power?: string // 功率
  status?: number // 状态
  createTime?: string // 创建时间
  updateTime?: string // 更新时间
  parts?: PartInfo[] // 部件列表
}

/** 部件信息接口 */
export interface PartInfo {
  partId: string // 部件ID
  partCode?: string // 部件编码
  partDesc?: string // 部件描述
  partManufacturer?: string // 部件厂商
  partModel?: string // 部件型号
  partName: string // 部件名称
  partType: string // 部件类型
  turbineId: string // 机组ID
  createTime?: string // 创建时间
  updateTime?: string // 更新时间
}

/** 项目查询参数 */
export interface ProjectQuery {
  projectName?: string
  status?: number
  page?: number
  pageSize?: number
}

/** 机组查询参数 */
export interface TurbineQuery {
  projectId?: string
  turbineName?: string
  turbineDesc?: string
  turbineManufacturer?: string
  turbineModel?: string
}

/** 部件查询参数 */
export interface PartQuery {
  turbineId?: string
  partName?: string
  partType?: string
  partManufacturer?: string
  partModel?: string
}

/** 分页结果接口 */
export interface PageResult<T> {
  list: T[]
  total: number
  page: number
  pageSize: number
}

/** 项目节点类型 */
export interface ProjectTreeNode {
  id: string
  name: string
  type: 'project' | 'turbine' | 'part'
  parentId?: string
  children?: ProjectTreeNode[]
  /** 图像数量 */
  imageCount?: number
  /** 状态 */
  status?: string | number
  /** 创建时间 */
  createTime?: string
  /** 是否为叶子节点 */
  isLeaf?: boolean
  /** 是否已加载子节点 */
  loaded?: boolean
  /** 是否展开 */
  expanded?: boolean
  /** 原始数据 */
  rawData?: ProjectInfo | TurbineInfo | PartInfo
}

/** 缺陷标注信息 */
export interface DefectAnnotation {
  id: string
  /** 缺陷类型 */
  type: string
  /** 缺陷名称 */
  name: string
  /** 置信度 */
  confidence: number
  /** 边界框 [x, y, width, height] */
  bbox: [number, number, number, number]
  /** 缺陷描述 */
  description?: string
  /** 标注方式 */
  annotationType: 'auto' | 'manual'
  /** 标注人员 */
  annotator?: string
  /** 标注时间 */
  annotationTime?: string
  /** 是否已确认 */
  confirmed?: boolean
}

/** 工业图像信息 */
export interface IndustrialImage {
  id: string
  /** 图像名称 */
  name: string
  /** 图像路径 */
  path: string
  /** 图像路径（API返回字段）*/
  imagePath?: string
  /** 缩略图路径 */
  thumbnailPath?: string
  /** 图像类型 */
  type: string
  /** 文件大小 */
  size: number
  /** 图像宽度 */
  width?: number
  /** 图像高度 */
  height?: number
  /** 所属项目ID */
  projectId: string
  /** 所属组件ID */
  componentId?: string
  /** 拍摄时间 */
  captureTime?: string
  /** 处理状态 */
  processStatus?: 'pending' | 'processing' | 'completed' | 'failed'
  /** 缺陷数量 */
  defectCount?: number
  /** 缺陷标注列表 */
  annotations?: DefectAnnotation[]
  /** 是否已标注 */
  isAnnotated?: boolean
  /** 标注状态 */
  annotationStatus?: 'none' | 'auto' | 'manual' | 'verified'
  /** 创建时间 */
  createTime?: string
  /** 更新时间 */
  updateTime?: string
  
  // 扩展字段 - 来自真实API
  /** 部件名称 */
  partName?: string
  /** 相机制造商 */
  cameraManufacturer?: string
  /** 相机型号 */
  cameraModel?: string
  /** 采集员姓名 */
  collectorName?: string
  /** 焦距 */
  focalDistance?: string
  /** GPS坐标 */
  gps?: string
  /** 湿度 */
  humidness?: number
  /** 拍摄距离 */
  shootingDistance?: number
  /** 拍摄方式 */
  shootingMethod?: string
  /** 拍摄方式标签 */
  shootingMethodLabel?: string
  /** 温度 */
  temperature?: string
  /** 天气 */
  weather?: string
  /** 天气标签 */
  weatherLabel?: string
  /** 风力等级 */
  windLevel?: number
}

/** 图像查询参数 */
export interface ImageQuery {
  /** 项目ID */
  projectId?: string
  /** 组件ID */
  componentId?: string
  /** 图像名称搜索 */
  keyword?: string
  /** 图像类型 */
  type?: string
  /** 处理状态 */
  processStatus?: string
  /** 标注状态 */
  annotationStatus?: string
  /** 页码 */
  page?: number
  /** 每页数量 */
  size?: number
}

/** 图像导入参数 */
export interface ImageImportParams {
  /** 项目ID */
  projectId: string
  /** 组件ID */
  componentId?: string
  /** 图像来源 */
  imageSource?: string
  /** 上传用户 */
  uploadUser?: string
  /** 海拔 */
  altitude?: string
  /** 纬度 */
  latitude?: string
  /** 经度 */
  longitude?: string
  /** 部件ID */
  partId?: string
  /** 是否自动标注 */
  autoAnnotate?: boolean
  /** 标注类型 */
  annotationTypes?: string[]
}

/** 图像上传参数（基于新API） */
export interface ImageUploadParams {
  /** 图像源 */
  imageSource: string
  /** 部件ID */
  partId: string
  /** 采集员ID */
  collectorId?: string
  /** 采集员姓名 */
  collectorName?: string
  /** 湿度（百分比） */
  humidness?: number
  /** GPS坐标 */
  gps?: string
  /** X分辨率 */
  xResolution?: string
  /** Y分辨率 */
  yResolution?: string
  /** 海拔 */
  altitude?: string
  /** 相机制造商 */
  cameraManufacturer?: string
  /** 相机型号 */
  cameraModel?: string
  /** 焦距 */
  focalDistance?: string
  /** 35毫米焦距 */
  focalDistance35?: string
  /** 图像高度 */
  imageHeight?: string
  /** 图像ID */
  imageId?: string
  /** 图像名称 */
  imageName?: string
  /** 图像路径 */
  imagePath?: string
  /** 图像分辨率 */
  imageResolution?: string
  /** 图像大小 */
  imageSize?: string
  /** 图像宽度 */
  imageWidth?: string
  /** 纬度 */
  latitude?: string
  /** 经度 */
  longitude?: string
  /** 焦平面分辨率单位 */
  resolutionUnits?: string
  /** 拍摄时间 */
  shootingTime?: string
  /** 拍摄距离 */
  shootingDistance?: number
  /** 拍摄方式 */
  shootingMethod?: string
  /** 拍摄时间开始 */
  shootingTimeBegin?: string
  /** 拍摄时间结束 */
  shootingTimeEnd?: string
  /** 温度最高 */
  temperatureMax?: number
  /** 温度最低 */
  temperatureMin?: number
  /** 天气 */
  weather?: string
  /** 风力等级 */
  windLevel?: number
}

/** 自动标注参数 */
export interface AutoAnnotationParams {
  /** 图像ID */
  imageId: string
  /** 标注类型 */
  annotationTypes: string[]
  /** 置信度阈值 */
  confidenceThreshold?: number
  /** 其他参数 */
  params?: Record<string, any>
}

/** 手动标注参数 */
export interface ManualAnnotationParams {
  /** 图像ID */
  imageId: string
  /** 标注列表 */
  annotations: Omit<DefectAnnotation, 'id' | 'annotationTime'>[]
}

/** 标注结果 */
export interface AnnotationResult {
  /** 图像ID */
  imageId: string
  /** 标注列表 */
  annotations: DefectAnnotation[]
  /** 标注数量 */
  annotationCount: number
  /** 处理时间 */
  processTime?: number
  /** 标注状态 */
  status: 'success' | 'failed'
  /** 错误信息 */
  error?: string
}

/** 图像处理参数 */
export interface ImageProcessParams {
  /** 图像ID */
  imageId: string
  /** 处理类型 */
  processType: 'defect_detection' | 'quality_analysis' | 'measurement'
  /** 处理参数 */
  params?: Record<string, any>
}

/** 图像处理结果 */
export interface ImageProcessResult {
  /** 处理ID */
  processId: string
  /** 图像ID */
  imageId: string
  /** 处理类型 */
  processType: string
  /** 处理状态 */
  status: 'pending' | 'processing' | 'completed' | 'failed'
  /** 处理结果 */
  result?: {
    /** 检测到的缺陷 */
    defects?: Array<{
      id: string
      type: string
      confidence: number
      bbox: [number, number, number, number]
      description?: string
    }>
    /** 质量分析结果 */
    qualityScore?: number
    /** 测量结果 */
    measurements?: Array<{
      type: string
      value: number
      unit: string
    }>
  }
  /** 处理耗时（毫秒） */
  processTime?: number
  /** 错误信息 */
  error?: string
  /** 创建时间 */
  createTime?: string
  /** 完成时间 */
  completeTime?: string
} 