package co.yixiang.yshop.module.member.service.userbill;

import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.module.member.controller.admin.userbill.vo.UserBillPageReqVO;
import co.yixiang.yshop.module.member.controller.admin.userbill.vo.UserBillRespVO;
import co.yixiang.yshop.module.member.dal.dataobject.userbill.UserBillDO;

import java.math.BigDecimal;

/**
 * 用户账单 Service 接口
 *
 * @author yshop
 */
public interface UserBillService {


    /**
     * 获得用户账单分页
     *
     * @param pageReqVO 分页查询
     * @return 用户账单分页
     */
    PageResult<UserBillDO> getUserBillPage(UserBillPageReqVO pageReqVO);

    /**
     * 获得用户账单分页
     *
     * @param pageReqVO 分页查询
     * @return 用户账单分页
     */
    PageResult<UserBillRespVO> getUserBillPageAdmin(UserBillPageReqVO pageReqVO);

    /**
     * 增加支出流水
     *
     * @param uid      uid
     * @param title    账单标题
     * @param category 明细种类
     * @param type     明细类型
     * @param number   明细数字
     * @param balance  剩余
     * @param mark     备注
     */
    void expend(Long uid, String title, String category, String type, double number, double balance, String mark);

    /**
     * 增加收入/支入流水
     *
     * @param uid      uid
     * @param title    账单标题
     * @param category 明细种类
     * @param type     明细类型
     * @param number   明细数字
     * @param balance  剩余
     * @param mark     备注
     * @param linkId   关联id
     */
    void income(Long uid, String title, String category, String type, BigDecimal number,
                BigDecimal balance, String mark, String linkId);

    /**
     * 增加流水
     *
     * @param uid      uid
     * @param title    账单标题
     * @param category 明细种类
     * @param type     明细类型
     * @param number   明细数字
     * @param balance  剩余
     * @param mark     备注
     * @param linkId   关联id
     * @param pm       收入/支出
     */

    void addBillLog(Long uid, String title, String category, String type, BigDecimal number, BigDecimal balance, String mark, String linkId, Integer pm);

    /**
     * 统计数量
     *
     * @param pageReqVO /
     * @return /
     */
    Long getUserBillCount(UserBillPageReqVO pageReqVO);
}
