using System.Collections.Generic;
using System.Threading.Tasks;
using GxPress.Common.Page;
using GxPress.Request.Notice;
using GxPress.Result.Notice;

namespace GxPress.Service.Interface.Notice
{
    public interface INoticeService : IService
    {
        /// <summary>
        /// 查看详情
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<NoticeEditDetailResult> NoticeEditDetailAsync(int id);

        /// <summary>
        /// 编辑通知
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> NoticeUpAsync(NoticeUpRequest request);

        Task<IEnumerable<NoticeReadListResult>> NoticeReadListAsync(NoticeReadListRequest request);

        Task<bool> InsertAsync(NoticeInRequest request);
        /// <summary>
        /// 获取通知点赞列表
        /// </summary>
        /// <param name="id"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<NoticeDetailResult> GetNoticeDetailAsync(int id, int userId);

        /// <summary>
        /// 获取通知列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(NoticePageSearchRequest request);

        /// <summary>
        /// 获取通知详情
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<Result.Notice.NoticeDetailResult> GetNoticeDetailResultAsync(int id, int userId);

        /// <summary>
        /// 撤销通知
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> RecallAsync(int id);
    }
}
