// 农机负载设备数据类型定义

// 设备库中的设备实例
export interface DeviceInstance {
  id: string;
  deviceTypeId: string; // 设备类型ID
  
  // 设备信息
  deviceName: string;
  serialNumber: string; // 设备序列号
  purchaseDate?: string; // 采购日期
  warrantyExpiry?: string; // 保修期限
  
  // 设备参数配置（根据设备类型的参数模板配置）
  parameters: Record<string, any>;
  
  // 设备状态
  status: 'available' | 'mounted' | 'maintenance' | 'damaged' | 'retired';
  currentMachineryId?: string; // 当前挂载的农机ID（如果已挂载）
  
  // 备注
  remarks?: string;
  
  // 操作记录
  createdBy: string;
  createdAt: string;
  updatedAt: string;
}

// 挂载记录（设备与农机的关联关系）
export interface MountRecord {
  id: string;
  machineryId: string; // 所属农机ID
  deviceId: string; // 设备实例ID
  
  // 挂载信息
  mountedAt: string; // 挂载时间
  unmountedAt?: string; // 拆卸时间
  status: 'mounted' | 'unmounted';
  
  // 备注
  mountRemarks?: string; // 挂载备注
  unmountRemarks?: string; // 拆卸备注
  
  // 操作记录
  mountedBy: string;
  unmountedBy?: string;
  createdAt: string;
  updatedAt: string;
}

// 兼容旧的 MountedDevice 类型（逐步迁移）
export interface MountedDevice {
  id: string;
  machineryId: string;
  deviceTypeId: string;
  deviceName: string;
  serialNumber: string;
  mountedAt: string;
  unmountedAt?: string;
  status: 'mounted' | 'unmounted';
  parameters: Record<string, any>;
  remarks?: string;
  operator: string;
  createdAt: string;
  updatedAt: string;
}

export interface DeviceType {
  id: string;
  name: string;
  category: DeviceCategory;
  
  // 元数据
  manufacturer?: string; // 品牌
  model?: string; // 型号
  communicationProtocol?: string; // 通信协议：MQTT, HTTP, RS485等
  dataFormat?: string; // 数据格式：JSON, XML, Binary等
  
  // 参数定义
  parameterDefinitions: ParameterDefinition[];
  
  // 其他
  description?: string;
  icon?: string;
  
  createdAt: string;
  updatedAt: string;
}

export type DeviceCategory = 
  | '摄像头'
  | '北斗终端'
  | 'GPS终端'
  | '转速传感器'
  | '油耗传感器'
  | '温度传感器'
  | '湿度传感器'
  | '深度传感器'
  | '流量传感器'
  | '其他';

export interface ParameterDefinition {
  key: string;
  label: string;
  type: 'string' | 'number' | 'boolean' | 'select';
  required?: boolean;
  defaultValue?: any;
  options?: { label: string; value: any }[];
  unit?: string;
  min?: number;
  max?: number;
  description?: string;
}

// 设备监控数据
export interface DeviceMonitoringData {
  deviceId: string;
  machineryId: string;
  timestamp: string;
  data: Record<string, any>;
}

// 实时位置数据
export interface LocationData {
  machineryId: string;
  latitude: number;
  longitude: number;
  altitude?: number;
  speed?: number; // km/h
  heading?: number; // 方位角，0-360度
  accuracy?: number; // 定位精度，米
  timestamp: string;
}

// 工作状态
export interface MachineryWorkState {
  machineryId: string;
  state: WorkState;
  
  // 工况数据
  ignition: boolean; // 点火状态
  speed: number; // 行驶速度 km/h
  ptoStatus: boolean; // PTO（动力输出）状态
  engineRpm?: number; // 发动机转速
  fuelLevel?: number; // 油量百分比
  
  // 作业数据
  workingArea?: number; // 作业面积（亩）
  workingRate?: number; // 作业速率（亩/小时）
  
  timestamp: string;
}

export type WorkState = '熄火' | '行驶中' | '作业中' | '故障' | '待机';

// 作业轨迹
export interface WorkTrack {
  id: string;
  machineryId: string;
  taskId?: string;
  startTime: string;
  endTime?: string;
  points: LocationData[];
  totalDistance?: number; // 总距离，公里
  totalArea?: number; // 总作业面积，亩
  averageSpeed?: number; // 平均速度 km/h
}

// 故障诊断
export interface FaultDiagnosis {
  id: string;
  machineryId: string;
  machineryName?: string;
  
  // 故障信息
  faultCode: string;
  faultName: string;
  faultLevel: 'info' | 'warning' | 'error' | 'critical';
  description: string;
  
  // 诊断结果
  diagnosis?: string;
  predictedCause?: string;
  solution?: string;
  knowledgeBaseIds?: string[]; // 关联的知识库
  
  // 时间
  detectedAt: string;
  resolvedAt?: string;
  
  // 状态
  status: '待处理' | '已处理' | '已忽略';
  
  // 处理信息
  handler?: string;
  handleNotes?: string;
}

// 健康评估
export interface HealthAssessment {
  machineryId: string;
  machineryName?: string;
  
  // 评估结果
  score: number; // 0-100
  level: '优秀' | '良好' | '注意' | '警告';
  
  // 评估指标
  metrics: {
    runningHours: number; // 运行小时数
    faultCount: number; // 故障次数
    maintenanceScore: number; // 维保得分
    workloadScore: number; // 作业负荷得分
  };
  
  // 趋势分析
  trend: 'improving' | 'stable' | 'declining';
  
  // 建议
  recommendations: string[];
  
  assessedAt: string;
  assessedBy: string;
}

// 地理坐标点
export interface GeoPoint {
  latitude: number;
  longitude: number;
}

// 电子围栏
export interface GeoFence {
  id: string;
  name: string;
  type: 'circle' | 'polygon';
  
  // 圆形围栏
  center?: GeoPoint;
  radius?: number; // 米
  
  // 多边形围栏
  points?: GeoPoint[];
  
  // 关联农机
  machineryIds: string[];
  
  // 规则
  alertOnExit: boolean; // 离开围栏时报警
  alertOnEnter: boolean; // 进入围栏时报警
  
  // 工时核算
  countWorkHours: boolean; // 是否计算围栏内工时
  
  // 状态
  enabled: boolean;
  
  createdAt: string;
  updatedAt: string;
  createdBy: string;
  updatedBy?: string;
}

// 围栏报警记录
export interface GeoFenceAlert {
  id: string;
  fenceId: string;
  fenceName: string;
  machineryId: string;
  machineryName?: string;
  
  alertType: 'enter' | 'exit';
  location: GeoPoint;
  alertedAt: string;
  
  // 处理状态
  acknowledged: boolean;
  acknowledgedBy?: string;
  acknowledgedAt?: string;
}
