using System.Collections.Generic;
using System.Threading.Tasks;
using GxPress.Entity;
using GxPress.Request.App.OftenContact;
using GxPress.Result.App.OftenContact;
using Datory;
using GxPress.Result.Job;

namespace GxPress.Repository.Interface
{
    public interface IOftenContactRepository : IRepository
    {

        /// <summary>
        /// 删除
        /// </summary>
        /// <returns></returns>
        Task<bool> DeleteAsync(int id);


        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="request"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<bool> InsertAsync(OftenContactInRequest request, int userId);

        /// <summary>
        /// 插入多个
        /// </summary>
        /// <param name="oftenContacts"></param>
        /// <returns></returns>
        Task<bool> InsertAsync(List<OftenContact> oftenContacts);
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="blackUserId"></param>
        /// <returns></returns>
        Task<bool> SetBlackUserAsync(int userId, int blackUserId);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="groupChatImId"></param>
        /// <returns></returns>
        Task<OftenContact> FindOftenContactAsync(int userId, string groupChatImId);

        /// <summary>
        /// 移除当前文件夹关系
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> RemoveOftenContactAsync(OftenContactDeRequest request);

        Task<bool> SetOftenContactIsTopAsync(OftenContactDeRequest request);

        /// <summary>
        /// 移动到文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> MoveOftenContactToIndividualGroupAsync(OftenContactUpRequest request);

        /// <summary>
        /// 删除聊天界面
        /// </summary>
        /// <param name="oftenContactIds"></param>
        /// <returns></returns>
        Task<bool> DeleteAsync(List<int> oftenContactIds);

        Task<bool> GetIsTopAsync(int userId, string imId);

        Task<int> CountAsync(SqlKata.Query query);

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

        Task<int> InsertAsync(Entity.OftenContact oftenContact);

        Task<IEnumerable<OftenContactInfo>> GetContactInfosAsync(OftenContactSearchRequest request);
        Task<Entity.OftenContact> GetAsync(SqlKata.Query query);
        Task<IEnumerable<Entity.OftenContact>> GetAllAsync(SqlKata.Query query);
        /// <summary>
        /// 获取全局索引聊天群
        /// </summary>
        /// <returns></returns>
        Task<List<JobChatResult>> ElasticSearchGroupChat();
        /// <summary>
        /// 获取全局索引聊天
        /// </summary>
        /// <returns></returns>
        Task<List<JobChatResult>> ElasticSearchChat();

        Task<IEnumerable<OftenContactInfo>> GetContactInfoAllAsync(OftenContactSearchRequest request);
    }
}