package com.yiqi.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yiqi.common.core.domain.R;
import com.yiqi.order.domain.OrderRecharge;
import com.yiqi.order.domain.OrderRechargeInstalment;
import com.yiqi.order.domain.OrderRechargeRefund;
import com.yiqi.order.domain.dto.*;
import com.yiqi.order.domain.vo.*;
import com.yiqi.recharge.domain.RechargePasswordCard;

import java.util.List;

/**
 * 充值订单Service接口
 *
 * @author ruoyi
 * @date 2023-09-27
 */
public interface IOrderRechargeService extends IService<OrderRecharge> {

    /**
     * 查询充值订单
     *
     * @param id 充值订单主键
     * @return 充值订单
     */
    public OrderRecharge selectOrderRechargeById(Long id);

    /**
     * 充值订单列表-撤单退款
     *
     * @param orderRechargeRefundQueryDTO 充值订单退款查询对象
     * @return 充值订单集合
     */
    public List<OrderRechargeRefundListVO> refundRechargeOrderList(OrderRechargeRefundQueryDTO orderRechargeRefundQueryDTO);

    /**
     * 查询充值订单列表
     *
     * @param orderRechargeQueryDTO 充值订单
     * @return 充值订单集合
     */
    public List<OrderRechargeListVO> selectOrderRechargeList(OrderRechargeQueryDTO orderRechargeQueryDTO);

    /**
     * 查询退卡列表
     *
     * @param orderRechargeListVO 退卡
     * @return 充值订单集合
     */
    public List<OrderRechargeListVO> selectRefundList(OrderRechargeListVO orderRechargeListVO);

    /**
     * 新增充值订单
     *
     * @param orderRechargeCreateDTO 充值订单
     * @return 结果
     */
    public OrderPayResultVO createRechargeOrder(OrderRechargeCreateDTO orderRechargeCreateDTO);


    /**
     * 新增充值订单 密码卡
     *
     * @param orderRechargeCreateDTO 充值订单
     * @return 结果
     */
    public OrderPayResultVO insertOrderRechargeByPasscard(OrderRechargeCreateDTO orderRechargeCreateDTO);


    /**
     * 充值成功，更新订单信息
     * @param orderRecharge
     * @param outTradeNo
     */
    void paySuccess(OrderRecharge orderRecharge, String outTradeNo);

    /**
     * 构建密码卡数据
     * @param rechargePasswordCard
     * @param orderRechargeCreateDTO
     * @return
     */
    public OrderRecharge buildOrderRechargeByCardPassword(RechargePasswordCard rechargePasswordCard, OrderRechargeCreateDTO orderRechargeCreateDTO);

    /**
     *  支付完成后， 创建密码卡， 更新订单信息
     * @param orderNo  订单编号
     */
    public R creatPassWordCardByPayNotify(String orderNo, String outTradeNo);


    /**
     * 根据订单编号查询订单信息
     * @param orderNo
     * @return
     */
    public OrderRecharge getOrderRechargeByOrderNo(String orderNo);

    /**
     * 修改充值订单
     *
     * @param orderRecharge 充值订单
     * @return 结果
     */
    public int updateOrderRecharge(OrderRecharge orderRecharge);

    /**
     * 拒绝退卡
     *
     * @param orderRechargeRefund 拒绝退卡
     * @return 结果
     */
    public int refundRechargeNo(OrderRechargeRefund orderRechargeRefund);

    /**
     * 同意退卡
     *
     * @param orderRechargeRefund 同意退卡
     * @return 结果
     */
    public int refundRechargeYes(OrderRechargeRefund orderRechargeRefund);
    /**
     * 批量删除充值订单
     *
     * @param ids 需要删除的充值订单主键集合
     * @return 结果
     */
    public int deleteOrderRechargeByIds(Long[] ids);

    /**
     * 删除充值订单信息
     *
     * @param id 充值订单主键
     * @return 结果
     */
    public int deleteOrderRechargeById(Long id);

    /**
     * 查询支付详情明细
     *
     * @param id 充值订单主键
     * @return 查询支付详情明细
     */
    public List<OrderRechargeInstalment> getPayDetailById (Long id, String orderStatus);

    /**
     * 查询门店会员充值记录
     *
     * @param useId 客户id
     * @return 查询门店会员充值记录
     */
    public List<OrderRechargeRecordVO> getRechargeRecordByUserId (Long useId);

    /**
     * 充值订单-撤单退款申请
     *
     * @param orderRechargeRefundDTO
     * @return 充值订单-撤单退款
     */
    public int refundRechargeApply(OrderRechargeRefundDTO orderRechargeRefundDTO);

    public R refundSuccess(String orderNo);

    public R refundClosed(String orderNo);

    public R refundError(String orderNo);

    /**
     * 充值订单-处理支付失败
     *
     * @param orderNo
     * @return 处理支付失败
     */
    public String handleCancelRecharge(String orderNo);


}
