package cn.pluss.platform.cash;

import cn.pluss.platform.entity.Cash;
import cn.pluss.platform.mapper.CashMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface CashService extends IService<Cash> {

    /**
     * api后台专用方法, 保存提现申请信息
     *
     * @param cash
     */
    void apiSaveCash(Cash cash);

    /**
     * api后台专用方法, 保存提现申请信息, v2
     *
     * @param cash
     */
    void apiSaveCashV2(Cash cash);

    /**
     * 提现详情
     * @param cash 提现信息
     * @return 提现详情
     */
    Cash cashDetail(Cash cash);

    /**
     * api后台专用方法, 保存提现申请信息, v2
     *
     * @param cash
     */
    void apiSaveCashV3(Cash cash);

    Cash queryCash(Cash cash);

    void updateCash(Cash cash);

    void deleteUserIdCash(Cash cash);

    List<Cash> queryCashPage(Map<String, Object> map);

    Integer queryCashPageCount(Map<String, Object> map);

    /**
     * 已经成功提现的金额/申请提现中的金额（粉丝分润）
     *
     * @param map
     * @return
     */
    Double sumFansSuccessCash(Map<String, Object> map);

    /**
     * 已经成功提现（粉丝分润）
     *
     * @param map 参数
     * @return
     */
    Double sumFansAlreadyCash(Map<String, Object> map);

    /**
     * 已经成功提现的金额/申请提现中的金额(推广分润)
     *
     * @param userId
     * @return
     */
    Double sumMerchantSuccessCash(@Param(value = "userId") Long userId);


    /**
     * 通过并打款
     *
     * @param cash 提现记录相关信息
     */
    void passAndRemit(Cash cash);

    /**
     * 批量通过并打款
     *
     * @param idList id列表
     */
    void batchPassAndRemit(List<String> idList);

    /**
     * @param params:
     * @return java.util.Map<java.lang.String, java.lang.Object>
     * @description:统计提现信息记录
     * @date: 2021/10/15 16:38
     */
    Map<String, Object> getCashCountData(Map<String, Object> params);

    /**
     * 查询有效的提现金额, 金额数量
     *
     * @param userId 用户id
     * @return
     */
    default BigDecimal getSumValidCashAmtTotal(@Param("userId") String userId) {
        return ((CashMapper) getBaseMapper()).selectCashAmtTotal(userId, Cash.STATUS_SUCCESS, Cash.STATUS_CHECKING);
    }

    /**
     * 查询已经提现的金额总数
     *
     * @param userId 用户id
     * @return
     */
    default BigDecimal getSumCashedAmtTotal(@Param("userId") String userId) {
        return ((CashMapper) getBaseMapper()).selectCashAmtTotal(userId, Cash.STATUS_SUCCESS);
    }

    /**
     * 查询审核中的提现金额
     *
     * @param userId 用户id
     * @return
     */
    default BigDecimal getSumCheckingCashAmtTotal(@Param("userId") String userId) {
        return ((CashMapper) getBaseMapper()).selectCashAmtTotal(userId, Cash.STATUS_CHECKING);
    }
}

