using System.Collections.Generic;
using System.Threading.Tasks;
using GxPress.Common.Page;
using GxPress.Entity;
using GxPress.Request.Comment;
using GxPress.Result.Comment;
using Datory;

namespace GxPress.Repository.Interface
{
    public interface ICommentRepository : IRepository
    {
        /// <summary>
        /// 添加文章评论
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<int> CommentInAsync(CommentInRequest request);

        Task<PagedList<CommentPageResult>> GetPagedList(CommentSearchPageRequest request);

        Task<int> GetCountAsync(CommentSearchPageRequest request);

        Task<IEnumerable<CommentPageResult>> GetPageListAsync(CommentSearchPageRequest request);

        Task<List<CommentReplyResult>>
            GetCommentReplyResultByPid(int pid, List<CommentReplyResult> commentReplyResults);

        /// <summary>
        /// 删除评论
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> DeleteCommentAsync(CommentDeleteRequest request);

        /// <summary>
        /// 获取文章的评论条数
        /// </summary>
        /// <param name="articleId"></param>
        /// <returns></returns>
        Task<int> GetCommentCountAsync(int articleId);

        Task<Comment> GetAsync(SqlKata.Query query);

        Task<bool> UpdateAsync(Comment comment);

        Task<int> CountAsync(SqlKata.Query query);
        Task<bool> UpdateCommentAsync(CommentUpdateRequest request);
        /// <summary>
        /// 后台评论分页列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
       Task<PagedList<CommentResult>> GetAllAsync(CommentSearchRequest request);
    }
}