package com.m2pool.lease.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.m2pool.lease.dto.*;
import com.m2pool.lease.dto.v2.*;
import com.m2pool.lease.entity.LeaseOrderInfo;
import com.m2pool.lease.vo.*;
import com.m2pool.lease.vo.v2.CoinAndAlgorithmVo;

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

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author yyb
 * @since 2025-07-23
 */
public interface LeaseOrderInfoService extends IService<LeaseOrderInfo> {
    /**
     * 添加订单
     * @param orderAndCodeVo
     * @return
     */
    Result<String> addOrders(OrderAndCodeVo orderAndCodeVo);


    /**
     * 再次购买
     * @param orderInfoVoList
     * @return
     */
    Result<List<PaymentRecordDto>> buyAgain(List<OrderInfoVo> orderInfoVoList);
    /**
     * 根据订单状态查询订单列表（买家）
     * @param orderInfoStateVo
     * @return
     */
    PageResult<OrderInfoDto> getOrdersByStatus(OrderInfoStateVo orderInfoStateVo);

    /**
     * 根据订单状态查询订单列表（卖家）
     * @param orderInfoStateVo
     * @return
     */
    PageResult<OrderInfoDto> getOrdersByStatusForSeller(OrderInfoStateVo orderInfoStateVo);

    /**
     * 根据订单id查询订单
     * @param orderVo
     * @return
     */
    Result<OrderInfoDto> getOrdersByIds( OrderVo orderVo);

    /**
     * 取消订单
     * @param orderVo
     * @return
     */
    Result<String> cancelOrder(OrderVo orderVo);

    /**
     * 获取用户选择的支付币种 获取实时币价
     * @param coinVo
     * @return
     */
    Result<BigDecimal> getCoinPrice(CoinVo coinVo);


    /**
     * 获取矿机对应的支持币种和算法
     * @return
     */
    Result<List<CoinAndAlgorithmListDto>> getMachineSupportCoinAndAlgorithm(List<BaseVo> machineIds);

    /**
     * 获取当前矿机支持的矿池币种信息
     * @param machineIds
     * @return
     */
    Result<List<MiningInfoDto>> getMachineSupportPool(CoinAndAlgorithmVo coinAndAlgorithmVo);

    /**
     * 添加订单-V2
     * @param orderAndCodeVo
     * @return
     */
    Result<String> addOrdersV2( OrderAndCodeVo orderAndCodeVo);


    /**
     * 获取用户已购商品列表-V2
     * @param pageVo
     * @return
     */
    PageResult<PurchasedMachineListDto> getPurchasedItems(PageVo pageVo);


    /**
     * 根据id查询用户已购商品详情-V2
     * @param baseVo
     * @return
     */
    Result<MiningConfigInfoDto> getPurchasedInfo(BaseVo baseVo);
}
