package com.yonge.cooleshow.biz.dal.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
import com.yonge.cooleshow.biz.dal.vo.UserAccountVo;
import com.yonge.cooleshow.biz.dal.dto.search.UserAccountSearch;
import com.yonge.cooleshow.biz.dal.entity.UserAccount;
import com.yonge.cooleshow.biz.dal.vo.res.AccountShareTotal;
import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
import com.yonge.cooleshow.common.entity.HttpResponseResult;
import com.yonge.cooleshow.common.entity.MallOrderItemDto;
import com.yonge.cooleshow.common.enums.PostStatusEnum;

import java.util.List;

/**
 * 用户账户表 服务类
 * 入账逻辑：
 *   普通入账 -（记录入账接口）并在业务中记录账户记录id 入账状态：WAIT     待入账
 *           - 业务确认入账（调用记录状态变更接口）   入账状态：RECORDED 已入账  修改账户总表
 *           - 业务取消 （调用记录状态变更接口）     入账状态：CANCEL   取消
 *   冻结入账 -（记录入账接口）并在业务中记录账户记录id 入账状态：FROZEN   冻结入账  修改账户总表 冻结金额 ++ 可用余额 --
 *           - 业务确认入账（调用记录状态变更接口）   入账状态：RECORDED 已入账   修改账户总表 冻结金额 -- 账户余额 --
 *           - 业务取消 （调用记录状态变更接口）     入账状态：CANCEL   取消     修改账户总表 冻结金额 -- 可用余额 ++
 * @author liweifan
 * @date 2022-03-30
 */
public interface UserAccountService extends IService<UserAccount>  {

	/**
     * 查询详情
     * @author liweifan
 	 * @date 2022-03-30
     */
	UserAccountVo detail(Long id);

    /**
     * 分页查询
     * @author liweifan
 	 * @date 2022-03-30
     */
    IPage<UserAccountVo> selectPage(IPage<UserAccountVo> page, UserAccountSearch query);

    /**
     * 记录入账
     * 使用 new UserAccountRecordDto(Long accountId, PostStatusEnum postStatus, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType,
     *                                 Long bizId, String bizName, String orderNo);
     * accountId: 账户id
     * postStatus: WAIT("待入账"),FROZEN("冻结入账")
     * transAmount: 交易金额
     * inOrOut: IN("收入"),OUT("支出")
     * bizType:业务类型
     * bizId：业务id
     * bizName：业务名称
     * orderNo：订单号
     * @author liweifan
     * @date 2022-07-20
     */
    HttpResponseResult accountRecord(UserAccountRecordDto accountRecordDto);

    HttpResponseResult<UserAccountRecord> accountRecord(List<UserAccountRecordDto> accountRecordDtos);
    /***
     * 入账结算（入账状态变更）
     * @author liweifan
     * @param: recordId     记录id
     * @param: postStatus   入账状态 RECORDED 已入账 CANCEL 退费
     * @updateTime 2022/4/7 16:40
     * @return: java.lang.Integer
     */
    HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecord record, PostStatusEnum postStatus);
    /***
     * 账户统计查询
     * @author liweifan
     * @param: totalReq
     * @updateTime 2022/4/24 10:48
     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.AccountTotal>
     */
    HttpResponseResult<AccountTotal> accountTotal(TotalReq totalReq);

    /**
     * 设置老师分润状态
     *
     * @param shareDto 老师状态
     * @return
     */
    void mallTeacherRecordState(List<MallOrderItemDto> shareDto);
    /**
     * 记录平台收入和用户分润收入
     * @return
     */
    boolean saveMallAccountRecord(List<MallOrderItemDto> shareDto);

    HttpResponseResult<AccountShareTotal> accountShareTotal(TotalReq query);
}