using System.Collections.Generic;
using System.Threading.Tasks;
using Datory;
using GxPress.Common.Page;
using GxPress.Request.AppChannel;
using GxPress.Request.ArticleGroup;
using GxPress.Request.Media;
using GxPress.Result.AppChannel;
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 page = 1, 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);
        /// <summary>
        /// 大咖讲座
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<MediaCathedraResult>> GetMediasByTeacherAsync(ArticleGroupRequest request);
        /// <summary>
        /// 大咖讲座
        /// </summary>
        /// <returns></returns>
        Task<int> GetMediasByTeacherCountAsync(ArticleGroupRequest request);
        /// <summary>
        /// 根据IDs
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<MediaCathedraResult>> GetMediaByLableIdsAsync(MediaIdsRequest request);
        /// <summary>
        /// 根据IDs
        /// </summary>
        /// <returns></returns>
        Task<PagedList<MediaCathedraResult>> GetMediaByLableIdAsync(MediaLableIdRequest request);
        /// <summary>
        /// 每日技能分页
        /// </summary>
        /// <returns></returns>
        Task<PagedList<MediaCathedraResult>> GetDaySkillsAsync(MediaDayWeBookRequest request);

        /// <summary>
        /// 每日技能
        /// </summary>
        /// <returns></returns>
        Task<SkillInfo> GetRandomDaySkillAsync();
        /// <summary>
        /// 猜你喜欢
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<MediaCathedraResult>> GetUserLikeAsync();
        /// <summary>
        /// 导航内容
        /// </summary>
        /// <returns></returns>
        Task<PagedList<MediaCathedraResult>> GetContentNavigationAsync(MediaContentNavigationRequest request);
        /// <summary>
        /// 排行榜分页
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<PagedList<RankingListResult>> GetRankingPageListResults(RankingListRequest request);
        /// <summary>
        /// 明栏分页
        /// </summary>
        /// <returns></returns>
        Task<PagedList<MediaCathedraResult>> GetStarLablePageAsync(MediaStarLableRequest request);
        /// <summary>
        /// 明栏分页
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<MediaCathedraResult>> GetStarLablesAsync(MediaStarLableRequest request);
        /// <summary>
        /// app频道
        /// </summary>
        /// <returns></returns>
        Task<PagedList<MediaChannelCategoryResult>> GetAppChannelsAsync(AppChannelSearchRequest request);
        /// <summary>
        /// 获取出版社
        /// </summary>
        /// <returns></returns>
        Task<IEnumerable<string>> GetPresssAsync();
    }
}