import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {
  DashboardVO,
  RealtimeStats,
  LocationTreeNode,
  SuccessRateTrend,
  StatisticsOverview,
  AlarmStatVO
} from './types';

// ==================== 新增接口（按需刷新） ====================

/**
 * 【接口1】获取实时统计数据（按秒刷新）
 * 包含：顶部统计（设备数量、在线数量、离线数量、告警数量）+ 告警统计列表
 *
 * @param alarmLimit 告警列表限制数量（可选，不传则返回全部，供滚动显示）
 */
export const getRealtimeStats = (alarmLimit?: number): AxiosPromise<RealtimeStats> => {
  return request({
    url: '/rfid/dashboard/realtime',
    method: 'get',
    params: alarmLimit ? { alarmLimit } : {}
  });
};

/**
 * 【接口2】获取位置树（含设备信息）
 * 返回完整的位置树结构，位置类型为 3 时表示设备节点
 * 不返回读取记录数据，具体记录由 WebSocket 实时推送
 * 前端通过 deviceId 匹配 WebSocket 数据
 */
export const getLocationTree = (): AxiosPromise<LocationTreeNode[]> => {
  return request({
    url: '/rfid/dashboard/deviceStatus',
    method: 'get'
  });
};

/**
 * 【接口3】获取成功率趋势（按小时统计）
 * 不需要频繁刷新
 * 返回 24 条数据，每条包含今日和昨日的成功率
 */
export const getSuccessRateTrends = (): AxiosPromise<SuccessRateTrend[]> => {
  return request({
    url: '/rfid/dashboard/successRate',
    method: 'get'
  });
};

// ==================== 原有接口（保留） ====================

/**
 * 获取完整看板数据
 *
 * @param locationId 位置ID（可选）
 */
export const getDashboardData = (locationId?: number): AxiosPromise<DashboardVO> => {
  return request({
    url: '/rfid/dashboard/data',
    method: 'get',
    params: { locationId }
  });
};

/**
 * 获取统计概览
 */
export const getOverview = (): AxiosPromise<StatisticsOverview> => {
  return request({
    url: '/rfid/dashboard/overview',
    method: 'get'
  });
};

/**
 * 获取告警统计列表
 *
 * @param limit 限制数量（默认10条）
 */
export const getAlarmStats = (limit?: number): AxiosPromise<AlarmStatVO[]> => {
  return request({
    url: '/rfid/dashboard/alarmStats',
    method: 'get',
    params: { limit }
  });
};

/**
 * 兼容老接口名称：getDashboardStats
 * 等价于 getDashboardData，便于逐步迁移老代码
 */
export const getDashboardStats = (locationId?: number): AxiosPromise<DashboardVO> => {
  return getDashboardData(locationId);
};
