package com.lesingle.edu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lesingle.edu.dto.request.StudentCreateRequest;
import com.lesingle.edu.dto.request.StudentUpdateRequest;
import com.lesingle.edu.entity.Student;

import java.util.List;

/**
 * 学生服务接口
 */
public interface StudentService extends com.baomidou.mybatisplus.extension.service.IService<Student> {

    /**
     * 创建学生
     */
    Student createStudent(Long tenantId, StudentCreateRequest request);

    /**
     * 更新学生
     */
    Student updateStudent(Long id, StudentUpdateRequest request);

    /**
     * 更新学生（带租户验证）
     */
    Student updateStudentWithTenantCheck(Long id, Long tenantId, StudentUpdateRequest request);

    /**
     * 根据 ID 查询学生
     */
    Student getStudentById(Long id);

    /**
     * 根据 ID 查询学生（带租户验证）
     */
    Student getStudentByIdWithTenantCheck(Long id, Long tenantId);

    /**
     * 分页查询学生
     * @param classId 可选，按班级筛选
     */
    Page<Student> getStudentPage(Long tenantId, Integer pageNum, Integer pageSize, String keyword, String grade, String status, Long classId);

    /**
     * 根据班级 ID 查询学生
     */
    Page<Student> getStudentsByClassId(Long classId, Integer pageNum, Integer pageSize);

    /**
     * 根据班级 ID 查询学生（支持关键词搜索）
     */
    Page<Student> getStudentsByClassId(Long classId, Integer pageNum, Integer pageSize, String keyword);

    /**
     * 根据班级 ID 查询学生列表（不分页，用于课后记录等场景）
     */
    List<Student> getStudentListByClassId(Long classId);

    /**
     * 根据班级 ID 列表查询学生
     */
    List<Student> getStudentsByClassIds(List<Long> classIds, String keyword, Page<Student> page);

    /**
     * 删除学生
     */
    void deleteStudent(Long id);

    /**
     * 删除学生（带租户验证）
     */
    void deleteStudentWithTenantCheck(Long id, Long tenantId);

    /**
     * 根据家长 ID 查询学生列表
     */
    List<Student> getStudentsByParentId(Long parentId);

}
