package com.ruoyi.ss.transactionBill.service;

import com.ruoyi.common.core.domain.ValidateResult;
import com.ruoyi.ss.transactionBill.domain.bo.RechargeBO;
import com.ruoyi.ss.transactionBill.domain.bo.RechargePayDepositBO;
import com.ruoyi.ss.transactionBill.domain.dto.RechargePayBO;
import com.ruoyi.ss.transactionBill.domain.vo.TransactionBillVO;
import com.ruoyi.ss.user.domain.SmUserVO;

/**
 * 2024/4/22
 */
public interface TransactionBillValidator {

    /**
     * 创建订单前校验
     *
     * @param bo
     * @return
     */
    ValidateResult preAddOrder(RechargeBO bo);

    /**
     * 获取订单详情前校验
     * @param billId
     * @param userId
     * @return
     */
    ValidateResult preGetDetailByApp(Long billId, Long userId);


    /**
     * 能否在线充值
     */
    boolean canRechargeOnline(Long deviceId);

    /**
     * 判断用户是否订单收款人
     * @param bill 订单
     * @param userId 用户ID
     */
    boolean isMch(TransactionBillVO bill, Long userId);

    /**
     * 判断用户是否订单发起人
     */
    boolean isUser(TransactionBillVO bill, Long userId);

    /**
     * 支付前校验
     */
    ValidateResult prePay(RechargePayBO bo);

    /**
     * 支付押金前校验
     */
    ValidateResult prePayDeposit(RechargePayDepositBO bo);

    /**
     * 判断用户是否是订单的代理商
     */
    boolean isAgent(TransactionBillVO bill, Long userId);

    /**
     * 校验退款风控
     * @param user 用户
     */
    void checkRefundRisk(SmUserVO user);

    /**
     * 是否允许操作订单
     */
    boolean canOperaOrder(TransactionBillVO bill, Long userId);

    /**
     * 是否允许查看订单
     */
    boolean canViewOrder(TransactionBillVO bill, Long userId);
}
