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

import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.*;
import com.yc.ship.module.product.controller.app.voyage.vo.AppCanSelectRoomReqVO;
import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;

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

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

    /**
     * 创建分配库存
     * @param voyageId
     * @param createReqVO
     */
    void createVoyageStockDistributeNew(Long voyageId, Integer type, List<VoyageStockDistributeNewSaveReqVO> createReqVO);

    /**
     * 获取航次库存分配
     * @param voyageId
     * @param type
     * @return
     */
    List<VoyageStockDistributeNewRespVO> getByVoyageId(Long voyageId, Integer type);

    /**
     * 获取房间列表
     * @param voyageId
     * @param shipId
     * @return
     */
    List<RoomRespDTO> getRoomList(Long voyageId, Long shipId);

    /**
     * 分销商下单时获取可以选择的房间号
     * @param reqVO
     * @return
     */
    List<RoomRespDTO> getCanSelectRoomList(QueryCanSelectRoomListNewReqVO reqVO);

    PageResult<VoyageStockDistributeNewPageRespVO> getPage(VoyageStockDistributeNewPageReqVO reqVO);

    List<VoyageStockDistributeNewRespVO> getDetail(VoyageStockDistributeNewDetailReqVO reqVO);

    /**
     * 获取分销商房间列表
     * @param voyageId
     * @param shipId
     * @param distributorId
     * @return
     */
    List<RoomRespDTO> getDistributorRoomList(Long voyageId, Long shipId, Long distributorId);

    /**
     * 获取分销商库存数量
     * @param voyageId
     * @return
     */
    BigDecimal getDistributeNum(Long voyageId);
    /**
     * 获取APP可以选择的房间列表
     * @param reqVO
     * @return
     */
    List<RoomRespDTO> getAppCanSelectRoomList(AppCanSelectRoomReqVO reqVO);
}