package com.yc.ship.module.trade.service.order;

import com.yc.ship.framework.common.pojo.CommonResult;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.trade.controller.admin.order.vo.check.*;
import com.yc.ship.module.trade.controller.app.pda.vo.PdaCheckStaticReqVO;
import com.yc.ship.module.trade.controller.app.pda.vo.PdaCheckStaticRespVO;
import com.yc.ship.module.trade.controller.app.pda.vo.PdaCheckTotalStaticRespVO;

import java.util.List;
import java.util.Map;

/**
 * 核销服务
 *
 * @author JuneQI
 * &#064;date  2025/8/16 17:36
 */
public interface TradeCheckService {

    /**
     * 核销接口
     *
     * @param checkReqVO 核销参数
     * @return 核销信息
     */
    CommonResult<List<TradeCheckRespVO>> checkCommon(TradeCheckReqVO checkReqVO);

    /**
     * 闸机核销
     *
     * @param checkReqVO 核销参数
     * @return 核销信息
     */
    CommonResult<List<TradeCheckRespVO>> checkGate(TradeCheckReqVO checkReqVO);

    CommonResult<Boolean> checkGateUpdate(TradeCheckUrlVO checkReqVO);

    /**
     * PDA核销
     *
     * @param checkReqVO 核销参数
     * @return 核销信息
     */
    CommonResult<List<TradeCheckRespVO>> checkPda(TradeCheckReqVO checkReqVO);

    CommonResult<List<PdaCheckStaticRespVO>> pdaCheckStatic(PdaCheckStaticReqVO checkReqVO);

    CommonResult<Map<String, Object>> pdaCheckTotalCount(String dispatchId);

    CommonResult<List<PdaCheckTotalStaticRespVO>> pdaCheckTotalStatic(PdaCheckStaticReqVO checkReqVO);

    /**
     * 小程序核销
     *
     * @param checkReqVO 核销参数
     * @return 核销信息
     */
    CommonResult<List<TradeCheckRespVO>> checkApplet(TradeCheckReqVO checkReqVO);

    /**
     * 其他核销
     *
     * @param checkReqVO 核销参数
     * @return 核销信息
     */
    CommonResult<List<TradeCheckRespVO>> checkOther(TradeCheckReqVO checkReqVO);

    /**
     * 查询核销记录
     */
    CommonResult<?> queryCheckPage(TradeCheckPageReqVO reqVO);


    /**
     * 查询核销记录 (小程序端)
     *
     * @param reqVO 参数
     */
    CommonResult<?> querySimpleCheckPage(TradeCheckPageReqVO reqVO, boolean needDetail);

    PageResult<CheckRespVO> querySimpleCheckList(TradeCheckPageReqVO reqVO, boolean needDetail);

    /**
     * 查询核销明细
     *
     * @param checkId 明细ID
     */
    CommonResult<?> queryCheckDetailList(Long checkId);

}
