package com.ssj.dao.sys.schoolmatecircle.dao;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

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

/**
 * @author Mount Liu
 * @date 2018/8/15
 */
public interface SchoolmateCircleQueryDao {

    /**
     * 根据id查询同学圈信息
     * @param id
     * @return
     */
    Map<String, Object> findCircleById(String id, String userId);

    /**
     * 分页查询同学圈列表
     * @param searchParams
     * @param pageable
     * @return
     */
    Page<Map<String, Object>> findCircleByPage(Map<String, Object> searchParams, Pageable pageable);



    /**
     * 分页查询一级评论列表
     * @param searchParams
     * @param pageable
     * @return
     */
    Page<Map<String, Object>> findFirstCommentByPage(Map<String, Object> searchParams, Pageable pageable);

    /**
     * 分页查询评论列表
     * @param searchParams
     * @param pageable
     * @return
     */
    Page<Map<String, Object>> findCommentByPage(Map<String, Object> searchParams, Pageable pageable);
    /**
     * 根据用户查询所有消息
     * @param userId
     * @return
     */
    List<Map<String, Object>> findByUserId(String userId);

    /**
     * 查询排行榜
     * @param type 1活跃度，2答题数，3点赞数
     * @param time 1近一周，2近-月，3近一年
     * @param limit top 几
     * @return
     */
    List<Map<String, Object>> findRankingList(int type, int time, int limit);

    /**
     * 查询点赞数排行
     * @param beginTime
     * @param endTime
     * @return
     */
    List<Map<String, Object>> queryLikeCountList(String beginTime, String endTime, int limit);

    /**
     * 查询答题榜排行
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    List<Map<String, Object>> queryAnswerCountList(String beginTime, String endTime, int limit);

    /**
     * 活跃度查询
     * @param time 时间类型
     * @param limit top 几
     * @return
     */
    List<Map<String, Object>> queryActivityCountList(int time, int limit);

    /**
     * 点赞算分
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param base 基数
     * @param time 时间类型
     */
    void insertLikeScore2Temp(String beginTime, String endTime, int base, int time);

    /**
     * 被点赞算分
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param base 基数
     * @param time 时间类型
     */
    void insertBeLikeScore2Temp(String beginTime, String endTime, int base, int time);

    /**
     * 发消息算分
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param base 基数
     * @param time 时间类型
     */
    void insertPushCircleScore2Temp(String beginTime, String endTime, int base, int time);

    /**
     * 评论算分
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param base 基数
     * @param time 时间类型
     */
    void insertCommentScore2Temp(String beginTime, String endTime, int base, int time);

    /**
     * 被采纳算分
     * @param beginTime 开始时间
     * @param endTime 结束时间
     * @param base 基数
     * @param time 时间类型
     */
    void insertAcceptScore2Temp(String beginTime, String endTime, int base, int time);

    /**
     * 删除活跃度算分的临时表
     */
    void deleteAllInTempTable();
}
