package service;

import dao.DAOFactory;
import dao.StudentDAO;
import model.Student;
import java.util.List;

/**
 * 学生信息服务类
 */
public class StudentService {
    private final StudentDAO studentDAO = DAOFactory.getStudentDAO();

    /**
     * 更新学生信息
     * @param student 学生信息
     * @return 是否更新成功
     */
    public boolean updateStudent(Student student) {
        // 检查是否存在
        Student existingStudent = studentDAO.findById(student.getId());
        if (existingStudent == null) {
            return false;
        }
        // 检查学号是否被其他学生使用
        Student studentWithSameId = studentDAO.findByStudentId(student.getStudentId());
        if (studentWithSameId != null && studentWithSameId.getId() != student.getId()) {
            return false;
        }
        return studentDAO.update(student) > 0;
    }

    /**
     * 根据ID查询学生
     * @param id 学生ID
     * @return 学生信息
     */
    public Student getStudentById(int id) {
        return studentDAO.findById(id);
    }

    /**
     * 根据学号查询学生
     * @param studentId 学号
     * @return 学生信息
     */
    public Student getStudentByStudentId(String studentId) {
        return studentDAO.findByStudentId(studentId);
    }

    /**
     * 查询所有学生
     * @return 学生列表
     */
    public List<Student> getAllStudents() {
        return studentDAO.findAll();
    }

    /**
     * 根据姓名模糊查询学生
     * @param name 学生姓名
     * @return 学生列表
     */
    public List<Student> searchStudentsByName(String name) {
        return studentDAO.findByNameLike(name);
    }

    /**
     * 学生登录
     * @param studentId 学号
     * @param password 密码
     * @return 登录成功返回学生信息，失败返回null
     */
    public Student login(String studentId, String password) {
        Student student = studentDAO.findByStudentId(studentId);
        System.out.println("Login attempt - StudentID: " + studentId);
        System.out.println("Student found: " + (student != null));
        if (student != null) {
            System.out.println("Stored password: " + student.getPassword());
            System.out.println("Input password: " + password);
            System.out.println("Password match: " + password.equals(student.getPassword()));
        }
        if (student != null && password.equals(student.getPassword())) {
            return student;
        }
        return null;
    }
}
