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

import com.yhy.module.core.controller.admin.quota.vo.QuotaUnifiedFeeSettingRespVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaUnifiedFeeSettingSaveReqVO;
import com.yhy.module.core.dal.dataobject.quota.QuotaUnifiedFeeSettingDO;
import java.util.List;
import javax.validation.Valid;

/**
 * 统一取费设置 Service 接口
 */
public interface QuotaUnifiedFeeSettingService {

    /**
     * 创建统一取费设置
     */
    Long createUnifiedFeeSetting(@Valid QuotaUnifiedFeeSettingSaveReqVO createReqVO);

    /**
     * 更新统一取费设置
     */
    void updateUnifiedFeeSetting(@Valid QuotaUnifiedFeeSettingSaveReqVO updateReqVO);

    /**
     * 删除统一取费设置
     */
    void deleteUnifiedFeeSetting(Long id);

    /**
     * 获取统一取费设置详情
     */
    QuotaUnifiedFeeSettingDO getUnifiedFeeSetting(Long id);

    /**
     * 获取统一取费设置列表
     */
    List<QuotaUnifiedFeeSettingDO> getUnifiedFeeSettingList(Long catalogItemId);

    /**
     * 获取统一取费设置树
     */
    List<QuotaUnifiedFeeSettingRespVO> getUnifiedFeeSettingTree(Long catalogItemId);

    /**
     * 获取父定额列表（用于工作台）
     */
    List<QuotaUnifiedFeeSettingDO> getParentList(Long catalogItemId);

    /**
     * 获取父定额列表，包含子定额取费章节组合（用于工作台范围过滤）
     */
    List<QuotaUnifiedFeeSettingRespVO> getParentListWithChildFeeChapters(Long catalogItemId);

    /**
     * 获取子定额列表
     */
    List<QuotaUnifiedFeeSettingDO> getChildList(Long parentId);

    /**
     * 交换排序
     */
    void swapSort(Long nodeId1, Long nodeId2);

    /**
     * 验证统一取费设置是否存在
     */
    void validateUnifiedFeeSettingExists(Long id);
}
