package com.ruoyi.generator.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.generator.domain.Community.*;
import com.ruoyi.generator.vo.*;

import java.text.ParseException;
import java.util.List;

/**
 * 业务 服务层
 *
 * @author ruoyi
 */
public interface ICommunityArticleService extends IService<CommunityArticle> {
    /**
     * 查询文章列表
     *
     * @param communityArticle 文章信息
     * @return 文章信息集合
     */
    List<CommunityArticleVo> selectCommunityArticleList(TableDataInfo rspData,CommunityArticle communityArticle, int pageNum, int pageSize, int searchType);

    /**
     * 发布文章
     *
     * @param communityArticle 文章信息
     */
    void insertCommunityArticle(CommunityArticle communityArticle);

    /**
     * 发送评论
     *
     * @param communityArticleComment 评论信息
     */
    void sendComment(CommunityArticleComment communityArticleComment) throws ParseException;

    /**
     * 删除评论
     *
     * @param communityArticleComment 评论信息
     */
    void deleteComment(CommunityArticleComment communityArticleComment);

    /**
     * 查询该文章对应的用户是否已经点赞
     *
     * @param communityLike 点赞信息
     * @return 点赞信息
     */
    CommunityLike selectCommunityLikeById(CommunityLike communityLike);

    /**
     * 新增点赞
     *
     * @param communityLike 点赞信息
     * @return 点赞是否成功
     */
    boolean insertCommunityLikeById(CommunityLike communityLike);

    /**
     * 删除点赞
     *
     * @param communityLike 点赞信息
     * @return 删除是否成功
     */
    boolean deleteCommunityLikeById(CommunityLike communityLike);

    /**
     * 查询该文章对应的用户是否已经收藏
     *
     * @param collect 收藏信息
     * @return 收藏信息
     */
    CommunityArticleCollect selectCommunityCollectById(CommunityArticleCollect collect);

    /**
     * 新增收藏
     *
     * @param collect 收藏信息
     * @return 收藏是否成功
     */
    boolean insertCommunityCollectById(CommunityArticleCollect collect);

    /**
     * 删除收藏
     *
     * @param collect 收藏信息
     * @return 删除是否成功
     */
    boolean deleteCommunityCollectById(CommunityArticleCollect collect);

    /**
     * 根据板块获取圈子列表
     *
     * @param classId 板块id
     * @return 圈子列表信息
     */
    List<CommunityCircleVo> selectCommunityCircleList(String classId);

    /**
     * 关注或取消关注用户粉丝/关注
     *
     * @param likeUserId 被关注人id
     * @return 登录用户关注信息
     */
    CommunityUserLike addOrDeleteUserLike(Long likeUserId);

    /**
     * 获取当前登录用户信息
     *
     * @param userId 用户id
     * @return 用户信息
     */
    CommunityUserInfoVo selectCommunityUserInfoById(Long userId);

    /**
     * 根据搜索值,搜索用户
     *
     * @param SearchValue 搜索值
     * @return 用户
     */
    List<CommunityUserInfoVo> selectUserBySearchValue(String SearchValue);


    /**
     * 根据账户或者用户名称,搜索用户
     * @param SearchValue
     * @return 用户
     */
    List<CommunityUserInfoVo> selectUsersByAccountOrName(String SearchValue);

    /**
     * 获取关注列表
     *
     * @param userId 登录用户id
     * @return 当前用户关注列表
     */
    List<CommunityUserLikeVo> selectCommunityUserLikeList(Long userId);

    /**
     * 获取粉丝列表
     *
     * @param userId 登录用户id
     * @return 当前用户粉丝列表
     */
    List<CommunityUserLikeVo> selectUserFansList(Long userId);

    /**
     * 获取互相关注列表
     *
     * @param userId 登录用户id
     * @return 获取互相关注列表
     */
    List<CommunityUserLikeVo> selectMutualAttention(Long userId);



    /**
     * 判断评论的人 是否在文章作者的关注列表中
     * @param userId    必填   用户ID
     * @param commentId 可选   评论ID
     * @param articleId 可选   文章ID
     * @return true or false
     * @throws ParseException
     */
    Boolean checkCommentPermission(Long userId,Long commentId,Long articleId) throws ParseException;


}
