import request from '@/utils/request';
import type { EmsActionResponse } from '@/api/ems/types';
import type {
  IotEnvMonitorByTypeQuery,
  IotEnvMonitorDataVO,
  IotEnvMonitorLatestBatchQuery,
  IotEnvMonitorLatestQuery,
  IotEnvMonitorListQuery
} from './types';

/**
 * 物联环境监测按日分表接口前缀。
 * 单独收口常量，后续如果后端网关路由调整，这里只需要改一处。
 */
const IOT_ENV_MONITOR_DATA_BASE_URL = '/ems/record/iotEnvMonitorData';

/**
 * 无参获取所有设备各自最新一条数据。
 * 前端不需要自己先查设备树再拼 monitorIds。
 * 返回的 data 是数组，且每条记录会按 monitor_type 自动裁剪字段。
 */
export function getIotEnvMonitorLatestAll(): Promise<EmsActionResponse<IotEnvMonitorDataVO[]>> {
  return request({
    url: `${IOT_ENV_MONITOR_DATA_BASE_URL}/latestAll`,
    method: 'get'
  });
}

/**
 * 查询指定日期、指定设备的最新一条数据。
 */
export function getIotEnvMonitorLatest(
  query: IotEnvMonitorLatestQuery
): Promise<EmsActionResponse<IotEnvMonitorDataVO>> {
  return request({
    url: `${IOT_ENV_MONITOR_DATA_BASE_URL}/latest`,
    method: 'get',
    params: query
  });
}

/**
 * 查询指定日期的数据列表。
 *
 * 注意：
 * 1. date 必填，且后端会严格解析 yyyy-MM-dd 或 yyyyMMdd。
 * 2. startTime/endTime 如果传了，必须是 yyyy-MM-dd HH:mm:ss。
 * 3. monitorIds 非空时优先级高于 monitorId。
 */
export function listIotEnvMonitorDataByDate(
  query: IotEnvMonitorListQuery
): Promise<EmsActionResponse<IotEnvMonitorDataVO[]>> {
  return request({
    url: `${IOT_ENV_MONITOR_DATA_BASE_URL}/list`,
    method: 'get',
    params: query
  });
}

/**
 * 批量查询多个设备在指定日期的最新值。
 * 当 monitorIds 很多时，优先用这个 POST 接口，避免 URL 超长。
 */
export function getIotEnvMonitorLatestBatch(
  data: IotEnvMonitorLatestBatchQuery
): Promise<EmsActionResponse<IotEnvMonitorDataVO[]>> {
  return request({
    url: `${IOT_ENV_MONITOR_DATA_BASE_URL}/latestBatch`,
    method: 'post',
    data
  });
}

/**
 * 按设备类型查询指定日期的数据列表。
 */
export function listIotEnvMonitorDataByType(
  query: IotEnvMonitorByTypeQuery
): Promise<EmsActionResponse<IotEnvMonitorDataVO[]>> {
  return request({
    url: `${IOT_ENV_MONITOR_DATA_BASE_URL}/byType`,
    method: 'get',
    params: query
  });
}

export * from './types';
