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

import com.itheima.dao.AdminDao;  // 导入 AdminDao，进行数据库操作
import com.itheima.po.Admin;  // 导入 Admin 实体类，表示管理员
import com.itheima.po.PageInfo;  // 导入 PageInfo 类，用于分页查询的结果封装
import com.itheima.service.AdminService;  // 导入 AdminService 接口，定义管理员服务接口
import com.itheima.util.MD5Util;  // 导入 MD5Util 工具类，用于密码加密（虽然在这个类里没有直接使用）
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("adminService")  // 将该类标记为一个 Spring 服务类，名字为 "adminService"
@Transactional  // 表示该类的所有方法都应该支持事务管理
public class AdminServiceImpl implements AdminService {  // 实现 AdminService 接口

    // 注入 AdminDao 用于访问数据库
    @Autowired
    private AdminDao adminDao;  // 自动注入 AdminDao 对象，Spring 会自动处理该依赖关系

    /**
     * 管理员登录查询
     * @param admin 传入的管理员信息，用于查询
     * @return 返回符合条件的管理员对象，如果找不到，返回 null
     */
    @Override
    public Admin findAdmin(Admin admin) {  // 实现 AdminService 接口的 findAdmin 方法
        Admin a = adminDao.findAdmin(admin);  // 调用 AdminDao 的 findAdmin 方法查询管理员
        return a;  // 返回查询结果
    }

    /**
     * 获取所有管理员信息
     * @return 返回所有管理员的信息列表
     */
    @Override
    public List<Admin> getAll() {  // 实现 AdminService 接口的 getAll 方法
        List<Admin> adminList = adminDao.getAll();  // 调用 AdminDao 的 getAll 方法查询所有管理员
        return adminList;  // 返回查询到的管理员列表
    }

    /**
     * 分页查询管理员信息
     * @param a_username 管理员用户名，用于筛选
     * @param a_describe 管理员描述，用于筛选
     * @param a_id 管理员ID，用于筛选
     * @param pageIndex 当前页码
     * @param pageSize 每页显示记录数
     * @return 返回一个 PageInfo 对象，包含分页信息和管理员列表
     */
    @Override
    public PageInfo<Admin> findPageInfo(String a_username, String a_describe, Integer a_id, Integer pageIndex, Integer pageSize) {  
        PageInfo<Admin> pi = new PageInfo<Admin>();  // 创建 PageInfo 对象，用于封装分页信息
        pi.setPageIndex(pageIndex);  // 设置当前页码
        pi.setPageSize(pageSize);  // 设置每页显示的记录数
        
        // 获取符合条件的管理员总数
        Integer totalCount = adminDao.totalCount(a_username, a_describe, a_id);  // 调用 adminDao 获取符合条件的管理员总数
        if (totalCount > 0) {  // 如果总记录数大于 0，表示有查询结果
            pi.setTotalCount(totalCount);  // 设置分页对象的总记录数
            // 计算查询数据的起始行数 (当前页 - 1) * 每页记录数
            List<Admin> adminList = adminDao.getAdminList(a_username, a_describe, a_id,
                    (pi.getPageIndex() - 1) * pi.getPageSize(), pi.getPageSize());  // 调用 adminDao 查询分页数据
            pi.setList(adminList);  // 将查询结果设置到分页对象中
        }
        return pi;  // 返回分页对象
    }

    /**
     * 添加管理员信息
     * @param admin 要添加的管理员对象
     * @return 返回受影响的行数，1 表示成功，0 表示失败
     */
    @Override
    public int addAdmin(Admin admin) {  // 实现 AdminService 接口的 addAdmin 方法
        return adminDao.addAdmin(admin);  // 调用 adminDao 的 addAdmin 方法添加管理员信息
    }

    /**
     * 通过 ID 删除管理员信息
     * @param a_id 管理员的 ID
     * @return 返回受影响的行数，1 表示删除成功，0 表示删除失败
     */
    @Override
    public int deleteAdmin(Integer a_id) {  // 实现 AdminService 接口的 deleteAdmin 方法
        return adminDao.deleteAdmin(a_id);  // 调用 adminDao 的 deleteAdmin 方法删除管理员信息
    }

    /**
     * 修改管理员信息
     * @param admin 要修改的管理员对象
     * @return 返回受影响的行数，1 表示修改成功，0 表示修改失败
     */
    @Override
    public int updateAdmin(Admin admin) {  // 实现 AdminService 接口的 updateAdmin 方法
        return adminDao.updateAdmin(admin);  // 调用 adminDao 的 updateAdmin 方法修改管理员信息
    }

    /**
     * 通过管理员 ID 查找管理员信息
     * @param a_id 管理员 ID
     * @return 返回符合条件的管理员对象
     */
    @Override
    public Admin findAdminById(Integer a_id) {  // 实现 AdminService 接口的 findAdminById 方法
        Admin a = adminDao.findAdminById(a_id);  // 调用 adminDao 的 findAdminById 方法查询管理员信息
        return a;  // 返回查询结果
    }
}
