package com.nbclass.activity.mapper;

import com.nbclass.activity.model.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CommentMapper {

    /**
     * 案例详情和评论列表
     * @param contentId
     * @return
     */
    Content getComment(@Param("contentId") Long contentId,
                       @Param("userId") Long userId);


    /**
     * 评论回复列表
     * @param commentId
     * @param userId
     * @return
     */
    Comment getCommentReplyList(@Param("commentId") Long commentId,
                                @Param("userId") Long userId);

    /**
     * 添加用户发布信息
     * @param comment
     * @return
     */
    void saveComment(Comment comment);

    /**
     * 根据评论id获取被点赞人Id
     * @param commentId
     * @return
     */
    Comment getCommentUserId(Long commentId);

    /**
     * 添加评论点赞
     * @param praise
     * @return
     */
    void savePraiseNo(Praise praise);

    /**
     * 添加案例点赞
     * @param contentId
     * @return
     */
    void updateContentPraiseNo(Long contentId);

    /**
     * 评论总数加1
     * @param commentId
     */
    void updatePraiseno(Long commentId);

    /**
     * 用户回复
     * @param comment
     */
    void saveUserReply(Comment comment);

    /**
     * 用户举报
     * @param report
     * @return
     */
    void saveReport(Report report);

    /**
     * 举报列表获取
     * @return
     */
    List<Report> getReport(String userId);

    /**
     * 添加标签、索引反馈日志
     * @return
     */
    void saveLabelLogger(LabelLogger labelLogger);

    /**
     * 新建文件夹
     * @param favoritesFolder
     * @return
     */
    void saveFavorites(FavoritesFolder favoritesFolder);

    /**
     * 案例详情的文件夹列表
     * @return
     */
    List<FavoritesFolder> getUserFolder(@Param("userId") Long userId,
                                        @Param("commentId") Long commentId);

    /**
     * 收藏案例到文件夹中
     * @param contentId
     * @return
     */
    void saveFolder(@Param("folderId") Long folderId,
                    @Param("contentId") Long contentId);

    /**
     * 添加收藏总数
     * @param folderId
     */
    void saveFolderTotal(Long folderId);

    /**
     * 判断该文件夹是否已被收藏
     * @param folderId
     * @param contentId
     * @return
     */
    int getFolderExistence(@Param("folderId") Long folderId,
                           @Param("contentId") Long contentId);

    /**
     * 判断文件夹是否重名
     * @param name
     * @return
     */
    int getFavoritesName(String name);

    /**
     * 取消文件夹中的案例收藏
     * @param folderId
     * @param contentId
     * @return
     */
    void deleteFolderResources(@Param("folderId") Long folderId,
                               @Param("contentId") Long contentId);

    /**
     * 我的收藏
     * @return
     */
    List<Content> getMyCollection(@Param("userId") Long userId,
                                  @Param("folderId") Long folderId);

    /**
     * 获取用户文件夹列表
     * @return
     */
    List<FavoritesFolder> getUserFolderList(Long userId);

    /**
     * 取消评论点赞
     * @return
     */
    void deletePraise(@Param("commentId") Long commentId,
                      @Param("userId") Long userId);

    /**
     * 总点赞数减一
     * @param commentId
     */
    void updatePraiseNoONE(Long commentId);

    /**
     * 评论总回复数加一
     */
    void updateReplyNumberONE(Long commentId);

    /**
     * 回复列表
     * @param userId
     * @return
     */
    List<Comment> getReplyList(Long userId);

    /**
     * 点赞列表
     * @param userId
     * @return
     */
    List<Comment> getFabulousList(Long userId);

    /**
     * 更新案例的收藏总数+1
     * @param contentId
     */
    void updateCollectionNumber(Long contentId);

    /**
     * 更新案例的收藏总数-1
     * @param contentId
     */
    void updateCollectionNumberReduce(Long contentId);

    /**
     * 标签、索引反馈日志列表
     * @param userId
     * @return
     */
    List<LabelLogger> getLabelLogger(Long userId);

    /**
     * 案例打分
     * @param scoring
     */
    void saveScoring(Scoring scoring);

}
