package cn.ppdxzz.service;

import cn.ppdxzz.domain.Student;

import java.io.InputStream;
import java.util.List;

/**
 * Description:学生业务层接口，定义了对学生信息进行操作的方法
 */
public interface StudentService {

    /**
     * 分页查询所有学生信息
     * @param page 当前页码
     * @param size 每页显示的记录数
     * @return 返回学生列表
     * @throws Exception 如果查询过程中发生错误
     */
    List<Student> findAll(int page, int size) throws Exception;

    /**
     * 根据学号查询学生信息
     * @param sno 学生的学号
     * @return 返回对应的学生对象
     * @throws Exception 如果查询过程中发生错误
     */
    Student findBySno(String sno) throws Exception;

    /**
     * 分页搜索学生信息
     * @param page 当前页码
     * @param size 每页显示的记录数
     * @param keyword 搜索关键字
     * @return 返回符合条件的学生列表
     * @throws Exception 如果搜索过程中发生错误
     */
    List<Student> search(int page, int size, String keyword) throws Exception;

    /**
     * 添加新的学生信息
     * @param student 要添加的学生对象
     * @return 成功添加返回true，否则返回false
     * @throws Exception 如果添加过程中发生错误
     */
    boolean add(Student student) throws Exception;

    /**
     * 根据学号删除学生信息
     * @param sno 学生的学号
     * @throws Exception 如果删除过程中发生错误
     */
    void delete(String sno) throws Exception;

    /**
     * 更新学生信息
     * @param student 要更新的学生对象
     * @throws Exception 如果更新过程中发生错误
     */
    void update(Student student) throws Exception;

    /**
     * 获取包含所有学生信息的输入流
     * @return 返回一个携带所有学生信息数据的InputStream输入流
     * @throws Exception 如果获取过程中发生错误
     */
    InputStream getInputStream() throws Exception;

    /**
     * 根据宿舍ID和状态查询学生信息
     * @param dorm_id 宿舍ID
     * @param status 学生状态（激活或禁用）
     * @return 返回符合条件的学生列表
     * @throws Exception 如果查询过程中发生错误
     */
    List<Student> findByDormId(String dorm_id, Integer status) throws Exception;

    /**
     * 根据教师姓名分页查询学生信息
     * @param page 当前页码
     * @param size 每页显示的记录数
     * @param teacher 教师姓名
     * @return 返回符合条件的学生列表
     * @throws Exception 如果查询过程中发生错误
     */
    List<Student> findByTeacher(int page, int size, String teacher) throws Exception;

    /**
     * 根据教师姓名和搜索关键字分页查询学生信息
     * @param page 当前页码
     * @param size 每页显示的记录数
     * @param teacher 教师姓名
     * @param keyword 搜索关键字
     * @return 返回符合条件的学生列表
     * @throws Exception 如果查询过程中发生错误
     */
    List<Student> searchStudent(int page, int size, String teacher, String keyword) throws Exception;
}
