using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using GxPress.Common.Page;
using GxPress.Entity;
using GxPress.Request.App.User;
using GxPress.Request.User;
using GxPress.Result.App.User;
using GxPress.Result.User;

namespace GxPress.Service.Interface
{
    public interface IUserService : IService
    {
        /// <summary>
        /// 根据部门或者自建ID获取用户
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<IEnumerable<UserInfoResult>> FindUser(FindUserRequest request);

        /// <summary>
        /// 根据用户ID查询用户数据
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="blackUserId"></param>
        /// <returns></returns>
        Task<UserDetail> GetUserByIdAsync(int userId, int blackUserId);

        /// <summary>
        /// 生成excel
        /// </summary>
        /// <returns></returns>
        Task<string> ExcelUserAsync(List<int> userIds);
        /// <summary>
        /// 用户分页列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<PagedList<UserResult>> GetPagedListAsync(UserPageSearchRequest request);

        Task<bool> DeleteUsersAsync(IEnumerable<int> userIds);

        /// <summary>
        /// 获取用户未读数据
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<UserCountResult> GetUserCountAsync(int userId);

        Task<PagedList<User>> GetPageListAsync(UserPageSearchRequest request);

        /// <summary>
        /// 获取用户的通讯录
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<UserLinkResult> GetUserLinkResultAsync(int userId);
        /// <summary>
        /// 更新用户信息
        /// </summary>
        /// <param name="id"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> UpdateAsync(int id, UserInfoRequest request);
        Task<UserInfoResult> GetUserInfoAsync(int id);
        /// <summary>
        /// 查询不是好友的用户
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<UserInfoResult>> FindUserInfoNoFriendsResultAsync(int userId, string keyword);
        /// <summary>
        /// 搜索好友和部门用户
        /// </summary>
        /// <param name="keyword"></param>
        /// <param name="userIds"></param>
        /// <returns></returns>
        Task<IEnumerable<UserInfoResult>> GetSearchUserInfoResults(int userId, string keyword);
        /// <summary>
        /// 根据部门ID获取用户
        /// </summary>
        /// <param name="departentId"></param>
        /// <returns></returns>
        Task<IEnumerable<UserInfoResult>> GetUserInfoByDepartentResult(int departentId);
        /// <summary>
        /// 获取群聊和小组的用户
        /// </summary>
        /// <param name="typeValue"></param>
        /// <param name="id"></param>
        /// <param name="keyword"></param>
        /// <returns></returns>
        Task<IEnumerable<UserInfoResult>> GetGroupOrGroupChatUserInfosResult(UserInfoByGroupoRoGroupChatResult request);
        /// <summary>
        /// 获取好友列表
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="keyWord"></param>
        /// <returns></returns>
        Task<IEnumerable<UserInfoResult>> GetFriendUserInfoResult(int userId, string keyWord);
    }
}