import { ServiceResponse } from './response';
import { ServiceRequestPage } from './pageInput'
import { PageResponse } from './pageResponse'

// 设备状态枚举
export enum DeviceStatusEnum {
  Normal = 0,    // 正常
  Fault = 1,     // 故障
  Offline = 2,   // 离线
  Maintenance = 3 // 维护中
}

// 维护标志枚举
export enum MaintenanceFlagEnum {
  None = 0,      // 无
  Regular = 1,   // 定期维护
  Emergency = 2  // 紧急维护
}

// 过滤条件
export interface ReactorFilter {
  /** 设备编号 */
  keyWord?: string | null
  /** 开始时间 */
  stDate?: string | null
  /** 结束时间 */
  edDate?: string | null
  /** 房间ID */
  roomId?: number | null
}

// 反应器DTO
export interface ReactorDto {
  /** 设备反应器ID */
  id?: number
  /** 排序 */
  sort?: number
  /** 设备编号 */
  deviceNo?: string | null
  /** 资产编号 */
  assetNo?: string | null
  /** 产品ID */
  productID?: string | null
  /** 型号 */
  model?: string | null
  /** 规格 */
  specification?: string | null
  /** 容量（g） */
  capacity?: number
  /** 房间ID */
  roomID?: number
  /** 房间名称 */
  roomName?: string | null
  /** 负责人ID */
  principalId?: number
  /** 负责人姓名 */
  principalName?: string | null
  /** 设备状态 */
  deviceStatus?: DeviceStatusEnum
  /** 设备状态描述 */
  deviceStatusDesc?: string | null
  /** 维护标志 */
  maintenanceFlag?: MaintenanceFlagEnum
  /** 维护标志描述 */
  maintenanceFlagDesc?: string | null
  /** 错误码 */
  errorCode?: string | null
  /** 状态（启用禁用） */
  status?: boolean
  /** 是否维护中 */
  isMaintenance?: boolean
  /** 维护时间 */
  maintenanceTime?: string | null
  /** 创建时间 */
  createdTime?: string | null
  /** 修改时间 */
  modifiedTime?: string | null
  /** 压力单位 */
  pressureUnit?: string | null
  /** 是否外置泵 */
  isExternalPump?: boolean
}

export interface ReactorDtoWithList extends ReactorDto {
  pump1Speed?: number
  pump2Speed?: number
  pump3Speed?: number
  pump4Speed?: number
  pump5Speed?: number
  pump6Speed?: number
  pump7Speed?: number
  pump8Speed?: number
  pump1ConfigId?: number
  pump2ConfigId?: number
  pump3ConfigId?: number
  pump4ConfigId?: number
  pump5ConfigId?: number
  pump6ConfigId?: number
  pump7ConfigId?: number  
  pump8ConfigId?: number
}

/** 反应器添加和更新输入接口 */
export interface ReactorAddInputAndUpdateInput {
  /** 设备编号 */
  deviceNo?: string | null
  /** 资产编号 */
  assetNo?: string | null
  /** 产品ID */
  productID?: string | null
  /** 型号 */
  model?: string | null
  /** 规格 */
  specification?: string | null
  /** 容量（g） */
  capacity?: number
  /** 房间ID */
  roomID?: number
  /** 负责人ID */
  principalId?: number
  /** 设备状态 */
  deviceStatus?: DeviceStatusEnum
  /** 维护标志 */
  maintenanceFlag?: MaintenanceFlagEnum
  /** 维护时间 */
  maintenanceTime?: string | null
  /** 压力单位 */
  pressureUnit?: string | null
  /** 反应器地秤ID */
  equScaleId?: number
  /** 补料秤ID */
  feedingScaleId?: number
  /** 继电器ID */
  relayID?: number
  /** 报警器ID */
  equAlarmId?: number
  /** 警告下限 */
  warningLowerLimit?: number
  /** 警告上限 */
  warningUpperLimit?: number
  /** 错误码 */
  errorCode?: string | null
  /** 是否外置泵 */
  isExternalPump?: boolean
  /** OPC IP */
  opcip?: string | null
  /** OPC 端口 */
  opcPort?: string | null
  /** 排序 */
  sort?: number
  /** 主键Id */
  id?: number
  /** 泵1配置 */
  pump1: PumpConfig
  /** 泵2配置 */
  pump2: PumpConfig
  /** 泵3配置 */
  pump3: PumpConfig
  /** 泵4配置 */
  pump4: PumpConfig
  /** 泵5配置 */
  pump5: PumpConfig
  /** 泵6配置 */
  pump6: PumpConfig
  /** 泵7配置 */
  pump7: PumpConfig
  /** 泵8配置 */
  pump8: PumpConfig
}

// 反应器类型枚举项
export interface ReactorTypeEnumItem {
  /** 枚举值 */
  value: number
  /** 枚举名称 */
  name: string
  /** 显示名称/描述 */
  label: string
}

/** 泵配置接口 */
export interface PumpConfig {
  /** 速度 */
  speed?: number
  /** 超时时间 */
  timeout: number
  /** 异常信息 */
  exception: string
  /** 错误码 */
  errorCode: string
  /** 是否喂料 */
  isFeeding: boolean
  /** 速度偏移 */
  speedOffset: number
  /** 配置ID */
  configId?: number
}

/** 默认泵配置 */
export const defaultPumpConfig: PumpConfig = {
  speed: undefined,
  timeout: 0,
  exception: '',
  errorCode: '',
  isFeeding: true,
  speedOffset: 0,
  configId: undefined
}

// API 类型定义
export type ReactorPageInput = ServiceRequestPage<ReactorFilter>;
export type ReactorPageResponse = ServiceResponse<PageResponse<ReactorDto>>;
export type ReactorListResponse = ServiceResponse<ReactorDtoWithList[]>;
export type ReactorOutput = ServiceResponse<ReactorDto[]>;
export type ReactorAddInput = ReactorDto;
export type ReactorUpdateInput = ReactorDto;
export type ReactorTypeEnumListOutput = ServiceResponse<ReactorTypeEnumItem[]>;