package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.*;
import com.ym.mec.biz.dal.entity.CourseHomework;
import com.ym.mec.biz.dal.entity.Teacher;
import com.ym.mec.biz.dal.page.*;
import com.ym.mec.common.entity.ImGroupModel;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.page.QueryInfo;
import com.ym.mec.common.service.BaseService;

import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface TeacherService extends BaseService<Integer, Teacher> {

    /**
     * 根据证件号查询老师信息
     * @param certificateNum 证件号
     * @return Teacher 老师信息
     */
    Teacher findByCertificateNum(String certificateNum);

    /**
     * 新增教师
     * @param teacher
     */
    int add(Teacher teacher) throws Exception;

    /**
     * 修改教师信息
     * @param teacher
     */
    void updateTea(Teacher teacher);

    /**
     * 分页查询教师列表
     * @param queryInfo
     * @return
     */
    PageInfo<Teacher> queryPageDetail(TeacherQueryInfo queryInfo);

    /**
     * 获取教师详情
     * @param id
     * @return
     */
    Teacher getDetail(Integer id);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/24
     * 删除教师
     */
    void deleteTeacher(Long userId);

    /**
     * 获取教师所在群组列表
     * @param userId
     * @param search
     * @return
     */
    List<ImGroupModel> queryTeacherGroups(Integer userId,String search);

    /**
     * 获取教师通讯录
     * @param id
     * @param search
     * @return
     */
    List<BasicUserDto> queryGroupStudents(Integer id, String search);

    /**
     * 获取教师通讯录
     * @param id
     * @param search
     * @return
     */
    List<ImUserFriendDto> queryGroupStudents1(Integer id, String search);

    /**
     * 获取教师通讯录学员列表
     * @param id
     * @param search
     * @return
     */
    List<BasicUserDto> queryGroupStudentList(Integer id, String search);

    /**
     * 查询分部所有老师
     * @param organId
     * @return
     */
    List<TeacherBasicDto> findTeachers(String organId);

    /**
     * @describe 根据科目获取部门下的教师
     * @author Joburgess
     * @date 2019/11/4
     * @param subjectId: 科目编号
     * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
     */
    List<Teacher> findOrganTeacherBySubject(Integer subjectId);

    /**
     * 获取教师上课结算列表
     * @param queryInfo
     * @return
     */
    PageInfo<TeacherCloseDto> queryCloses(TeacherCloseQueryInfo queryInfo);

    /**
     * @describe 获取乐团下的老师
     * @author Joburgess
     * @date 2019/10/19
     * @param musicGroupId:
     * @return java.util.List<com.ym.mec.biz.dal.dto.BasicUserDto>
     */
    List<BasicUserDto> queryMusicGroupTeacher(String musicGroupId);


    /**
     * 获取老师未结算课酬总额
     * @param teacherId
     * @return
     */
    BigDecimal findTeacherNoPay(Integer teacherId);

    /**
     * 获取乐团详情老师列表
     * @param queryInfo
     * @return
     */
    PageInfo<MusicGroupTeachersDto> queryMusicGroupTeachers(MusicGroupTeachersQueryInfo queryInfo);

    /**
     * 获取教师上课记录列表（乐团管理--乐团详情）
     * @param queryInfo
     * @return
     */
    PageInfo<MusicGroupTeacherAttendanceDto> queryTeacherAttendance(MusicGroupTeacherAttendanceQueryInfo queryInfo);

    /**
     * 获取乐团学员的报名列表
     * @param queryInfo
     * @return
     */
    PageInfo<MusicGroupStudentApplyDto> queryMusicGroupStudentApply(queryMusicGroupStudentQueryInfo queryInfo);

    /**
     * 获取分部下教师
     * @param organId
     * @return
     */
    List<Teacher> findTeacherByOrganId(String organId,String subjectIds,String jobNature);

    /**
     * 分页获取教师列表
     * @param queryInfo
     * @return
     */
    PageInfo<Teacher> queryPageName(TeacherNameQueryInfo queryInfo);

    /**
     * 获取教师布置的作业
     * @param courseScheduleId
     * @return
     */
    CourseHomework getCourseScheduleHomework(Integer courseScheduleId);

    /**
     * 获取教务端通讯录
     * @param id
     * @param search
     * @return
     */
    List<BasicUserDto> queryEducationIpa(Integer id, String search);
    
    /**
     * 实名认证
     * @param userId 用户编号
     * @param realName 姓名
     * @param idcardNo 身份证号码
     * @param idcardFrontImg 身份证正面
     * @param idcardBackImg 身份证反面
     * @param idcardHandImg 手持身份照
     * @return
     */
	boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg);

    /**
     * 获取和当前指导老师关联的学员
     * @return
     */
    PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo);
    
    /**
     * 查询老师默认课酬
     * @param organIdList
     * @return
     */
    List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList);

    /**
     * 获取所有教师编号列表
     * @return
     */
    List<Integer> queryAllIds();
}
