package com.itheima.service.impl;  // 定义包路径，表明该类是实现类，位于 service.impl 包下

import com.itheima.dao.ClassDao;  // 导入 ClassDao，用于与数据库交互
import com.itheima.po.Class;  // 导入 Class 实体类，表示班级
import com.itheima.po.PageInfo;  // 导入 PageInfo 类，用于封装分页信息
import com.itheima.service.ClassService;  // 导入 ClassService 接口，定义班级服务
import org.springframework.beans.factory.annotation.Autowired;  // 导入 Spring 注解，用于自动注入依赖
import org.springframework.stereotype.Service;  // 导入 Service 注解，标记该类为服务层的实现
import org.springframework.transaction.annotation.Transactional;  // 导入事务管理注解

import java.util.List;  // 导入 List 类，用于存储班级信息列表

/**
 * 班级Service接口实现类
 */
@Service("classService")  // 将该类标记为 Spring 服务类，bean 名称为 "classService"
@Transactional  // 表示该类的所有方法都由 Spring 管理事务
public class ClassServiceImpl implements ClassService {  // 实现 ClassService 接口

    // 自动注入 ClassDao，用于访问数据库操作
    @Autowired
    private ClassDao classDao;  // Spring 会自动注入符合类型的 ClassDao 实现

    /**
     * 分页查询班级信息
     * @param c_classname 班级名称
     * @param c_counsellor 班级辅导员
     * @param c_classid 班级ID
     * @param pageIndex 当前页码
     * @param pageSize 每页显示的记录数
     * @return 返回封装了班级信息的分页对象
     */
    @Override
    public PageInfo<Class> findPageInfo(String c_classname, String c_counsellor, Integer c_classid, Integer pageIndex, Integer pageSize) {
        PageInfo<Class> pi = new PageInfo<Class>();  // 创建 PageInfo 对象，用于存储分页信息
        pi.setPageIndex(pageIndex);  // 设置当前页码
        pi.setPageSize(pageSize);  // 设置每页显示的记录数
        
        // 获取符合条件的总记录数
        Integer totalCount = classDao.totalCount(c_classname, c_classid, c_counsellor);  // 调用 ClassDao 获取总记录数
        if (totalCount > 0) {  // 如果总记录数大于 0，表示有查询结果
            pi.setTotalCount(totalCount);  // 设置分页对象的总记录数
            // 计算查询数据的起始行数 (当前页 - 1) * 每页记录数
            List<Class> classList = classDao.getClassList(c_classname, c_classid, c_counsellor,
                    (pi.getPageIndex() - 1) * pi.getPageSize(), pi.getPageSize());  // 调用 ClassDao 获取分页数据
            pi.setList(classList);  // 将查询结果设置到分页对象中
        }
        return pi;  // 返回分页对象
    }

    /**
     * 获取所有班级信息
     * @return 返回所有班级的列表
     */
    @Override
    public List<Class> getAll() {
        List<Class> classList = classDao.getAll();  // 调用 ClassDao 获取所有班级信息
        return classList;  // 返回班级列表
    }

    /**
     * 通过班级 ID 删除班级信息
     * @param c_id 班级 ID
     * @return 返回删除操作受影响的行数，1 表示成功，0 表示失败
     */
    @Override
    public int deleteClass(Integer c_id) {
        return classDao.deleteClass(c_id);  // 调用 ClassDao 删除班级信息
    }

    /**
     * 添加班级信息
     * @param uclass 要添加的班级对象
     * @return 返回添加操作受影响的行数，1 表示成功，0 表示失败
     */
    @Override
    public int addClass(Class uclass) {
        return classDao.addClass(uclass);  // 调用 ClassDao 添加班级信息
    }

    /**
     * 根据班级 ID 查询班级信息
     * @param c_id 班级 ID
     * @return 返回符合条件的班级对象
     */
    @Override
    public Class findClassById(Integer c_id) {
        Class c = classDao.findClassById(c_id);  // 调用 ClassDao 根据班级 ID 查询班级信息
        return c;  // 返回查询结果
    }

    /**
     * 修改班级信息
     * @param uclass 要修改的班级对象
     * @return 返回修改操作受影响的行数，1 表示成功，0 表示失败
     */
    @Override
    public int updateClass(Class uclass) {
        return classDao.updateClass(uclass);  // 调用 ClassDao 修改班级信息
    }

    /**
     * 查询班级的学生信息
     * @param uclass 班级对象，包含要查询的班级信息
     * @return 返回班级内所有学生的信息
     */
    @Override
    public List<Class> findClassStudent(Class uclass) {
        List<Class> c = classDao.findClassStudent(uclass);  // 调用 ClassDao 查询班级的学生信息
        return c;  // 返回查询结果
    }
}
