
package org.lym.pom.service.impl;

import org.lym.pom.notify.event.CommentAddEvent;
import org.lym.pom.notify.event.CommentRemoveEvent;
import org.lym.pom.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

/**
 * @author lym
 */
@Service
public class CommentEventConsumer {

    // private RedisTemplate redisTemplate;

    @Autowired
    private CommentService commentService;

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 新增评论事件
     * 通知发帖人有新评论
     * 通知被提及的人有人@你
     * 通知被评论消息作者有新的评论（注册任务）
     * 更新帖子评论数（缓存）
     * 推荐系统，为评论人调整该类帖子的喜好分、以及同类评论的展示优先级（AI分析评论内容）
     */
    @EventListener(CommentAddEvent.class)
    public void onCommentAddEvent(CommentAddEvent commentAddEvent) {
        notifySourceAuthorCommented(commentAddEvent);
        notifyMentionedUser(commentAddEvent);
        notifyCommentAuthorReply(commentAddEvent);
        updateCache(commentAddEvent);
        //score(commentAddEvent);
    }

    void notifySourceAuthorCommented(CommentAddEvent commentAddEvent) {

    }

    void notifyMentionedUser(CommentAddEvent commentAddEvent) {

    }

    private void notifyCommentAuthorReply(CommentAddEvent commentAddEvent) {
        if (commentAddEvent.getComment().getRootCommentId() == null) {
            // 是直接评论不处理
            return;
        }
        // 通知评论人有新回复 todo
    }

    private void updateCache(CommentAddEvent commentAddEvent) {
        // 性能的缓存，如related.commentNumber、cache等
        // 推荐系统，为评论人调整该类帖子的喜好分、以及同类评论的展示优先级（AI分析评论内容）
    }

    /**
     * 新增评论事件
     * （【撤回】）通知发帖人有评论
     * （【撤回】）通知被评论消息作者有新的评论
     * （更新帖子评论数）
     * 推荐系统，为评论人调整该类帖子的喜好分、以及同类评论的展示优先级（AI分析评论内容）
     */
    @EventListener(CommentRemoveEvent.class)
    public void onCommentRemoveEvent(CommentRemoveEvent commentRemoveEvent) {

    }

}