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

import com.yhy.module.core.controller.admin.workbench.vo.WbUnifiedFeeSummaryItemVO;
import com.yhy.module.core.dal.dataobject.workbench.WbUnifiedFeeConfigDO;
import java.util.List;

/**
 * 工作台统一取费配置 Service 接口
 */
public interface WbUnifiedFeeConfigService {

    /**
     * 根据单位工程节点ID获取配置列表
     */
    List<WbUnifiedFeeConfigDO> getListByCompileTreeId(Long compileTreeId);

    /**
     * 根据单位工程节点ID和费率模式ID获取配置列表
     */
    List<WbUnifiedFeeConfigDO> getListByCompileTreeIdAndRateModeId(Long compileTreeId, Long rateModeId);

    /**
     * 根据来源统一取费设置ID获取配置
     */
    WbUnifiedFeeConfigDO getBySourceUnifiedFeeSettingId(Long compileTreeId, Long sourceUnifiedFeeSettingId);

    /**
     * 保存或更新配置
     */
    Long saveOrUpdate(WbUnifiedFeeConfigDO config);

    /**
     * 批量保存配置
     */
    void batchSave(Long compileTreeId, Long rateModeId, List<WbUnifiedFeeConfigDO> configs);

    /**
     * 删除配置
     */
    void delete(Long id);

    /**
     * 根据费率模式ID删除配置（费率切换时清空）
     */
    void deleteByRateModeId(Long compileTreeId, Long rateModeId);

    /**
     * 应用统一取费 - 将统一取费目录按范围添加到对应清单
     * @param compileTreeId 单位工程节点ID
     */
    void applyUnifiedFee(Long compileTreeId);

    /**
     * 获取统一取费汇总来源 - 返回范围内的定额列表
     * @param compileTreeId 单位工程节点ID
     * @param sourceUnifiedFeeSettingId 来源统一取费设置ID
     * @return 范围内的定额列表
     */
    List<WbUnifiedFeeSummaryItemVO> getSummarySource(Long compileTreeId, Long sourceUnifiedFeeSettingId);

    /**
     * 根据统一取费节点ID获取汇总来源 - 返回范围内的定额列表
     * @param divisionId 统一取费节点ID
     * @return 范围内的定额列表
     */
    List<WbUnifiedFeeSummaryItemVO> getSummarySourceByDivisionId(Long divisionId);
}
