package com.yhy.module.core.service.workbench;

import com.yhy.module.core.controller.admin.workbench.vo.WbCompileTreeRespVO;
import com.yhy.module.core.controller.admin.workbench.vo.WbCompileTreeSaveReqVO;
import com.yhy.module.core.controller.admin.workbench.vo.WbCompileTreeSwapSortReqVO;
import java.util.List;
import javax.validation.Valid;

/**
 * 编制模式树 Service 接口
 *
 * @author yhy
 */
public interface WbCompileTreeService {

    /**
     * 初始化项目的编制模式树（创建根节点）
     *
     * @param projectId 项目节点ID
     * @param projectName 项目名称
     * @return 根节点ID
     */
    Long initCompileTree(Long projectId, String projectName);

    /**
     * 创建节点（单项或单位工程）
     *
     * @param createReqVO 创建信息
     * @return 节点ID
     */
    Long createNode(@Valid WbCompileTreeSaveReqVO createReqVO);

    /**
     * 更新节点
     *
     * @param updateReqVO 更新信息
     */
    void updateNode(@Valid WbCompileTreeSaveReqVO updateReqVO);

    /**
     * 删除节点
     *
     * @param id 节点ID
     */
    void deleteNode(Long id);

    /**
     * 获取节点详情
     *
     * @param id 节点ID
     * @return 节点详情
     */
    WbCompileTreeRespVO getNode(Long id);

    /**
     * 获取项目的编制模式树
     *
     * @param projectId 项目节点ID
     * @return 树形结构
     */
    List<WbCompileTreeRespVO> getTree(Long projectId);

    /**
     * 交换排序
     *
     * @param swapReqVO 交换信息
     */
    void swapSort(@Valid WbCompileTreeSwapSortReqVO swapReqVO);
}
