package com.dcs.hnyz.service;

import com.dcs.hnyz.domain.Equipment;
import com.dcs.hnyz.domain.EquipmentParam;
import com.dcs.hnyz.domain.vo.EquipmentParamFormVO;

import java.util.List;
import java.util.Map;

/**
 * 设备参数管理Service接口
 * 
 * @author hmy
 * @date 2025-04-23
 */
public interface IEquipmentParamService 
{
    /**
     * 查询设备参数管理
     * 
     * @param registerId 设备参数管理主键
     * @return 设备参数管理
     */
    public EquipmentParam selectEquipmentParamByRegisterId(Long registerId);

    /**
     * 查询设备参数管理列表
     * 
     * @param equipmentParam 设备参数管理
     * @return 设备参数管理集合
     */
    public List<EquipmentParam> selectEquipmentParamList(EquipmentParam equipmentParam);

    /**
     * 新增设备参数管理
     * 
     * @param equipmentParam 设备参数管理
     * @return 结果
     */
    public int insertEquipmentParam(EquipmentParam equipmentParam);

    /**
     * 修改设备参数管理
     * 
     * @param equipmentParam 设备参数管理
     * @return 结果
     */
    public int updateEquipmentParam(EquipmentParam equipmentParam);

    /**
     * 批量删除设备参数管理
     * 
     * @param registerIds 需要删除的设备参数管理主键集合
     * @return 结果
     */
    public int deleteEquipmentParamByRegisterIds(Long[] registerIds);

    /**
     * 删除设备参数管理信息
     * 
     * @param registerId 设备参数管理主键
     * @return 结果
     */
    public int deleteEquipmentParamByRegisterId(Long registerId);

    /**
     * 查询设备参数管理表单
     * @param equipmentParam
     * @return
     */
    public List<EquipmentParamFormVO> selectEquipmentParamForm(EquipmentParam equipmentParam);

    Map<Integer, Integer> getEquipmentIndexList();

    /**
     * 根据父设备id获取对应主数据寄存器唯一code
     */
    String getCodeByParentId(Long parentId);
    /**
     * 根据父设备id获取对应主设置项寄存器地址
     */
    Integer getSetCodeByParentId(Long parentId);

    /**
     * 根据父设备id获取对应所有寄存器code
     * @param parentId
     */
    List<String> getCodesByParentId(Long parentId);

    /**
     * 根据数据类型获取设备参数列表
     * @param dataTypes
     * @return
     */
    List<EquipmentParam> selectEquipmentParamListByDataType(List<String> dataTypes);

    /**
     * 获取设备注册数量以及今日变化量
     * @return
     */
    Map<String,Object> getRegisterQuantity();

    /**
     * 批量查询所有设备对应的 code
     * @param validEquipmentIds
     * @return
     */
    Map<Long, String> getCodeMapByParentIds(List<Long> validEquipmentIds);

    List<EquipmentParam> selectEquipmentParamListByProtocolId(Integer protocolId);

    EquipmentParam selectEquipmentParamByCode(String code);

    /**
     * 根据设备code获取寄存器主设置项参数
     * @param code
     * @return
     */
    EquipmentParam getMainSetParam(String code);

    /**
     * 根据设备code获取所有寄存器设置项参数
     * @param code
     * @return
     */
    List<EquipmentParam> getAllSetParam(String code);

    String importEquipment(List<EquipmentParam> equipmentList, boolean updateSupport, String operName);

    /**
     * 根据设备名的变化 更新寄存器名称
     * @param equipment
     * @return
     */
    int updateRegisterNameByEquipment(Equipment equipment);

    /**
     * 根据设备的codeList获取寄存器对应的所有参数配置项参数的数据
     * @param codeList
     * @return
     */
    Map<String,List<Object>> getAllParamConfigDataByCodeList(List<String> codeList);

    /**
     * 根据设备的code获取寄存器对应的所有参数配置项
     * @param code
     * @return
     */
    List<EquipmentParam> getAllParamConfigByCode(String code);
}
