package com.prolog.cs.biz.outbound.service;

import com.prolog.cs.basic.item.model.BaseMtlItemMst;
import com.prolog.cs.biz.outbound.model.dto.check.CheckConfirmDTO;
import com.prolog.cs.biz.outbound.model.dto.check.CheckInfoDTO;
import com.prolog.cs.biz.outbound.model.dto.check.CheckMakeRedDTO;
import com.prolog.cs.biz.outbound.model.dto.check.LclAdjustDTO;
import com.prolog.cs.biz.outbound.model.vo.check.BarCodeDVO;
import com.prolog.cs.biz.outbound.model.vo.check.InnerCheckBillV2VO;
import com.prolog.cs.biz.outbound.model.vo.check.InnerCheckConfirmCheckVO;
import com.prolog.cs.biz.outbound.model.vo.check.LclVO;
import com.prolog.entity.vo.ApplyForPickSlideVO;
import com.prolog.framework.bz.common.print.PrintData;
import com.prolog.framework.common.message.RestMessage;

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

public interface InnerCheckV2Service {

    RestMessage<InnerCheckBillV2VO> getCurrentContainer(
            String containerCode,
            String stationCode,
            String billGroupId,
            Integer lclNo,
            Integer isDoubleCheck,
            String warehouseId
    );

    InnerCheckBillV2VO findPickupByContainerFunc(
            String containerCode,
            String stationCode,
            String pickTaskDId,
            String billGroupId,
            Integer lclNo,
            Integer isDoubleCheck
    );

    LclVO queryLcl(
            String stationCode,
            String billGroupId,
            Integer lclNo,
            String containerCode,
            Integer isDoubleCheck,
            List<BaseMtlItemMst> itemList
    );

    RestMessage<InnerCheckBillV2VO> makeCheckRed(CheckMakeRedDTO redDTO);

    RestMessage<InnerCheckBillV2VO> checkItem(CheckInfoDTO checkInfoDTO);

    RestMessage<InnerCheckBillV2VO> checkItemByNum(CheckInfoDTO checkInfoDTO);

    RestMessage<Boolean> lclAdjust(List<LclAdjustDTO> lclInfos);

    List<BarCodeDVO> queryLclByBarcodeId(String barcodeId);

    PrintData printLclDetail(String containerCode, String billId, String lclNo);

    PrintData printLcl(String containerCode, String billId, String lclNo);

    RestMessage<InnerCheckConfirmCheckVO> confirmCheck(CheckConfirmDTO checkConfirmDTO);

    InnerCheckBillV2VO splitPickTaskD(
            String pickTaskDId,
            BigDecimal qty,
            String itemCode,
            int lclNo,
            String workCode
    );

    Map innerCheckConfig(String warehouseId);

    Map<String, Object> applyForPickSlide(ApplyForPickSlideVO vo);
}
