package cn.iocoder.yudao.module.bpm.service.meeting.reserve;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.meeting.reserve.vo.OaMeetingReservePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.meeting.reserve.vo.OaMeetingReserveSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.meeting.reserve.OaMeetingReserveDO;

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

/**
 * 会议室预定管理信息 Service 接口
 *
 * @author dp
 */
public interface OaMeetingReserveService {

    /**
     * 创建会议室预定管理信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOaMeetingReserve(@Valid OaMeetingReserveSaveReqVO createReqVO);

    /**
     * 更新会议室预定管理信息
     *
     * @param updateReqVO 更新信息
     */
    void updateOaMeetingReserve(@Valid OaMeetingReserveSaveReqVO updateReqVO);

    /**
     * 删除会议室预定管理信息
     *
     * @param id 编号
     */
    void deleteOaMeetingReserve(Long id);

    /**
     * 获得会议室预定管理信息
     *
     * @param id 编号
     * @return 会议室预定管理信息
     */
    OaMeetingReserveDO getOaMeetingReserve(Long id);

    /**
     * 获得会议室预定管理信息分页
     *
     * @param pageReqVO 分页查询
     * @return 会议室预定管理信息分页
     */
    PageResult<OaMeetingReserveDO> getOaMeetingReservePage(OaMeetingReservePageReqVO pageReqVO);

    /**
     * 取消会议室预定管理信息
     *
     * @param id 主键id
     */
    void cancelOaMeetingReserve(Long id);

    /**
     * 开始会议室预定管理信息
     *
     * @param id 主键id
     */
    void startOaMeetingReserve(Long id);

    /**
     * 结束会议室预定管理信息
     *
     * @param id 主键id
     */
    void endOaMeetingReserve(Long id);

    void updateOaMeetingReserveStatus(List<Long> ids, String status);

    /**
     * 根据会议室和月份查询会议室预定管理信息
     *
     * @param roomId 会议室id
     * @param month  月份
     * @return 预定管理信息
     */
    List<OaMeetingReserveDO> getOaMeetingReserveList(Long roomId, String month) throws ParseException;
}