package com.ssj.service.conch.student.service;

import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.parents.dto.CorrectDetailDto2;
import com.ssj.service.conch.student.dto.*;
import com.ssj.service.conch.student.request.CorrectWrongTopicRequest;
import com.ssj.service.conch.student.request.ProblemIdRequest;
import com.ssj.service.conch.student.request.ProblemReq;
import com.ssj.service.conch.student.request.UploadPictureReq;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

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

public interface StudentAppService {
    /**
     * 查询分享/答题榜列表
     * @param params
     * @param sp
     * @return
     */
    ResponseEntity schoolmateCircleList(Map<String, Object> params, Pageable sp);

    /**
     * 查询分享/答题榜详情
     * @param id
     * @param userId
     * @param sp
     * @return
     */
    ResponseEntity schoolmateCircleDetail(String id, String userId, Pageable sp);

    /**
     * 点赞
     * @param headId 同学圈分享id或者同学圈评论id
     * @param type 1:分享点赞(head_id为schoolmate_circle_id),2:评论点赞(head_id为schoolmate_comment_id)
     * @param userId 点赞人user_id
     * @return
     */
    ResponseEntity setLike(String headId, int type, String userId);

    /**
     * 查询一级评论
     * @param params
     * @param sp
     * @return
     */
    ResponseEntity firstLevelCommentsList(Map<String, Object> params, Pageable sp);

    /**
     * 查询二级评论
     * @param params
     * @param sp
     * @return
     */
    ResponseEntity secondLevelCommentsList(Map<String, Object> params, Pageable sp);

    /**
     * 查询所有评论（不分一级二级）
     * @param params
     * @param sp
     * @return
     */
    ResponseEntity findCommentsList(Map<String, Object> params, Pageable sp);
    /**
     * 查询快捷回复内容
     * @return
     */
    ResponseEntity queryShortcuts();

    /**
     * 回复同学圈评论
     * @param schoolmateCircleId 同学圈分享id
     * @param content 评论内容
     * @param userId 评论人
     * @param material 同学圈素材
     * @return
     */
    ResponseEntity replySchoolmateCircle(String schoolmateCircleId, String content, String userId, List<String> material);

    /**
     * 回复答题榜下评论人评论下其他评论人评论
     * @param userId 评论人Id
     * @param content 评论内容
     * @param commentId 被评论记录id
     * @param beCommentedUserId 被评论人id
     * @param type 1：回复答题榜评论，2：回复分享评论
     * @return
     */
    ResponseEntity replyComments(String userId, String content, String commentId, String beCommentedUserId, int type);

    /**
     * 发同学圈
     * @param type 1:分享圈,2:答题榜
     * @param userId 发圈人Id
     * @param content 同学圈文本
     * @param material 同学圈素材
     * @return
     */
    ResponseEntity sendSchoolmateCircle(int type, String userId, String content, List<String> material);

    /**
     * 查询同学圈消息总数
     * @param userId
     * @return
     */
    ResponseEntity queryCircleMessageCount(String userId);

    /**
     * 查询同学圈消息列表
     * @param userId
     * @return
     */
    ResponseEntity circleMessageList(String userId);

    /**
     * 采纳解答
     * @param commentId
     * @param userId
     * @return
     */
    ResponseEntity acceptSolution(String commentId, String userId);

    /**
     * 查询作业列表
     * @param vipId
     * @param dateTime
     * @param pageable
     * @return
     */
    Map<String, Object> appHomeworkTask(String vipId, String dateTime, Pageable pageable);

    /**
     * 查询当前页的作业任务数据
     * @param dateList 时间列表
     * @param vipId 学生id
     * @return
     */
    List<AppHomeworkTaskDto> getPageAppHomeworkTask(List<Map<String, Object>> dateList, String vipId);

    /**
     * 查询当前日期的作业任务数据
     * @param vipId
     * @param date
     * @return
     */
    AppHomeworkTaskDto getSimpleAppHomeworkTask(String vipId, Date date);

    /**
     * 单科作业批改详情
     * @param workId homework表里的字段
     * @return
     */
    AppCorrectDetailDto homeworkTaskDetail(String workId);

    /**
     * 查询错题本
     * @param vipId 学生
     * @param subject 学科
     * @param dateTime 最大时间
     * @param type 订正否，1未订正，2已订正
     * @param pageable 分页实体
     * @return
     */
    Map<String, Object> wrongTopicBook(String vipId, String subject, String dateTime, int type, Pageable pageable);

    /**
     * 查询某一天某一科的错题详情
     * @param workId 作业id
     * @return
     */
    WrongTopicDetailDto wrongTopicDetail(String workId);

    /**
     * 订正错题
     * @param request
     * @return
     */
    boolean reviseWrongTopic(CorrectWrongTopicRequest request);

    /**
     * @param vipId
     * @param courseName
     * @param currentTime
     * @return

     * 方法说明:开始作业

     * 创立日期:2018年8月20日 下午1:37:30
     * 创建人:yangcan

     */
    ResponseEntity startHomework(String vipId, String courseName, Long currentTime);

    /**
     * @param homeworkId
     * @param endTime
     * @param usedTime

     * 方法说明:完成作业

     * 创立日期:2018年8月20日 下午2:13:29
     * 创建人:yangcan

     */
    void endHomework(String homeworkId, Long endTime, Long usedTime);

    /**
     * @param homeworkId
     * @param usedTime

     * 方法说明:删除未拍照作业计时

     * 创立日期:2018年8月20日 下午2:13:35
     * 创建人:yangcan

     */
    void deleteHomework(String homeworkId, Long usedTime);

    /**
     * @param params
     * @param pageable
     * @return

     * 方法说明:我的小时光

     * 创立日期:2018年8月20日 下午3:17:59
     * 创建人:yangcan

     */
    Page<SmartTimeGroupDTO> smartTime(Map<String, Object> params, Pageable pageable);

    ResponseEntity uploadPicture(UploadPictureReq req);

    Map<String, Object> childPicture(String type, Map<String, Object> params, Pageable pageable);

    /**
     * 查询未解答难题列表
     * @param req
     * @param pageable
     * @return
     */
    ResponseEntity problemList(ProblemReq req, Pageable pageable);

    /**
     * 查询已解答难题详情
     * @param req
     * @return
     */
    ResponseEntity answeredProblemDetail(ProblemIdRequest req);

    /**
     * @param accessToken
     * @param vipId
     * @param platform
     * @param xingeToken
     * @return

     * 方法说明:切换账号

     * 创立日期:2018年8月27日 下午4:16:12
     * 创建人:yangcan

     */
    ResponseEntity changeAccount(String accessToken, String vipId, String platform, String xingeToken);

    /**
     * @param userId
     * @return

     * 方法说明:获取我的信息

     * 创立日期:2018年10月10日 下午3:59:27
     * 创建人:yangcan

     */
    ResponseEntity getMyInfo(String userId);

    /**
     * 查询同学圈排行榜
     * @param type
     * @param time
     * @return
     */
    List<CircleCommentRankDto> rankingList(int type, int time);


    void test();

    CorrectDetailDto2 homeworkTaskDetail2(String homeworkId);

    ResponseEntity cancelStudentRole(String vipId);
}
