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

import com.yhy.module.core.controller.admin.calcbaserate.vo.CalcBaseRateDirectoryRespVO;
import com.yhy.module.core.controller.admin.calcbaserate.vo.CalcBaseRateDirectorySaveReqVO;
import com.yhy.module.core.controller.admin.calcbaserate.vo.CalcBaseRateDirectorySwapSortReqVO;
import java.util.List;
import javax.validation.Valid;

/**
 * 基数费率目录 Service 接口
 *
 * @author yhy
 */
public interface CalcBaseRateDirectoryService {

    /**
     * 创建基数费率目录节点
     *
     * @param createReqVO 创建信息
     * @return 节点ID
     */
    Long createCalcBaseRateDirectory(@Valid CalcBaseRateDirectorySaveReqVO createReqVO);

    /**
     * 更新基数费率目录节点
     *
     * @param updateReqVO 更新信息
     */
    void updateCalcBaseRateDirectory(@Valid CalcBaseRateDirectorySaveReqVO updateReqVO);

    /**
     * 删除基数费率目录节点
     *
     * @param id 节点ID
     */
    void deleteCalcBaseRateDirectory(Long id);

    /**
     * 获取基数费率目录节点
     *
     * @param id 节点ID
     * @return 节点信息
     */
    CalcBaseRateDirectoryRespVO getCalcBaseRateDirectory(Long id);

    /**
     * 获取基数费率目录树（树形结构）
     *
     * @param calcBaseRateCatalogId 基数费率目录树节点ID
     * @return 树形结构
     */
    List<CalcBaseRateDirectoryRespVO> getCalcBaseRateDirectoryTree(Long calcBaseRateCatalogId);

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

    /**
     * 强制删除目录节点（级联删除所有子节点和费率项）
     *
     * @param id 节点ID
     */
    void forceDeleteCalcBaseRateDirectory(Long id);

    /**
     * 获取基数费率目录树（工作台项目指引使用）
     *
     * @param calcBaseRateCatalogId 基数费率目录树节点ID
     * @return 树形结构
     */
    List<com.yhy.module.core.controller.admin.workbench.vo.calcbaserate.CalcBaseRateDirectoryRespVO> getCalcBaseRateDirectoryTreeForWorkbench(Long calcBaseRateCatalogId);
}
