package co.yixiang.yshop.module.distributor.service.distributorwages;

import java.math.BigDecimal;
import java.util.*;
import javax.validation.*;

import co.yixiang.yshop.module.distributor.controller.admin.distributorwages.vo.*;
import co.yixiang.yshop.module.distributor.dal.dataobject.distributorwages.DistributorWagesDO;
import co.yixiang.yshop.framework.common.pojo.PageResult;

/**
 * 分销商佣金 Service 接口
 *
 * @author admin
 */
public interface DistributorWagesService {

    /**
     * 创建分销商佣金
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createWages(@Valid DistributorWagesCreateReqVO createReqVO);

    /**
     * 更新分销商佣金
     *
     * @param updateReqVO 更新信息
     */
    void updateWages(@Valid DistributorWagesUpdateReqVO updateReqVO);

    /**
     * 删除分销商佣金
     *
     * @param id 编号
     */
    void deleteWages(Long id);

    /**
     * 获得分销商佣金
     *
     * @param id 编号
     * @return 分销商佣金
     */
    DistributorWagesDO getWages(Long id);

    /**
     * 获得分销商佣金列表
     *
     * @param ids 编号
     * @return 分销商佣金列表
     */
    List<DistributorWagesDO> getWagesList(Collection<Long> ids);

    /**
     * 获得分销商佣金分页
     *
     * @param pageReqVO 分页查询
     * @return 分销商佣金分页
     */
    PageResult<DistributorWagesDO> getWagesPage(DistributorWagesPageReqVO pageReqVO);

    /**
     * 获得分销商佣金列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 分销商佣金列表
     */
    List<DistributorWagesDO> getWagesList(DistributorWagesExportReqVO exportReqVO);

    /**
     * 通过代理商id获取佣金余额
     *
     * @param id 代理商id
     * @return 佣金
     */
    DistributorWagesDO getWagesByDistributorId(Long id);

    // 减少余额
    Boolean reduceAmount(Long id, BigDecimal amount);

    // 减少待入账余额
    void reduceRefuseAmount(Long id, BigDecimal amount);

    // 增加待入账
    void increaseRefuseAmount(Long id, BigDecimal amount);

    // 结算余额
    void settlementAmount(Long id, BigDecimal amount);

    // 增加余额
    void increaseAmount(Long id, BigDecimal amount);

}
