using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using GxPress.Entity;
using GxPress.Request.App.GroupFolder;
using GxPress.Request.App.GroupUser;
using Datory;
using GxPress.EnumConst;
using SqlKata;

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



        Task<bool> UpdateAsync(GroupUserUpRequest request);

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

        Task<IEnumerable<GroupUser>> FindGroupUserAsync(GroupUserFindRequest request);

        Task<int> InsertAsync(int userId, int groupId, GroupUserRoleTyeConst groupUserRoleId);


        Task<GroupUser> GetAsync(SqlKata.Query q);
        Task<IEnumerable<GroupUser>> GetAllAsync(SqlKata.Query q);

        Task<int> InsertAsync(GroupUser groupUser);

        /// <summary>
        /// 设置用户是否免打扰
        /// </summary>
        /// <param name="groupId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<bool> SetIsUDisturbAsync(int groupId, int userId);
        Task<bool> InsertAsync(List<GroupUser> groupUsers);
        /// <summary>
        /// 根据用户ID获取所加入的小组用户
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<IEnumerable<int>> GetGroupUserByUserIdAsync(int userId);
        /// <summary>
        /// 获取用户加入小组的人数
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<int> GetUserIntoGroupUserCountAsync(int userId);
        Task<int> CountAsync(int groupId);
        Task<bool> UpdateAsync(Entity.GroupUser groupUser);
    }
}