package com.hzu.labbooking.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzu.labbooking.domain.Lab;
import com.hzu.labbooking.domain.vo.*;

/**
 * 实验室信息Service接口
 *
 * @author yezihao
 * @date 2021-04-29
 */
public interface ILabService extends IService<Lab> {

    /**
     * 查询实验室信息
     *
     * @param id 实验室信息ID
     * @return 实验室信息
     */
    public Lab selectLabById(Long id);

    /**
     * 查询实验室信息列表
     *
     * @param lab 实验室信息
     * @return 实验室信息集合
     */
    public List<LabVO> selectBookLabList(Lab lab);

    /**
     * 管理员查询实验室信息列表
     *
     * @param lab 实验室信息
     * @return 实验室信息集合
     */
    public List<MyLabVO> selectLabList(Lab lab);

    /**
     * 新增实验室信息
     *
     * @param lab 实验室信息
     * @return 结果
     */
    public int insertLab(Lab lab);

    /**
     * 修改实验室信息
     *
     * @param lab 实验室信息
     * @return 结果
     */
    public int updateLab(Lab lab);

    /**
     * 获取所有实验室课表
     *
     * @param year 年
     * @param term 学期
     * @return 结果
     */
    public List<LabTableVO> getAllLabTable(Long year, Long term);

    /**
     * 获取课表详细信息
     *
     * @param labId 实验室ID
     * @return 结果
     */
    public LabTableDetailsVO getTableDetails(Long labId);

    /**
     * 获取实验室使用率
     *
     * @return 结果
     */
    public List<LabUseVO> getLabUseRate(Long year, Long term);

    /**
     * 获取某个实验室所有可预约课表数据
     *
     * @param labId 实验室ID
     * @param year  学年
     * @param term  学期
     * @return 结果
     */
    public List<LabTableVO> getAllApplyTable(long labId, long year, long term);

    /**
     * 获取某个实验室所有预约情况数据
     *
     * @param labId 实验室ID
     * @param year  学年
     * @param term  学期
     * @return 结果
     */
    public List<LabTableVO> getAllAppliedTable(long labId, long year, long term);

    /**
     * 更新实验室状态
     *
     * @param lab 实验室信息
     * @return 结果
     */
    public int updateLabStatus(Lab lab);

}
