using YandexMusic.API.Models.Album;
using YandexMusic.API.Models.Artist;
using YandexMusic.API.Models.Common;
using YandexMusic.API.Models.Landing.Entity.Entities.Context;
using YandexMusic.API.Models.Library;
using YandexMusic.API.Models.Playlist;
using YandexMusic.API.Models.Track;
using YandexMusic.API.Requests.Library;
namespace YandexMusic.API;
/// API для работы с библиотекой (лайки, дизлайки, недавно прослушанное).
public class YLibraryAPI : YCommonAPI
{
public YLibraryAPI(YandexMusicApi api) : base(api) { }
#region Лайки
public Task GetLikedTracksAsync()
=> new YGetLibrarySectionBuilder(Api).ExecuteAsync((YLibrarySection.Tracks, YLibrarySectionType.Likes));
public Task?> GetLikedAlbumsAsync()
=> new YGetLibrarySectionBuilder>(Api).ExecuteAsync((YLibrarySection.Albums, YLibrarySectionType.Likes));
public Task?> GetLikedArtistsAsync()
=> new YGetLibrarySectionBuilder>(Api).ExecuteAsync((YLibrarySection.Artists, YLibrarySectionType.Likes));
public Task?> GetLikedPlaylistsAsync()
=> new YGetLibrarySectionBuilder>(Api).ExecuteAsync((YLibrarySection.Playlists, YLibrarySectionType.Likes));
#endregion
#region Дизлайки
public Task GetDislikedTracksAsync()
=> new YGetLibrarySectionBuilder(Api).ExecuteAsync((YLibrarySection.Tracks, YLibrarySectionType.Dislikes));
public Task?> GetDislikedArtistsAsync()
=> new YGetLibrarySectionBuilder>(Api).ExecuteAsync((YLibrarySection.Artists, YLibrarySectionType.Dislikes));
#endregion
#region Добавление/удаление
public Task AddTrackLikeAsync(YTrack track)
=> new YLibraryAddBuilder(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Likes))
.ContinueWith(t => t.Result?.Revision);
public Task RemoveTrackLikeAsync(YTrack track)
=> new YLibraryRemoveBuilder(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Likes))
.ContinueWith(t => t.Result?.Revision);
public Task AddTrackDislikeAsync(YTrack track)
=> new YLibraryAddBuilder(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Dislikes))
.ContinueWith(t => t.Result?.Revision);
public Task RemoveTrackDislikeAsync(YTrack track)
=> new YLibraryRemoveBuilder(Api).ExecuteAsync((track.Id, YLibrarySection.Tracks, YLibrarySectionType.Dislikes))
.ContinueWith(t => t.Result?.Revision);
public Task AddAlbumLikeAsync(YAlbum album)
=> new YLibraryAddBuilder(Api).ExecuteAsync((album.Id, YLibrarySection.Albums, YLibrarySectionType.Likes));
public Task RemoveAlbumLikeAsync(YAlbum album)
=> new YLibraryRemoveBuilder(Api).ExecuteAsync((album.Id, YLibrarySection.Albums, YLibrarySectionType.Likes));
public Task AddArtistLikeAsync(YArtist artist)
=> new YLibraryAddBuilder(Api).ExecuteAsync((artist.Id, YLibrarySection.Artists, YLibrarySectionType.Likes));
public Task RemoveArtistLikeAsync(YArtist artist)
=> new YLibraryRemoveBuilder(Api).ExecuteAsync((artist.Id, YLibrarySection.Artists, YLibrarySectionType.Likes));
public Task AddPlaylistLikeAsync(YPlaylist playlist)
=> new YLibraryAddBuilder(Api).ExecuteAsync((playlist.GetKey().ToString(), YLibrarySection.Playlists, YLibrarySectionType.Likes));
public Task RemovePlaylistLikeAsync(YPlaylist playlist)
=> new YLibraryRemoveBuilder(Api).ExecuteAsync((playlist.GetKey().ToString(), YLibrarySection.Playlists, YLibrarySectionType.Likes));
#endregion
#region Недавно прослушанное
public Task GetRecentlyListenedAsync(
IEnumerable contextTypes,
int trackCount = 50,
int contextCount = 10)
=> new YGetLibraryRecentlyListenedBuilder(Api).ExecuteAsync((contextTypes, trackCount, contextCount));
#endregion
}