using YandexMusic.API.Common;
namespace YandexMusic.API;
/// Главный класс API Яндекс Музыки. Предоставляет доступ ко всем веткам API.
public class YandexMusicApi
{
/// HttpClient, используемый для всех запросов.
internal HttpClient HttpClient { get; }
/// Хранилище данных авторизации.
internal AuthStorage Storage { get; }
/// API для работы с альбомами.
public YAlbumAPI Album { get; internal set; } = null!;
/// API для работы с исполнителями.
public YArtistAPI Artist { get; internal set; } = null!;
/// API для работы с лейблами.
public YLabelAPI Label { get; internal set; } = null!;
/// API для работы с главной страницей (лендингом).
public YLandingAPI Landing { get; internal set; } = null!;
/// API для работы с библиотекой (лайки, дизлайки).
public YLibraryAPI Library { get; internal set; } = null!;
/// API для работы с плейлистами.
public YPlaylistAPI Playlist { get; internal set; } = null!;
/// API для работы с закреплёнными объектами.
public YPinsAPI Pins { get; internal set; } = null!;
/// API для работы с радио.
public YRadioAPI Radio { get; internal set; } = null!;
/// API для поиска.
public YSearchAPI Search { get; internal set; } = null!;
/// API для работы с треками.
public YTrackAPI Track { get; internal set; } = null!;
/// API для работы с очередями.
public YQueueAPI Queue { get; internal set; } = null!;
/// API для работы с пользователем и авторизацией.
public YAuthAPI Auth { get; internal set; } = null!;
/// API для загрузки пользовательского контента.
public YUgcAPI UserGeneratedContent { get; internal set; } = null!;
/// API для работы с протоколом Ynison (WebSocket).
public YYnisonAPI Ynison { get; internal set; } = null!;
/// API для работы с яндекс пасспорт.
public YPassportAPI Passport { get; internal set; } = null!;
///
/// Инициализирует новый экземпляр API.
///
/// HttpClient для выполнения запросов.
/// Хранилище авторизации.
public YandexMusicApi(HttpClient httpClient, AuthStorage storage)
{
HttpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
Storage = storage ?? throw new ArgumentNullException(nameof(storage));
Album = new(this);
Artist = new(this);
Label = new(this);
Landing = new(this);
Library = new(this);
Playlist = new(this);
Pins = new(this);
Radio = new(this);
Search = new(this);
Track = new(this);
Queue = new(this);
Auth = new(this);
UserGeneratedContent = new(this);
Ynison = new(this);
Passport = new(this);
}
}