package com.iailab.module.data.influxdb.service;

import com.iailab.module.data.api.dto.ApiPointValueQueryDTO;
import com.iailab.module.data.influxdb.pojo.InfluxPointValuePOJO;
import com.iailab.module.data.api.dto.ApiTagValueQueryDTO;
import com.iailab.module.data.influxdb.pojo.InfluxTagValuePOJO;
import com.iailab.module.data.point.vo.PointValueExportVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * InfluxDB操作类
 */
public interface InfluxDBService {

    void syncWriteFloatValue(String pointNo, String dataValue, long time);

    void syncWriteIntValue(String pointNo, String dataValue, long time);

    void syncWriteBooleanValue(String pointNo, String dataValue, long time);

    void asyncWritePointValues(List<InfluxPointValuePOJO> pointValues);

    void asyncWriteTagValues(List<InfluxTagValuePOJO> tagValues);

    Map<String, Object> queryPointsLastValue(List<InfluxPointValuePOJO> influxParams);

    Map<String, List<Object>> queryTagsValues(List<InfluxTagValuePOJO> influxParams, Date startTime, Date endTime);

    List<Map<String, Object>> queryPointValues(InfluxPointValuePOJO pojo, Date startTime, Date endTime);

    Map<String, List<Map<String, Object>>> queryPointsValues(List<InfluxPointValuePOJO> influxParams, Date startTime, Date endTime);

    Map<String, Object> queryPointsSpread(List<InfluxPointValuePOJO> influxParams, Date startTime, Date endTime);

    boolean exportTagValue(HttpServletResponse response, HttpServletRequest request, ApiTagValueQueryDTO params);

    Object queryPointMaxValue(InfluxPointValuePOJO point, Date startTime);

    List<PointValueExportVO> exportPointValue(ApiPointValueQueryDTO queryDto);
}