package com.zioinfo.mes.inventory.mapper;

import com.zioinfo.mes.inventory.MesInventory;
import com.zioinfo.mes.inventory.MesInventoryTxn;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

@Mapper
public interface InventoryMapper {
    List<MesInventory> findAll(@Param("itemCode") String itemCode,
                               @Param("warehouseCode") String warehouseCode,
                               @Param("keyword") String keyword);
    MesInventory findOne(@Param("itemCode") String itemCode,
                         @Param("warehouseCode") String warehouseCode,
                         @Param("locationCode") String locationCode,
                         @Param("lotNo") String lotNo);
    /** 품목 총 가용재고. */
    Double sumQty(@Param("itemCode") String itemCode);
    /** 안전재고 미달 품목. */
    List<MesInventory> findBelowSafety();

    int insertStock(MesInventory inv);
    int updateQty(@Param("id") Long id, @Param("qty") Double qty);

    int insertTxn(MesInventoryTxn txn);
    List<MesInventoryTxn> findTxns(@Param("itemCode") String itemCode,
                                   @Param("refType") String refType,
                                   @Param("refNo") String refNo,
                                   @Param("limit") int limit);

    /** LOT 기준 이동 이력(추적용). */
    List<MesInventoryTxn> findByLot(@Param("lotNo") String lotNo);

    /** 재고 KPI 요약. */
    Map<String, Object> kpiSummary();
}
