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

namespace GxPress.Repository.Interface.Media
{
    public interface IMediaRepository : IRepository
    {
        Task<MediaResult> GetAsync(int id);
        Task<Entity.tede2.Media.Media> GetAsync(string autoNumber);
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<bool> DeleteAsync(int id);
        /// <summary>
        /// 添加媒体
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        Task<bool> InsertAsync(MediaResult result);

        Task<bool> UpdateAsync(MediaResult result);
        Task<bool> UpdateAsync(SqlKata.Query query);

        Task<PagedList<Entity.tede2.Media.Media>> GetAllAsync(MediaSearchRequest request);
        Task<int> CountAsync(string beginTime, string endTiem);
        Task<int> CountAsync(SqlKata.Query query);
        /// <summary>
        /// 获取书籍
        /// </summary>
        /// <param name="mediaId"></param>
        /// <returns></returns>
        Task<BookMediaResult> GetBookMediaResultAsync(int mediaId);
        /// <summary>
        /// 获取书籍
        /// </summary>
        /// <param name="mediaId"></param>
        /// <returns></returns>
        Task<VideoMediaResult> GetVideoMediaResultAsync(int mediaId);
        Task<IEnumerable<NavigationMediaResult>> GetNavigationMediaResults(IEnumerable<int> mediaLables,int pageSize=10);
        /// <summary>
        /// 猜你喜欢
        /// </summary>
        /// <param name="mediaIds"></param>
        /// <returns></returns>
        Task<IEnumerable<NavigationMediaResult>> GetlikeMediaResults();
        /// <summary>
        /// 推荐
        /// </summary>
        /// <param name="mediaIds"></param>
        /// <returns></returns>
        Task<IEnumerable<NavigationMediaResult>> GetRecommendMediaResults();

        /// <summary>
        /// 排行榜
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<IEnumerable<RankingListResult>> GetRankingListResults(RankingListRequest request);
        /// <summary>
        /// 获取笔记摘录媒体
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        Task<MediaNoteResult> GetAsync(SqlKata.Query query);
    }
}