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

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.iot.controller.admin.gateway.vo.GatewayPageReqVO;
import cn.iocoder.yudao.module.iot.controller.admin.gateway.vo.GatewaySaveReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 网关 Service 接口
 *
 * @author 内蒙必硕
 */
public interface GatewayService {

    /**
     * 创建网关
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createGateway(@Valid GatewaySaveReqVO createReqVO);

    /**
     * 更新网关
     *
     * @param updateReqVO 更新信息
     */
    void updateGateway(@Valid GatewaySaveReqVO updateReqVO);

    /**
     * 删除网关
     *
     * @param id 编号
     */
    void deleteGateway(Long id);

    /**
     * 获得网关
     *
     * @param id 编号
     * @return 网关
     */
    GatewayDO getGateway(Long id);

    List<GatewayDO> selectListByIsEnable(boolean isEnable);

    /**
     * 获得网关分页
     *
     * @param pageReqVO 分页查询
     * @return 网关分页
     */
    PageResult<GatewayDO> getGatewayPage(GatewayPageReqVO pageReqVO);

    // ==================== 子表（物联设备） ====================

    /**
     * 获得物联设备分页
     *
     * @param pageReqVO 分页查询
     * @param gatewayId 网关id
     * @return 物联设备分页
     */
    PageResult<DeviceDO> getDevicePage(PageParam pageReqVO, Long gatewayId);

    /**
     * 创建物联设备
     *
     * @param device 创建信息
     * @return 编号
     */
    Long createDevice(@Valid DeviceDO device);

    /**
     * 更新物联设备
     *
     * @param device 更新信息
     */
    void updateDevice(@Valid DeviceDO device);

    /**
     * 删除物联设备
     *
     * @param id 编号
     */
    void deleteDevice(Long id);

    /**
     * 获得物联设备
     *
     * @param id 编号
     * @return 物联设备
     */
    DeviceDO getDevice(Long id);


}