using System.Collections.Generic;
using System.Threading.Tasks;
using GxPress.Entity;
using Datory;
using GxPress.Request.Notice;
using GxPress.Result.Notice;
using SqlKata;
using GxPress.Result.App.Missive;
using GxPress.Request.App.Missive;

namespace GxPress.Repository.Interface
{
    /// <summary>
    /// 收件人
    /// </summary>
    public interface IAddresseeRepository : IRepository
    {
        /// <summary>
        /// 根据通知ID获取抄送人
        /// </summary>
        /// <param name="noticeId"></param>
        /// <returns></returns>
        Task<IEnumerable<Addressee>> GetNoticeAddresseeByNoticeIdAsync(int noticeId);

        Task<bool> DeleteAsync(int noticeId, int sourceType, int isAdmin);
        Task<int> InsertAsync(Addressee noticeAddressee);
        /// <summary>
        /// 插入收件人
        /// </summary>
        /// <param name="noticeAddressees"></param>
        /// <returns></returns>
        Task<bool> InsertAsync(List<Addressee> noticeAddressees);
        Task<IEnumerable<NoticeReadListResult>> GetNoticeAddresseeByUserIdIdAsync(NoticeReadListRequest request);

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

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

        Task<bool> UpdateAsync(SqlKata.Query query);
        /// <summary>
        /// 获取收件人
        /// </summary>
        /// <param name="noticeId"></param>
        /// <returns></returns>
        Task<IEnumerable<User>> GetUserByNoticeIdAsync(int noticeId);
        Task<bool> ExistsAsync(Query query);

        Task<IEnumerable<MissiveReadListResult>> GetMissiveReadListAsync(MissiveReadListRequest request);
    }
}