/**
 * 看板数据类型定义
 */

/**
 * 完整看板数据（原接口返回）
 */
export interface DashboardVO {
  /** 统计概览 */
  overview: StatisticsOverview;
  /** 位置树（含设备信息） */
  locationTree: LocationTreeNode[];
  /** 成功率趋势数据 */
  successRateTrends: SuccessRateTrend[];
  /** 告警统计列表 */
  alarmStats: AlarmStatVO[];
}

/**
 * 统计概览
 */
export interface StatisticsOverview {
  /** 设备总数 */
  deviceTotal: number;
  /** 在线数量 */
  onlineCount: number;
  /** 离线数量 */
  offlineCount: number;
  /** 告警数量 */
  alarmCount: number;
}

/**
 * 告警统计
 */
export interface AlarmStatVO {
  /** 告警时间 */
  alarmTime: string;
  /** 设备名称 */
  deviceName: string;
  /** 位置 */
  location: string;
  /** 告警级别 */
  alarmLevel: string;
  /** 告警行为 */
  alarmAction: string;
}

/**
 * 实时统计数据（接口1返回）
 * 按秒刷新：顶部统计 + 告警列表
 */
export interface RealtimeStats {
  /** 统计概览 */
  overview: StatisticsOverview;
  /** 告警统计列表 */
  alarmStats: AlarmStatVO[];
}

/**
 * 位置树节点（接口2返回）
 * 用于构建位置树，当 locationType = 3 时表示设备节点
 * 前端通过 deviceId 匹配 WebSocket 实时数据
 */
export interface LocationTreeNode {
  // ==================== 位置信息 ====================
  /** 位置ID */
  id: number;
  /** 位置编号 */
  locationCode: string;
  /** 位置别名 */
  locationAlias: string;
  /** 位置类型 (1-车间; 2-工序; 3-工位/设备) */
  locationType: string;
  /** 父级位置ID */
  parentId: number | null;

  // ==================== 设备信息（仅当 locationType=3 时有值） ====================
  /** 设备ID（前端用于匹配 WebSocket 数据） */
  deviceId?: number;
  /** 设备编号 */
  deviceCode?: string;
  /** 设备名称 */
  deviceName?: string;
  /** 在线状态 (1-在线; 0-离线) */
  onlineStatus?: string;
  /** 告警状态 (0-正常; 1-告警) */
  alarmStatus?: string;

  // ==================== 子节点 ====================
  /** 子节点列表 */
  children?: LocationTreeNode[];
}

/**
 * WebSocket 实时推送的读取记录数据
 * 由 C# 服务推送，前端通过 deviceId 匹配位置树中的设备节点
 */
export interface WebSocketReadRecord {
  /** 记录ID */
  objid: number;
  /** 设备ID（用于匹配位置树中的设备节点） */
  deviceId: number;
  /** 读取状态 (1-成功; 0-失败) */
  readStatus: string;
  /** 标签信息/条码 */
  epcStr: string;
  /** 是否报警 (1-是; 0-否) */
  alarmFlag: string;
  /** 告警级别 */
  alarmLevel: string;
  /** 告警类型 */
  alarmType: string;
  /** 告警内容 */
  alarmAction: string;
  /** 记录时间 (ISO 8601 格式) */
  recordTime: string;
}

/**
 * 成功率趋势（接口3返回）
 * 按小时统计，同时返回今日和昨日的成功率
 */
export interface SuccessRateTrend {
  /** 时间点（小时，如 "09:00"） */
  timePoint: string;
  /** 今日成功率（百分比，如 98.5） */
  successRate: number | null;
  /** 昨日同一小时成功率 */
  yesterdaySuccessRate: number | null;
}
