package com.yc.ship.module.resource.service.room;

import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;
import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomBatchSaveReqVO;
import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomPageReqVO;
import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomRespVO;
import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomSaveReqVO;
import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 资源管理-游轮房间管理 Service 接口
 *
 * @author lfy
 */
public interface ResourceRoomService {

    /**
     * 创建资源管理-游轮房间管理
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRoom(@Valid ResourceRoomSaveReqVO createReqVO);

    /**
     * 更新资源管理-游轮房间管理
     *
     * @param updateReqVO 更新信息
     */
    void updateRoom(@Valid ResourceRoomSaveReqVO updateReqVO);

    /**
     * 删除资源管理-游轮房间管理
     *
     * @param id 编号
     */
    void deleteRoom(Long id);

    /**
     * 获得资源管理-游轮房间管理
     *
     * @param id 编号
     * @return 资源管理-游轮房间管理
     */
    ResourceRoomDO getRoom(Long id);

    /**
     * 获得资源管理-游轮房间管理分页
     *
     * @param pageReqVO 分页查询
     * @return 资源管理-游轮房间管理分页
     */
    PageResult<ResourceRoomDO> getRoomPage(ResourceRoomPageReqVO pageReqVO);

    /**
     * 根据游轮ID获取房间列表
     * @param shipId
     * @return
     */
    List<ResourceRoomDO> getRoomListByShipId(String shipId);

    /**
     * 根据游轮ID和楼层获取房间列表
     * @param shipId
     * @param floors
     * @return
     */
    List<ResourceRoomDO> getRoomListByShipIdAndFloors(String shipId, String floors);

    /**
     * 批量新增房间
     * @param createReqVO
     * @return
     */
    Boolean createBatchRoom(ResourceRoomBatchSaveReqVO createReqVO);

    List<ResourceRoomDO> getRoomListByIds(List<Long> ids);
    /**
     * 根据房间模型ID和楼层获取房间列表
     * @param shipId
     * @param roomModelIdFloorList
     * @return
     */
    List<ResourceRoomDO> getRoomListByRoomModelIdAndFloor(Long shipId, List<String> roomModelIdFloorList);

    List<ResourceRoomRespVO> getRoomListByShipIdAndFloorsForArrange(String shipId, String voyageId, String floors);

}