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

namespace GxPress.Service.Interface.Middle
{
    public interface IMiddleService : IService
    {
        /// <summary>
        /// 添加文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<MiddleInResult> InsertAsync(MiddleInsertRequest request);

        /// <summary>
        /// 修改文件夹名称
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> UpdateNameAsync(MiddleUpdateNameRequest request);

        Task<int> InsertAsync(MiddleInsertTypeRequest request);

        /// <summary>
        /// 排序
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> MiddleSortAsync(MiddleSortRequest request);

        /// <summary>
        /// 设置置顶
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> SetTopAsync(int id);

        Task<bool> DeleteAsync(NoticeDeRequest request);

        Task<bool> RecoverDeleteAsync(NoticeDeRequest request);
        Task<bool> AddOrUpdateAsync(MiddleInsertTypeRequest request);

        Task<bool> SetMove(MiddleMoveRequest request);

        /// <summary>
        /// 修改文件夹名称
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> UpdateFolderNameAsync(MiddleFolderNameRequest request);

        /// <summary>
        /// 查询文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<List<MiddleSearchFolderResult>> SearchFolderAsync(MiddleSearchFolderRequest request);

        /// <summary>
        /// 修改权限
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<bool> UpdateFolderRoleAsync(MiddleUpdateFolderRoleRequest request);

        /// <summary>
        /// 根据文件夹ID获取文件夹信息
        /// </summary>
        /// <param name="middleId"></param>
        /// <returns></returns>
        Task<MiddleFolderInfoResult> GetFolderInfo(int middleId);
        /// <summary>
        /// 获取默认的共享文件夹范围
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<MiddleDefaultResult> GetEnjoyDefaultAsync(int userId, int folderType);

        /// <summary>
        /// 获取话题 笔记共享范围文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<List<MiddleSearchFolderResult>> SearchNoteFolderAsync(MiddleSearchFolderRequest request);

        /// <summary>
        /// 恢复全部
        /// </summary>
        /// <param name="folderType">文件夹类型 1 通知 2话题 3 收藏 4笔记 5 普通站内信 6匿名站内信 7小组</param>
        /// <returns></returns>
        Task<bool> RecoverAllAsync(int folderType, int userId);
        /// <summary>
        /// 删除全部
        /// </summary>
        /// <param name="folderType">文件夹类型 1 通知 2话题 3 收藏 4笔记 5 普通站内信 6匿名站内信 7小组</param>
        /// <param name="userId"></param>
        /// <returns></returns>
        Task<bool> DeleteAllAsync(int folderType, int userId);
        /// <summary>
        /// 获取话题最近使用的文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<List<MiddleSearchFolderResult>> GetLatelyNoteFolderAsync(int userId);
        /// <summary>
        /// 查询文件夹包含父级
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<MiddleSearchFolderByParendIsResult> SearchFolderAndParentIdAsync(MiddleSearchFolderRequest request);
        /// <summary>
        /// 获取话题最近使用的文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<List<MiddleSearchFolderResult>> GetLatelyTopicFolderAsync(int userId);

        /// <summary>
        /// 根据类型搜索文件夹
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<IEnumerable<Entity.Middle.Middle>> GetSearchFolderResult(MiddleSearchFolderRequest request);
      
    }
}