package cn.iocoder.yudao.module.iot.service.recipedeviceattribute;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipedeviceattribute.RecipeDeviceAttributeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.fasterxml.jackson.core.JsonProcessingException;

/**
 * 配方配置（关联采集设备模型-点位管理） Service 接口
 *
 * @author 内蒙必硕
 */
public interface RecipeDeviceAttributeService {

    /*
      创建配方配置（关联采集设备模型-点位管理）

      @param createReqVO 创建信息
     * @return 编号
     */
//    Long createRecipeDeviceAttribute(@Valid RecipeDeviceAttributeSaveReqVO createReqVO);

    /*
      更新配方配置（关联采集设备模型-点位管理）

      @param updateReqVO 更新信息
     */
//    void updateRecipeDeviceAttribute(@Valid RecipeDeviceAttributeSaveReqVO updateReqVO);

    /**
     * 删除配方配置（关联采集设备模型-点位管理）
     *
     * @param id 编号
     */
    void deleteRecipeDeviceAttribute(Long id);

    /**
     * 获得配方配置（关联采集设备模型-点位管理）
     *
     * @param id 编号
     * @return 配方配置（关联采集设备模型-点位管理）
     */
    RecipeDeviceAttributeDO getRecipeDeviceAttribute(Long id);

    /**
     * 获得配方配置（关联采集设备模型-点位管理）分页
     *
     * @param pageReqVO 分页查询
     * @return 配方配置（关联采集设备模型-点位管理）分页
     */
    PageResult<RecipeDeviceAttributeDO> getRecipeDeviceAttributePage(RecipeDeviceAttributePageReqVO pageReqVO);

    Boolean createRecipeDeviceAttributeBatch(RecipeDeviceAttributeSaveReqVO createReqVO);

    Boolean updateRecipeDeviceAttribute(RecipeDeviceAttributeUpdateReqVO reqVO);


//    public List<Map<String, Object>> operationAnalysisDetails(Long deviceId, String collectionStartTime, String collectionEndTime);
    Map<String, List<Map<String, Object>>>  singleDevice(Long deviceId) throws JsonProcessingException;


    // ========== 扩展方法（需实现） ==========
    /**
     * 根据配方ID查询关联的设备属性记录
     * @param recipeId 配方ID
     * @return 设备属性记录列表
     */
    List<RecipeDeviceAttributeDO> getByRecipeId(Long recipeId);

    /**
     * 根据属性ID查询设备触点模型的属性名和数据单位
     * @param attributeId 属性ID
     * @return 包含attributeName和dataUnit的Map
     */
    Map<String, String> getDeviceContactModelAttr(Long attributeId);

    /**
     * 分页查询（关联设备触点模型）
     * @param reqVO 分页参数
     * @return 关联查询分页结果
     */
    PageResult<RecipeDeviceAttributePageRespDTO> selectPageWithAttribute(RecipeDeviceAttributePageReqVO reqVO);

    List<RecipeDeviceAttributePageRespDTO> getList(RecipeDeviceAttributePageReqVO reqVO);
}