package cn.iocoder.yudao.module.pms.service;

import javax.validation.*;

import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreeListReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreePageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreeSaveReqVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.IotInfoClassifyDO;
import cn.iocoder.yudao.module.pms.dal.dataobject.IotTreeDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * pms树 Service 接口
 *
 * @author 芋道源码
 */
public interface IotTreeService {
    void initTreeCode();
    List<IotTreeDO> getIotDeviceTree(Long deviceId);
    List<IotTreeDO> getIotTreeList(IotTreeListReqVO reqVO);
    void addDeptDeal(DeptDO deptDO);
    void updateDeptDeal(DeptDO deptDO);
    void deleteDeptDeal(String id);
    /**
     * 创建pms树
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotTree(@Valid IotTreeSaveReqVO createReqVO);

    /**
     * 更新pms树
     *
     * @param updateReqVO 更新信息
     */
    void updateIotTree(@Valid IotTreeSaveReqVO updateReqVO);

    /**
     * 删除pms树
     *
     * @param id 编号
     */
    void deleteIotTree(Long id);

    /**
     * 获得pms树
     *
     * @param id 编号
     * @return pms树
     */
    IotTreeDO getIotTree(Long id);

    /**
     * 获得pms树分页
     *
     * @param pageReqVO 分页查询
     * @return pms树分页
     */
    PageResult<IotTreeDO> getIotTreePage(IotTreePageReqVO pageReqVO);

    default List<IotTreeDO> getChildTreeList(Long id) {
        return getChildTreeList(Collections.singleton(id));
    }
    List<IotTreeDO> getChildTreeList(Collection<Long> ids);

    /**
     * 设备调拨变更资料库
     * @param ids id数组
     * @param targetDeptId 目标部门id
     */
    void deviceAllotTree(List<Long> ids, Long targetDeptId) throws ServiceException;
    void initTree();
    List<IotTreeDO> getAllParentIds(Long classId);
}
