package com.ssj.service.conch.curator.service.v1;

import com.ssj.bean.conch.curator.dto.CuratorTeacherListDto;
import com.ssj.bean.conch.curator.dto.TeacherDetailClassListDto;
import com.ssj.framework.core.security.exception.CommonException;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.curator.request.*;
import com.ssj.service.conch.parents.dto.LearningSituationAbstractDto;
import com.ssj.service.conch.parents.dto.LearningSituationDetailNewDto;
import com.ssj.service.conch.parents.request.version4.HomeworkReportReq;
import com.ssj.service.conch.parents.v1.request.BindLibAuditReq;
import com.ssj.service.conch.parents.v1.request.ChangeClassReq;
import com.ssj.service.conch.parents.v1.request.ClassTeacherReq;
import com.ssj.service.conch.parents.v1.request.RenameClassReq;
import com.ssj.service.kmt.dto.StudentVipDto;
import com.ssj.service.kmt.request.SearchKeyReq;
import com.ssj.service.kmt.request.SearchLibReq;
import com.ssj.service.kmt.request.TeacherCorrectReq;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

public interface CuratorV1Service {

    /**
     * 查询反馈报告
     * @param req
     * @return
     */
    Map<String, Object> findHomeworkReport(HomeworkReportReq req);

    /**
     * 学情整体情况
     * @param vipId
     * @return
     */
    LearningSituationAbstractDto learningSituationAbstract(String vipId);

    /**
     * 学情学科详情
     * @param vipId
     * @param subject
     * @return
     */
    LearningSituationDetailNewDto learningSituationDetailNew(String vipId, String subject);

    /**
     * 查询用户状态
     */
    ResponseEntity checkStatus(String curatorUserId);

    /**
     * 注册馆长
     * @param curatorUserId 用户id
     */
    ResponseEntity register(String curatorUserId, RegisterReq req);

    /**
     * 查询资料
     * @param curatorUserId 馆长userId
     */
    ResponseEntity findMyInfo(String curatorUserId, InfoReq req);

    /**
     * 查询图书馆列表
     */
    ResponseEntity findLibList(SearchLibReq req) throws Exception;

    /**
     * 查询所有学生
     */
    ResponseEntity findStudentList(SearchKeyReq req, String userId ) throws Exception;

    /**
     * 学生详情
     * @param vipId
     * @param userId
     * @return
     */
    ResponseEntity studentDetail(String vipId, String userId);

    /**
     * 学生作业任务列表
     */
    ResponseEntity findhomeworkList(StudentVipDto studentVipDto, Pageable pageable);

    /**
     * 查询作业吧售卖服务信息
     * @return
     */
    ResponseEntity findZybSaleServiceList();

    /**
     * 审核馆长
     * @param auditResultType 审核类型，1通过，2不通过（reason不能为空）
     * @param libManagerAuditId 审核对象
     * @param reason 不通过的原因
     */
    ResponseEntity audit(int auditResultType, String libManagerAuditId, String reason);
    
    /**
     * 查询所有老师
     * @param userId
     * @param req
     * @return
     * @throws Exception
     */
    ResponseEntity findTeacherList(String userId, TeacherListReq req) throws Exception;
    
    /**
     * 更改老师是否批改开关
     */
    ResponseEntity updateTeacherCorrect(TeacherCorrectReq req, String userId) throws Exception;

    /**
     * 班级列表
     */
    ResponseEntity findAllClassList(String userId) throws Exception;


    /**
     * 新建班级
     */
    ResponseEntity createClass(String userId,String className) throws Exception;


    /**
     * 重命名班级
     */
    ResponseEntity renameClass(String userId, RenameClassReq req) throws Exception;

    /**
     * 删除班级
     */
    ResponseEntity deleteClass(String userId,String classId) throws Exception;

    /**
     * 班级详情老师列表
     *//*
    ResponseEntity getClassTeacherList(String userId,String classId) throws Exception;*/

    /**
     * 班级详情老师列表
     */
    ResponseEntity getClassTeacherList(ClassTeacherReq req);


    /**
     * 新增老师
     * @param req
     * @param userId
     * @return
     */
    ResponseEntity createTeacher(CreateTeacherRequest req, String userId);

    /**
     * 查询老师详情班级列表
     * @param teacherId
     * @return
     */
    CuratorTeacherListDto teacherDetail (String teacherId);

    CuratorTeacherListDto teacherDetailV1 (String teacherId,String curatorUserId);

    /**
     * 校长端扫码绑定小塾
     * @param req
     * @return
     */
    ResponseEntity bindConch(CuratorSwipeQrCodeReq req);


