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

import com.yhy.module.core.controller.admin.quota.vo.QuotaRateItemRespVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaRateItemSaveReqVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaRateValueRulesReqVO;
import com.yhy.module.core.dal.dataobject.quota.QuotaRateItemDO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 定额费率项 Service 接口
 */
public interface QuotaRateItemService {

    /**
     * 创建费率项
     */
    Long createRateItem(QuotaRateItemSaveReqVO createReqVO);

    /**
     * 更新费率项
     */
    void updateRateItem(QuotaRateItemSaveReqVO updateReqVO);

    /**
     * 删除费率项
     */
    void deleteRateItem(Long id);

    /**
     * 获取费率项
     */
    QuotaRateItemDO getRateItem(Long id);

    /**
     * 获取费率项详情（含字段绑定）
     */
    QuotaRateItemRespVO getRateItemDetail(Long id);

    /**
     * 获取费率项列表
     */
    List<QuotaRateItemRespVO> getRateItemList(Long catalogItemId, Long parentId);

    /**
     * 获取费率项树（含字段绑定）
     */
    List<QuotaRateItemRespVO> getRateItemTree(Long catalogItemId);

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

    /**
     * 配置动态取值规则
     */
    void configValueRules(QuotaRateValueRulesReqVO reqVO);

    /**
     * 计算动态字段值
     * 
     * @param rateItemId 费率项ID
     * @param baseValue 基数值（用户输入）
     * @return 计算后的字段值映射，key为字段索引，value为计算值
     */
    Map<Integer, BigDecimal> calculateDynamicFields(Long rateItemId, BigDecimal baseValue);

    /**
     * 验证费率项存在
     */
    QuotaRateItemDO validateRateItemExists(Long id);
}
