package com.sonic.lion.service;

import com.sonic.lion.enums.BizType;
import com.sonic.lion.enums.PayChannel;
import com.sonic.lion.domain.entity.PayTrade;
import com.sonic.lion.domain.entity.WithdrawRequest;
import com.sonic.lion.domain.output.ChannelPayoutOutput;
import org.springframework.lang.NonNull;

/**
 * @author code
 * 提现服务
 * 专门为提现 设计
 */
public interface WithdrawService {


    /**
     * 检查提现金额
     * @param payChannel
     * @param amount
     */
    void checkAmount(PayChannel payChannel, Long amount,Long userId);


    /**
     * 发起提现审核
     *
     * @param input
     */
    void withdrawReview(WithdrawRequest input);


    /**
     * 审核时间过了 进行提现操作
     *
     * @param payTrade
     */
    void handWithdrawWhenReviewTimeOut(PayTrade payTrade);


    /**
     * 提现失败回滚逻辑
     *
     * @param tradeNo
     * @param bizType
     * @param message
     */
    void withdrawFail(@NonNull String tradeNo, BizType bizType, String message);


    /**
     * 提现成功 操作
     *
     * @param tradeNo
     */
    void withdrawSuccess(@NonNull String tradeNo);


    /**
     * mock接口用于 将 提现中、提现成功 状态的单子处理为终态
     * @param tradeNo
     * @param payoutOutput
     */
    @Deprecated
    void mockWithdrawToFinalState(String tradeNo, ChannelPayoutOutput payoutOutput);

}
