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

import com.yhy.module.core.dal.dataobject.workbench.WbAdjustmentSettingDO;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 工作台定额调整设置 Service 接口
 *
 * @author yhy
 */
public interface WbAdjustmentSettingService {

    /**
     * 根据分部分项定额节点ID获取调整设置列表
     *
     * @param divisionId 定额节点ID
     * @return 调整设置列表
     */
    List<WbAdjustmentSettingDO> getListByDivisionId(Long divisionId);

    /**
     * 从后台定额调整设置复制到工作台
     * 当定额节点首次加载调整设置时，从后台复制数据
     *
     * @param divisionId 定额节点ID
     * @param sourceQuotaItemId 来源定额基价ID
     * @return 复制后的调整设置列表
     */
    List<WbAdjustmentSettingDO> copyFromQuotaAdjustmentSetting(Long divisionId, Long sourceQuotaItemId);

    /**
     * 更新调整设置
     *
     * @param id 调整设置ID
     * @param adjustmentRules 调整规则
     */
    void updateAdjustmentRules(Long id, Map<String, Object> adjustmentRules);

    /**
     * 应用调整设置（复选框类型）
     *
     * @param divisionId 定额节点ID
     * @param adjustmentSettingId 调整设置ID
     * @param enabled 是否启用
     */
    void applyAdjustmentSetting(Long divisionId, Long adjustmentSettingId, boolean enabled);

    /**
     * 应用动态调整
     *
     * @param divisionId 定额节点ID
     * @param adjustmentSettingId 调整设置ID
     * @param inputValues 输入值（类别ID -> 输入值）
     */
    void applyDynamicAdjustment(Long divisionId, Long adjustmentSettingId, Map<String, BigDecimal> inputValues);

    /**
     * 应用动态合并定额
     *
     * @param divisionId 定额节点ID
     * @param adjustmentSettingId 调整设置ID
     * @param inputValues 输入值（定额编码 -> 输入值）
     */
    void applyDynamicMerge(Long divisionId, Long adjustmentSettingId, Map<String, BigDecimal> inputValues);

    /**
     * 删除定额节点下的所有调整设置
     *
     * @param divisionId 定额节点ID
     */
    void deleteByDivisionId(Long divisionId);

    /**
     * 获取调整设置与明细的组合列表（用于前端展示）
     *
     * @param divisionId 定额节点ID
     * @return 组合列表
     */
    List<Map<String, Object>> getAdjustmentCombinedList(Long divisionId);

    /**
     * 更新调整设置的调整内容
     *
     * @param id 调整设置ID
     * @param adjustmentContent 调整内容
     */
    void updateAdjustmentSetting(Long id, String adjustmentContent);
}
