package com.xjrsoft.module.room.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseService;
import com.xjrsoft.module.room.dto.AdjustBedPageDto;
import com.xjrsoft.module.room.dto.AdjustClassPageDto;
import com.xjrsoft.module.room.dto.AdjustStudentBedDto;
import com.xjrsoft.module.room.dto.DistributeClassPageDto;
import com.xjrsoft.module.room.dto.DistributeRoomBedDto;
import com.xjrsoft.module.room.dto.DistributeRoomBedPageDto;
import com.xjrsoft.module.room.dto.RoomBedPageDto;
import com.xjrsoft.module.room.entity.RoomBed;
import com.xjrsoft.module.room.vo.AdjustBedClassPageVo;
import com.xjrsoft.module.room.vo.AdjustBedStudentPageVo;
import com.xjrsoft.module.room.vo.DistributeClassPageVo;
import com.xjrsoft.module.room.vo.DistributeResultClassVo;
import com.xjrsoft.module.room.vo.DistributeRoomBedPageVo;
import com.xjrsoft.module.room.vo.NoBedStudentPageVo;
import com.xjrsoft.module.room.vo.RoomBedExcelVo;
import com.xjrsoft.module.room.vo.RoomBedPageVo;

import java.util.List;

/**
* @title: 寝室床位
* @Author dzx
* @Date: 2023-12-27
* @Version 1.0
*/

public interface IRoomBedService extends MPJBaseService<RoomBed> {

    /**
     * 分页查询
     * @param page
     * @param dto
     * @return
     */
    Page<RoomBedPageVo> getPage(Page<RoomBedPageVo> page, RoomBedPageDto dto);

    List<RoomBedExcelVo> getList(RoomBedPageDto dto);


    Boolean clearStudentInfo(List<Long> ids);

    Boolean clearStudentInfoByRoomId(Long id);

    Boolean clearStudentInfoByBedId(Long id);

    /**
     * 分配床位，第一步查询班级
     * @param page
     * @param dto
     * @return
     */
    Page<DistributeClassPageVo> getDistributeClassInfo(Page<DistributeClassPageDto> page, DistributeClassPageDto dto);

    /**
     * 分配床位，第二步查询班级
     * @param page
     * @param dto
     * @return
     */
    Page<DistributeRoomBedPageVo> getDistributeRoomBedInfo(Page<DistributeRoomBedPageDto> page, DistributeRoomBedPageDto dto);

    Boolean distributeRoomBed(DistributeRoomBedDto dto);

    /**
     * 返回分配的结果
     * @param dto
     * @return
     */
    List<DistributeResultClassVo> getDistributeResult(DistributeRoomBedDto dto);

    /**
     * 调整床位，左边的班级学生信息
     * @param dto
     * @return
     */
    List<AdjustBedClassPageVo> getClassStudetBed(AdjustClassPageDto dto);

    /**
     * 调整床位，右边的床位学生信息
     * @param dto
     * @return
     */
    List<AdjustBedStudentPageVo> getBedStudetInfo(AdjustBedPageDto dto);

    /**
     * 未分配床位的学生信息
     * @param page
     * @param dto
     * @return
     */
    Page<NoBedStudentPageVo> getNoBedStudent(Page<AdjustBedPageDto> page, AdjustBedPageDto dto);

    /**
     * 单个学生调整床位
     * @param dto
     */
    Boolean adjustBed(AdjustStudentBedDto dto);


    /**
     * 批量学生调整床位
     * @param dtoList 批量传入学生id和床位id
     */
    Boolean adjustBedBatch(List<AdjustStudentBedDto> dtoList);


    String getRoomNameByStudentUserId(Long id);
}
