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

import com.yhy.module.core.controller.admin.quota.vo.QuotaAdjustmentCombinedRespVO;
import com.yhy.module.core.controller.admin.quota.vo.QuotaAdjustmentDetailSaveReqVO;
import com.yhy.module.core.dal.dataobject.quota.QuotaAdjustmentDetailDO;
import com.yhy.module.core.dal.dataobject.quota.QuotaAdjustmentSettingDO;
import java.util.List;
import javax.validation.Valid;

/**
 * 定额调整明细 Service 接口
 *
 * @author 芋道源码
 */
public interface QuotaAdjustmentDetailService {

    /**
     * 创建定额调整明细
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createQuotaAdjustmentDetail(@Valid QuotaAdjustmentDetailSaveReqVO createReqVO);

    /**
     * 更新定额调整明细
     *
     * @param updateReqVO 更新信息
     */
    void updateQuotaAdjustmentDetail(@Valid QuotaAdjustmentDetailSaveReqVO updateReqVO);

    /**
     * 删除定额调整明细
     *
     * @param id 编号
     */
    void deleteQuotaAdjustmentDetail(Long id);

    /**
     * 获得定额调整明细
     *
     * @param id 编号
     * @return 定额调整明细
     */
    QuotaAdjustmentDetailDO getQuotaAdjustmentDetail(Long id);

    /**
     * 获得定额调整明细列表（按定额基价ID）
     *
     * @param quotaItemId 定额基价ID
     * @return 定额调整明细列表
     */
    List<QuotaAdjustmentDetailDO> getQuotaAdjustmentDetailListByQuotaItem(Long quotaItemId);

    /**
     * 获得定额调整明细列表（按调整设置ID）
     *
     * @param adjustmentSettingId 调整设置ID
     * @return 定额调整明细列表
     */
    List<QuotaAdjustmentDetailDO> getQuotaAdjustmentDetailList(Long adjustmentSettingId);

    /**
     * 交换排序
     *
     * @param id1 第一个调整明细ID
     * @param id2 第二个调整明细ID
     */
    void swapSort(Long id1, Long id2);

    /**
     * 获取可引用的调整设置列表（同一定额专业）
     *
     * @param adjustmentSettingId 当前调整设置ID
     * @return 可引用的调整设置列表
     */
    List<QuotaAdjustmentSettingDO> getAvailableSettings(Long adjustmentSettingId);

    /**
     * 获取调整设置与明细的组合列表（按定额基价ID）
     *
     * @param quotaItemId 定额基价ID
     * @return 调整设置与明细的组合列表
     */
    List<QuotaAdjustmentCombinedRespVO> getCombinedList(Long quotaItemId);

}
