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

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.entity.BarcodeHDO;
import com.prolog.cs.biz.outbound.model.vo.PrintVO;
import com.prolog.cs.biz.outbound.model.vo.check.InnerCheckBillVO;
import com.prolog.cs.biz.outbound.model.vo.check.LclVO;
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 InnerCheckService {
    RestMessage<InnerCheckBillVO> getCurrentContainer(String containerCode, String stationCode);

    RestMessage<InnerCheckBillVO> checkItem(CheckInfoDTO checkInfoDTO);

    RestMessage<Boolean> pickTaskDCheckConfirm(CheckConfirmDTO checkInfoDTO);

    RestMessage<BarcodeHDO> addLcl(String stationCode, String billGroupId,String containerCode);


    RestMessage<List> containerCheckConfirm(CheckConfirmDTO checkConfirmDTO);

    RestMessage<InnerCheckBillVO> checkItemByNum(CheckInfoDTO checkInfoDTO);

    void updateLcl(String barcodeHId, String itemCode, String itemId,
                   BigDecimal qty,String containerCode,String pickTaskDId, Integer isPiece, String warehouseId);

    RestMessage<List<InnerCheckBillVO>> getContainersInfo(String stationCode);

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

    RestMessage<LclVO> queryLcl(String stationCode, String billGroupId, String lclNo,String containerCode, Integer isDoubleCheck);


    RestMessage<InnerCheckBillVO> makeCheckRed(CheckMakeRedDTO redDTO);

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

    RestMessage<Boolean> pieceBreak(String billGroupId, String containerCode,String stationCode);

    RestMessage<Boolean> lclDelete(String stationCode, String billGroupId,String containerCode, String lclNo);

    PrintData printLclDetail(String stationCode, String billGroupId, String lclNo);
    RestMessage<String> getItemInfo(String itemBarcode, String billGroupId);

    void saveInnerCheckDetails(CheckConfirmDTO checkConfirmDTO);

    Map innerCheckConfig(String warehouseId);
}
