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

import com.yhy.module.core.controller.admin.quota.vo.QuotaFeeItemWithRateRespVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaUnifiedFeeRespVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaUnifiedFeeSaveReqVO;
import com.yhy.module.core.dal.dataobject.quota.QuotaUnifiedFeeDO;
import java.util.List;
import javax.validation.Valid;

/**
 * 统一取费单价 Service 接口
 */
public interface QuotaUnifiedFeeService {

    /**
     * 创建统一取费单价
     */
    Long createUnifiedFee(@Valid QuotaUnifiedFeeSaveReqVO createReqVO);

    /**
     * 更新统一取费单价
     */
    void updateUnifiedFee(@Valid QuotaUnifiedFeeSaveReqVO updateReqVO);

    /**
     * 删除统一取费单价
     */
    void deleteUnifiedFee(Long id);

    /**
     * 获取统一取费单价详情
     */
    QuotaUnifiedFeeDO getUnifiedFee(Long id);

    /**
     * 获取统一取费单价列表
     */
    List<QuotaUnifiedFeeDO> getUnifiedFeeList(Long catalogItemId);

    /**
     * 获取统一取费单价树（与定额取费显示一致的费率项+取费项合并视图）
     */
    List<QuotaFeeItemWithRateRespVO> getUnifiedFeeTree(Long catalogItemId);

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

    /**
     * 验证统一取费单价是否存在
     */
    void validateUnifiedFeeExists(Long id);

    /**
     * 从定额取费初始化统一取费单价
     * 首次访问时，自动从定额取费创建对应的记录
     */
    void initFromFeeItems(Long catalogItemId);
}
