package com.yc.ship.module.product.service.voyagestockdetail;

import javax.validation.*;

import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailBatchSaveReqVO;
import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailRespNewVO;
import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;

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

/**
 * 航次库存 Service 接口
 *
 * @author 管理员
 */
public interface VoyageStockDetailService {

    /**
     * 创建航次库存
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Boolean createVoyageStock(@Valid List<VoyageStockDetailSaveReqVO> createReqVO);

    /**
     * 更新航次库存
     *
     * @param updateReqVO 更新信息
     */
    void updateVoyageStock(@Valid VoyageStockDetailSaveReqVO updateReqVO);

    /**
     * 删除航次库存
     *
     * @param id 编号
     */
    void deleteVoyageStock(Long id);

    /**
     * 获得航次库存
     *
     * @param id 编号
     * @return 航次库存
     */
    VoyageStockDetailDO getVoyageStock(Long id);

    List<VoyageStockDetailDO> getListByVoyageId(Long voyageId);

    /**
     * 计算并返回航次库存内舱房合计行
     *
     * @param voyageId 航次ID
     * @return 航次库存合计对象
     */
    VoyageStockDetailDO getVoyageStockTotalRow(Long voyageId);

    /**
     * 处理共享库存
     *
     * @param voyageId 航次ID
     * @param distributeNum 已分配给分销商的库存
     * @param stockDistributeNewList 分销商库存详情
     */
    void handleShareNum(Long voyageId, BigDecimal distributeNum, List<VoyageStockDistributeNewDO> stockDistributeNewList);

    /**
     * 批量初始化库存时设置库存的初始值
     * @param shipId
     * @return
     */
    List<VoyageStockDetailRespNewVO> getInitByShip(Long shipId);

    /**
     * 批量初始化库存
     * @param createReqVO
     * @return
     */
    Boolean batchCreateVoyageStock(VoyageStockDetailBatchSaveReqVO createReqVO);
}