using Postall.Domain.Entities;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Postall.Domain
{
    public interface IVideoRepository
    {
        Task<IEnumerable<VideoData>> GetAllAsync();
        Task<VideoData> GetByIdAsync(string id);
        Task<VideoData> GetByVideoIdAsync(string videoId);
        Task<IList<VideoData>> GetByUserIdAsync(string userId);
        Task<IList<VideoData>> GetByChannelIdAsync(string channelId);
        Task<IList<VideoData>> GetByUserIdAndChannelIdAsync(string userId, string channelId);
        Task<VideoData> GetByUserIdAndVideoIdAsync(string userId, string videoId);
        Task<VideoData> AddAsync(VideoData videoData);
        Task<IEnumerable<VideoData>> AddManyAsync(IEnumerable<VideoData> videos);
        Task<bool> UpdateAsync(VideoData videoData);
        Task<bool> DeleteAsync(string id);
        Task<bool> DeleteByVideoIdAsync(string videoId);
        Task<IEnumerable<VideoData>> SearchAsync(string searchTerm);
    }
}