package com.zd.laboratory.service;

import com.zd.common.core.enums.HardwareTypeEnum;
import com.zd.laboratory.domain.LabHardware;
import com.zd.laboratory.domain.vo.HxpSmartTerminalByExcel;
import com.zd.laboratory.domain.vo.LabHardwareVO;
import com.zd.laboratory.mqtt.entiy.EquipmentStatus;
import com.zd.system.api.laboratory.domain.FunctionStatus;

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

/**
 * 硬件Service接口
 *
 * @author zd
 */
public interface ILabHardwareService {
    /**
     * 查询硬件
     *
     * @param id 硬件主键
     * @return 硬件
     */
    LabHardwareVO selectLabHardwareById(Long id);

    /**
     * 通过硬件编码获取实验id
     * @param num 硬件编码
     */
    Long querySubIdByNum(String num);
    /**
     * 查询硬件详细信息，包涵实验室下的所有硬件
     *
     * @param labHardware 硬件
     * @return 硬件集合
     */
    LabHardwareVO getHardwareDetail(LabHardware labHardware);

    /**
     * 查询硬件列表
     *
     * @param labHardware 硬件
     * @return 硬件集合
     */
    List<LabHardwareVO> selectLabHardwareList(LabHardware labHardware);

    /**
     * 新增硬件
     *
     * @param labHardware 硬件
     * @return 结果
     */
    int insertLabHardware(LabHardware labHardware);

    /**
     * 修改硬件
     *
     * @param labHardware 硬件
     * @return 结果
     */
    int updateLabHardware(LabHardware labHardware);

    /**
     * 启/停用
     *
     * @param labHardware 硬件
     * @return 结果
     */
    int startOrStop(LabHardware labHardware);

    /**
     * 设置柜锁时间
     *
     * @param labHardwareVO 需要设置柜锁时间主键集合
     * @return 结果
     */
    int setLock(LabHardwareVO labHardwareVO);

    /**
     * 批量删除硬件
     *
     * @param ids 需要删除的硬件主键集合
     * @return 结果
     */
    int deleteLabHardwareByIds(Long[] ids);

    /**
     * 删除硬件信息
     *
     * @param id 硬件主键
     * @return 结果
     */
    int deleteLabHardwareById(Long id);

    /**
     * 查询硬件功能列表
     *
     * @return 功能集合
     */
    Map <HardwareTypeEnum, List<FunctionStatus>> getFunList();

    Map<String, Object> selectStatistics(LabHardware labHardware);

    /**
     * 更新继电器状态
     */
    int updateRelayStatus(EquipmentStatus equipmentStatus);

    /**
     * 更新视频状态
     */
    int updateStatus(EquipmentStatus equipmentStatus);

    /****
     * 根据设备类型查询
     */
    List<LabHardware> selectNewLabHardwareByTypes(LabHardwareVO labHardwareVO);

    /**
     * 导入智能终端
     *
     * @param smartTerminalList        智能终端数据列表
     * @param operName        操作用户
     * @return 结果
     */
    List<HxpSmartTerminalByExcel> importSmartTerminal(List <HxpSmartTerminalByExcel> smartTerminalList, String operName, HxpSmartTerminalByExcel hxpSmartTerminalByExcel);


    /**
     * 查询硬件列表
     *
     * @param labHardware 硬件
     * @return 硬件集合
     */
    public List<LabHardwareVO> getCabinetLockList(LabHardware labHardware);


    /**
     * 关联的机柜id
     *
     * @param hardwares 需要关联的机柜id
     * @return 结果
     */
    public int setLockJoinCabinet(List<LabHardware> hardwares);


    /**
     * 查询硬件列表
     *
     * @param labHardware 硬件
     * @return 硬件集合
     */
    public List<LabHardwareVO> selectLabHardwareByCabinetList(LabHardware labHardware);

}
