package com.happy.service;

import com.happy.Model.*;
import com.happy.dto.IPage;
import com.happy.vo.*;

import java.util.List;

public interface ArticleTweetService {
    /**
     * 根据数据ID查询推文数据
     *
     * @param id
     * @return
     */
    ArticleTweet queryArticleById(String id, Integer userId);

    /**
     * 新增推文数据
     *
     * @param articleTweet
     * @return
     */
    int insert(ArticleTweet articleTweet);

    public int update(ArticleTweet articleTweet);

    /**
     * 更新推文审批状态
     *
     * @param articleTweet
     * @return
     */
    int updateArticleApprove(ArticleTweet articleTweet);

    /**
     * 批量新增推文附件
     *
     * @param articleFileInfos
     * @return
     */
    int insertArticleFileBatch(List<ArticleFileInfo> articleFileInfos);

    public int insertArticleFile(ArticleFileInfo articleFileInfos);

    public int delArticleFileBatch(int id);

    public int delArticle(int id);

    public int delArticleFile(int link_id);

    public int updateArticleTop(ArticleTweet articleTweet);

    /**
     * 描述：根据乡镇ID进行民宿分页查询
     *
     * @param sqlx
     * @param page
     * @param rows
     * @return
     */
    IPage<HotelVo> queryHotelPage(String sqlx, int page, int rows);

    /**
     * 描述：根据民宿ID查询民宿数据
     *
     * @param sqlx
     * @return
     */
    List<HotelVo> queryHotels(String sqlx);

    /**
     * 描述：根据民宿ID查询民宿分页数据
     *
     * @param sqlx
     * @return
     */
    IPage<HotelVo> queryHotelPageByHotleId(String sqlx, int page, int rows);

    /**
     * 查询推文文件方法
     *
     * @param sqlx
     * @return
     */
    List<FileInfo> queryList(String sqlx);

    /**
     * 查询是否关注当前用户
     *
     * @param parentId
     * @param userId
     * @return
     */
    UserCollect queryUserCollect(Integer parentId, Integer userId);

    /**
     * 获取十条以内的点赞人列表数据
     *
     * @param articleId
     * @return
     */
    List<LikeListVo> queryArticleLikes(Integer articleId);

    /**
     * 获取三条评论数据
     *
     * @param articleId
     * @return
     */
    List<ArticleCommentVo> queryArticleComment(Integer articleId);

    /**
     * 根据文章ID获取评论总数
     *
     * @param articleId
     * @return
     */
    int queryArticleCommentTotal(Integer articleId);

    /**
     * 根据文章ID获取一级评论分页数据
     *
     * @param articleId
     * @param page
     * @param rows
     * @return
     */
    IPage<ArticleCommentVo> queryCommentPageByArticle(Integer articleId, int page, int rows);

    /**
     * 根据文章ID获取子级评论数据
     *
     * @param articleId
     * @return
     */
    List<ArticleCommentVo> queryCommentsByArticle(Integer articleId);

    /**
     * 获取主页用户信息
     *
     * @param userId
     * @return
     */
    articleUserVo queryUserInfo(Integer userId);

    /**
     * 获取用户主页下的推文列表分页数据
     *
     * @param userId
     * @param sqlWhere
     * @param page
     * @param rows
     * @return
     */
    IPage<OwnerArticleVo> queryOwnerArticlePage(Integer userId, String sqlWhere, int page, int rows);

    /**
     * 社区首页推文分页数据
     * @param townId
     * @param userId
     * @param type
     * @param page
     * @param rows
     * @return
     */
    IPage<ArticleListVo> queryArticlesPage(String keyWord, String townId, Integer userId, Integer type, int page, int rows);

    public IPage<ArticleListVo> queryManageArticlesPage(String keyWord, String townId, int page, int rows);

    /**
     * 相关推文分页数据
     * @param userId
     * @param townId
     * @param articleId
     * @param page
     * @param rows
     * @return
     */
    IPage<ArticleListVo> relatedTweetPage(Integer userId, String townId, Integer articleId, int page, int rows);

    /**
     * 获取文章收藏数据
     * @param articleId
     * @param userId
     * @return
     */
    ArticleCollect queryArticleCollect(Integer articleId, Integer userId);

    /**
     * 收藏或取消收藏文章
     * @param articleCollect
     * @return
     */
    int updateArticleCollect(ArticleCollect articleCollect);

    /**
     * 评论文章
     * @param articleComment
     * @return
     */
    int insertArticleComment(ArticleComment articleComment);

    /**
     * 用户关注记录
     * @param authorId
     * @param userId
     * @return
     */
    UserCollect queryUserCollectNoLose(Integer authorId, Integer userId);

    /**
     * 关注或取消关注
     * @param userCollect
     * @return
     */
    int updateUserCollect(UserCollect userCollect);


    /**
     * 查询用户点赞记录数据
     * @param articleId
     * @param userId
     * @return
     */
    ArticleLikes queryArticleLike(Integer articleId, Integer userId);

    /**
     * 点赞文章
     * @param articleLikes
     * @return
     */
    int updateArticleLike(ArticleLikes articleLikes);

    /**
     * 更新用户简介
     * @param authorId
     * @param descript
     * @return
     */
    int updateDescript(Integer authorId, String descript);


    /**
     * 点赞分页列表数据
     * @param articleId
     * @param page
     * @param rows
     * @return
     */
    IPage<LikeListVo> queryLikesPage(Integer articleId, int page, int rows);


    /**
     * 获取点赞数最多的最新推文数据
     */
    ArticleLikeMaxVo queryMaxArticleLike();

    /**
     * 可以展示攻略的推文，(必须是审核成功的)
     * @param strSql
     * @param page
     * @param rows
     * @return
     */
    IPage<WalkthroughVo> walkthroughPage(String strSql,Integer page, Integer rows);

    public List<ArticleLikeMaxVo> queryTop3ArticleLike();

    public List<ArticleTweet> queryTops();

}
