package com.jxy.order.service;

import com.jxy.common.core.web.Result.AjaxResult;
import com.jxy.order.dto.AddCreditOrderDto;
import com.jxy.order.dto.UserAccountDto;
import com.jxy.order.entity.AddressInfo;
import com.jxy.order.vo.*;

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

/**
 * @Description TODO
 * @Date 2023/5/4 14:10
 * @Author 杜懿
 */
public interface OrderService {

    ///**
    // * 获取用户专属收款地址
    // * @return
    // */
    //public AjaxResult getUserAddress();

    /**
     * 充值订单生成
     * @param vo
     * @return
     */
    public AjaxResult createAddCreditOrder(AddCreditOrderVo vo);

    /**
     * 用户确认之后立即处理订单
     * @param vo
     * @return
     */
    public AjaxResult handleOrder(OrderChangeByTxidVo vo);

    /**
     * 用户取消订单
     * @param vo
     * @return
     */
    public AjaxResult cancelOrder(OrderIdVo vo);

    /**
     * 根据txid处理订单
     * @param vo
     * @return
     */
    public AjaxResult handleOrderByTxid(OrderChangeByTxidVo vo);

    /**
     * 根据判断用户是否可以使用txid校验服务 4小时只能查1次
     * @return
     */
    public AjaxResult checkLastUseTxid();

    /**
     * 按状态获取充值订单
     * @param vo
     * @return
     */
    public List getAddCreditOrderList(OrderStatusVo vo);

    /**
     * 获取订单详情
     * @param id
     * @return
     */
    public AjaxResult getAddCreditOrderById(long id);

    /**
     * 新增地址
     * @param vo
     * @return
     */
    public AjaxResult AddTotalAddresses(TotalAddressVo vo);

    /**
     * 处理充值订单
     * @param vo
     * @return
     */
    public AjaxResult handleAddCreditOrder(HandleAddCreditOrderVo vo,Long userId);


    /**
     * 查看个人历史订单记录
     * @param
     * @param vo
     * @return
     */
    public List<AddCreditOrderDto> privateOrder(StatusPageVo vo);


    /**
     * 查看所有地址
     * @param
     * @param vo
     * @return
     */
    public List<AddressInfo> getAllAddress(StatusPageVo vo);



    /**
     * 查看用户账号信息
     * @param
     * @return
     */
    public AjaxResult getUserAccount();


    public UserAccountDto updateUserAccountAfterRefuseWithdraw(Long userId, String coin, BigDecimal amount);

}
