package com.happy.dao;

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

import java.util.List;

public interface ArticleTweetDao {

    /**
     * 根据数据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
     */
    List<HotelVo> queryHotelPage(String sqlx, int page, int rows);

    /**
     * 描述：根据乡镇ID获取民宿总条数
     * @param sqlx
     * @return
     */
    int queryHotelTotal(String sqlx);

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

    /**
     * 根据民宿ID查询民宿总数
     * @param sqlx
     * @return
     */
    int queryHotelTotalByHotleId(String sqlx);

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

    /**
     * 获取推文文件数据
     * @param sqlx
     * @return
     */
    List<FileInfo> queryList(String sqlx);

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

    /**
     * 获取十条以内的点赞人列表数据
     * @param articleId 文章ID
     * @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
     */
    List<ArticleCommentVo> queryCommentPageByArticle(Integer articleId, int page, int rows);

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

    /**
     * 根据文章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
     */
    List<OwnerArticleVo> queryOwnerArticlePage(Integer userId, String sqlWhere, int page, int rows);

    /**
     * 获取用户列表中的文章数据总数
     * @param userId
     * @param sqlWhere
     * @return
     */
    int queryOwnerArticleTotal(Integer userId, String sqlWhere);

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

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

    public int queryManageArticlesTotal(String keyWord, String townId);

    /**
     * 社区首页推文列表总数据条数
     * @param townId
     * @param userId
     * @param type
     * @return
     */
    int queryArticlesTotal(String keyWord, String townId, Integer userId, Integer type);

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

    /**
     * 相关推文总数据条数
     * @param townId
     * @param articleId
     * @return
     */
    int relatedTweetTotal(String townId, Integer articleId);

    /**
     * 查询文章收藏数据
     * @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);

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

    /**
     * 点赞总数据条数
     */
    int queryLikesTotal(Integer articleId);

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

    List<WalkthroughVo> walkthroughPage(String strSql, Integer page, Integer rows);

    int walkthroughTotal(String strSql);

    public List<ArticleLikeMaxVo> queryTop3ArticleLike();

    public List<ArticleTweet> queryTops();
}
