using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using GxPress.Entity.Middle;
using GxPress.Request.Notice;
using SqlKata;
using Datory;
using GxPress.Request.App.Middle;
using GxPress.Request.Inbox;

namespace GxPress.Repository.Interface
{
    public interface IMiddleRepository : IRepository
    {
        Task<int> InsertAsync(Middle middle);
        Task<bool> UpdateAsync(SqlKata.Query query);
        Task<bool> UpdateAsync(Middle middle);
        Task<IEnumerable<Middle>> FindAsync(SqlKata.Query query);

        Task<bool> DeleteAsync(SqlKata.Query query);

        Task<Middle> GetMiddleAsync(Query query);

        Task<Middle> GetMiddleAsync(int id);

        Task<bool> SetSortAsync(MiddleSortRequest request);
        Task<bool> SetTopAsync(int id);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> DeleteAsync(NoticeDeRequest request);
        Task<bool> DeleteAsync(int middleId, int folderTypeId);
        /// <summary>
        /// 阅读
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> ReadAsync(int id);

        /// <summary>
        /// 恢复删除
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> RecoverDeleteAsync(NoticeDeRequest request);

        Task<bool> UpdateFolderNameAsync(MiddleFolderNameRequest request);

        Task<bool> IsFolderAsync(int parentId);

        /// <summary>
        /// 根据用户ID文件夹ID查询小组数量
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="folderId"></param>
        /// <param name="folderTypeId"></param>
        /// <returns></returns>
        Task<int> FindGroupCountAsync(int userId, int folderId, int folderTypeId);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        Task<int> CountAsync(SqlKata.Query query);
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="middle"></param>
        /// <returns></returns>
        Task<bool> InsertAsync(List<Middle> middles);

        Task<IEnumerable<Middle>> GetAllAsync(SqlKata.Query query);

        /// <summary>
        /// 获取下级数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<IEnumerable<Middle>> GetMiddleChildrenAsync(int id);

        Task<IEnumerable<Middle>> FindAsync(InboxSearchRequest request);
         Task<bool> ExistsAsync(SqlKata.Query query);
         Task<int> GetSytemFolderAsync(int userId);
          /// <summary>
        /// 排除不是文件夹的ID
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<IEnumerable<int>> GetMiddleIsFolderAsync(IEnumerable<int> ids);

        /// <summary>
        /// 递归获取父级下面的所有子集
        /// </summary>
        /// <param name="id"></param>
        /// <param name="ids"></param>
        /// <returns></returns>
       Task<IEnumerable<int>> GetAllMiddleChildrenByParentIdAsync(List<int> ids,List<int> returnIds);
    }
}