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

import java.util.*;
import javax.validation.*;
import com.yc.ship.module.product.controller.admin.pricevoyage.vo.*;
import com.yc.ship.module.product.controller.app.voyage.vo.*;
import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.framework.common.pojo.PageParam;

/**
 * 航次价格 Service 接口
 *
 * @author 管理员
 */
public interface PriceVoyageService {

    /**
     * 创建航次价格
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPriceVoyage(@Valid PriceVoyageSaveReqVO createReqVO);

    /**
     * 更新航次价格
     *
     * @param updateReqVO 更新信息
     */
    void updatePriceVoyage(@Valid PriceVoyageSaveReqVO updateReqVO);

    /**
     * 删除航次价格
     *
     * @param id 编号
     */
    void deletePriceVoyage(Long id);

    /**
     * 获得航次价格
     *
     * @param id 编号
     * @return 航次价格
     */
    PriceVoyageRespVO getPriceVoyage(Long id);

    /**
     * 获得航次价格分页
     *
     * @param pageReqVO 分页查询
     * @return 航次价格分页
     */
    PageResult<PriceVoyageDO> getPriceVoyagePage(PriceVoyagePageReqVO pageReqVO);

    PriceVoyageRespVO getByVoyageId(Long voyageId);

    /**
     * 获取航次的日历表价格
     * @param reqVO
     * @return
     */
    List<AppVoyageCalendarPriceRespVO> getListCalendarPrice(AppVoyageCalendarPriceReqVO reqVO);

    /**
     * 根据航次列表获取房型价格
     * @param voyageId
     * @return
     */
    List<AppRoomModelPriceRespVO> getRoomModelListByVoyageId(Long voyageId);

    /**
     * 获取APP房间价格
     * @param voyageId
     * @param roomModelId
     * @return
     */
    AppPriceVoyageRespVO getAppPrice(Long voyageId, Long roomModelId);
}