    /**
     * 移除老师所在班级
     * @param request
     * @return
     */
    ResponseEntity detachTeacher (DetachTeacherRequest request);

    /**
     *
     * @param request
     * @return
     */
    ResponseEntity updateTeacherInfo (CreateTeacherRequest request, String userId);

    /**
     * 查询老师不在的班级列表
     * @param teacherId
     * @param curatorId
     * @return
     */
    List<TeacherDetailClassListDto> teacherSelectClassList (String teacherId, String curatorId);

    /**
     * 老师确定选择班级
     * @return
     */
    ResponseEntity confirmTeacherClass (ConfirmTeacherClassRequest request, String userId);

    /**
     * 班级选择老师
     * @param req
     * @param userId
     * @return
     */
    ResponseEntity confirmClassTeacher(ConfirmClassTeacherReq req, String userId);

    /**
     * 删除老师
     * @param teacherId
     * @return
     */
    ResponseEntity deleteTeacher (String teacherId, String userId);



    /**
     * 更换学生班级
     * @param
     * @return
     */
    ResponseEntity changeClass(String userId, ChangeClassReq req);

    /**
     * 查询可购买的服务
     * @param libId
     * @return
     */
    ResponseEntity findSaleServiceList(String libId, String vipId);

    /**
     * 计算作业吧有效时间
     * @param num 数量
     * @param priceType 卡类型（C004:作业吧月卡;C005:作业吧半年卡;C006:作业吧年卡;C015:作业吧季卡;C023:平台服务（校区购买）;C024:校区服务）
     * @param beginDate
     * @param vipId
     * @return
     */
    ResponseEntity calculateValidInterval(int num, String priceType, String beginDate, String vipId);
    /**
     * 添加批改服务
     * @param req
     * @return
     */
    ResponseEntity addCorrectService(AddCorrectServiceReq req) throws Exception;

    /**
     * 续费学生列表
     *
     * @param req
     * @return
     * @throws Exception
     */
    ResponseEntity renewStudentList(RenewStudentListReq req);

    /**
     * 批量添加批改服务
     *
     * @param req
     * @return
     * @throws Exception
     */
    ResponseEntity addBatchCorrectService(AddBatchCorrectServiceReq req) throws Exception;

    /**
     * 从校区移除小孩
     * @param vipId
     * @param libId
     * @return
     */
    ResponseEntity delLibChild(String vipId, String libId);

    /**
     * 重启服务
     * @param vipId
     * @param libId
     * @return
     */
    ResponseEntity addChildBack(String vipId, String libId);


    /**
     * 查询校长个人资料2
     * @param schoolmasterUserId 校长用户id
     * @return 响应实体
     */
    ResponseEntity findMyInfo2(String schoolmasterUserId);

    /**
     * 新建学生
     * @param req 参数实体
     * @param schoolmasterUserId 校长userId
     * @return 响应实体
     */
    ResponseEntity addChild(SchoolmasterAddChildReq req, String schoolmasterUserId) throws CommonException;

    ResponseEntity libAuditList(String userId);

    /**
     * 学生审核
     * @param userId
     * @param req
     * @return
     */
    ResponseEntity bindLibAudit(String userId, BindLibAuditReq req);

    /**
     * 老师审核
     * @param userId
     * @param req
     * @return
     */
    ResponseEntity auditTeacher(String userId, AuditTeacherReq req);

    ResponseEntity studentChangeClass(String userId,StudentChangeClassReq req);

    /**
     * 查询学生不在的班级列表
     * @param vipId
     * @param curatorId
     * @return
     */
   ResponseEntity studentSelectClassList (String vipId, String curatorId);

    /**
     * 绑定手机号
     *
     * @param userId 用户id
     * @param req 入参
     */
    ResponseEntity bindPhone(String userId, BindPhoneReq req);

    /**
     * 注册
     *  @param curatorUserId 用户id
     * @param req 入参
     */
    ResponseEntity registerV2(String curatorUserId, RegisterV2Req req);


    /**
     * 作业上传记录
     */
    ResponseEntity homeworkUploadRecord(String curatorUserId,UploadHomeworkRecordRequest req) throws Exception;

    /**
     * 积分排行榜
     */
    ResponseEntity coreRanking(String curatorUserId, ClassIdRequest request);

    /**
     * 修改学生信息
     *
     * @param userId
     * @param req
     * @return
     */
    ResponseEntity modifyStudentInfo(String userId, ModifyStudentInfoReq req);

    /**
     * 审批成功推送公众号
     * @param openid
     * @param first
     * @param keyword1
     * @param keyword2
     */
    void pushWxForPass(String openid, String first, String keyword1, String keyword2);
}


