package com.lesingle.edu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lesingle.edu.dto.request.TeacherCreateRequest;
import com.lesingle.edu.dto.request.TeacherUpdateRequest;
import com.lesingle.edu.dto.response.TeacherResponse;
import com.lesingle.edu.entity.Teacher;

import java.util.List;

/**
 * 教师服务接口
 */
public interface TeacherService extends IService<Teacher> {

    /**
     * 创建教师
     */
    Teacher createTeacher(Long tenantId, TeacherCreateRequest request);

    /**
     * 更新教师
     */
    Teacher updateTeacher(Long id, TeacherUpdateRequest request);

    /**
     * 更新教师（带租户验证）
     */
    Teacher updateTeacherWithTenantCheck(Long id, Long tenantId, TeacherUpdateRequest request);

    /**
     * 根据 ID 查询教师
     */
    Teacher getTeacherById(Long id);

    /**
     * 根据 ID 查询教师，不存在时返回 null（不抛异常）
     */
    Teacher findTeacherById(Long id);

    /**
     * 根据 ID 查询教师（带租户验证）
     */
    Teacher getTeacherByIdWithTenantCheck(Long id, Long tenantId);

    /**
     * 分页查询教师
     */
    Page<Teacher> getTeacherPage(Long tenantId, Integer pageNum, Integer pageSize, String keyword, String status);

    /**
     * 删除教师
     */
    void deleteTeacher(Long id);

    /**
     * 删除教师（带租户验证）
     */
    void deleteTeacherWithTenantCheck(Long id, Long tenantId);

    /**
     * 重置密码
     */
    void resetPassword(Long id, String newPassword);

    /**
     * 重置密码（带租户验证）
     */
    void resetPasswordWithTenantCheck(Long id, Long tenantId, String newPassword);

    /**
     * 重置密码并返回临时密码（带租户验证）
     */
    String resetPasswordAndReturnTemp(Long id, Long tenantId);

    /**
     * 根据 ID 列表查询教师
     */
    List<Teacher> getTeachersByIds(List<Long> teacherIds);

    /**
     * 转换为教师响应（含班级、授课数等扩展信息）
     */
    TeacherResponse toTeacherResponse(Teacher teacher);

    /**
     * 批量转换为教师响应
     */
    List<TeacherResponse> toTeacherResponseList(List<Teacher> teachers);

}
