using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using OwlCore.Events; using StrixMusic.Sdk.AdapterModels; using StrixMusic.Sdk.AppModels; using StrixMusic.Sdk.CoreModels; namespace StrixMusic.Sdk.Tests.Mock.AppModels; public class MockAlbum : MockPlayableCollectionGroup, IAlbum { private readonly List _genres = new(); private int _totalGenreCount; private DateTime? _datePublished; private bool _isChangeDatePublishedAsyncAvailable; public int TotalGenreCount { get => _totalGenreCount; set { _totalGenreCount = value; GenresCountChanged?.Invoke(this, value); } } public Task RemoveGenreAsync(int index, CancellationToken cancellationToken = default) { var removedItem = _genres[index]; _genres.RemoveAt(index); TotalGenreCount = _genres.Count; GenresChanged?.Invoke(this, new List>(), new List> { new(removedItem, index) }); return Task.CompletedTask; } public Task IsAddGenreAvailableAsync(int index, CancellationToken cancellationToken = default) => Task.FromResult(true); public Task IsRemoveGenreAvailableAsync(int index, CancellationToken cancellationToken = default) => Task.FromResult(true); public event EventHandler? GenresCountChanged; public bool Equals(ICoreGenreCollection? other) => false; IReadOnlyList IMerged.Sources { get; } = new List(); public IAsyncEnumerable GetGenresAsync(int limit, int offset, CancellationToken cancellationToken = default) => _genres.ToAsyncEnumerable(); public Task AddGenreAsync(IGenre genre, int index, CancellationToken cancellationToken = default) { _genres.Insert(index, genre); TotalGenreCount = _genres.Count; GenresChanged?.Invoke(this, new List> { new(genre, index) }, new List>()); return Task.CompletedTask; } public event CollectionChangedEventHandler? GenresChanged; public DateTime? DatePublished { get => _datePublished; set { _datePublished = value; DatePublishedChanged?.Invoke(this, value); } } public bool IsChangeDatePublishedAsyncAvailable { get => _isChangeDatePublishedAsyncAvailable; set { _isChangeDatePublishedAsyncAvailable = value; IsChangeDatePublishedAsyncAvailableChanged?.Invoke(this, value); } } public Task ChangeDatePublishedAsync(DateTime datePublished, CancellationToken cancellationToken = default) { DatePublished = datePublished; return Task.CompletedTask; } public event EventHandler? DatePublishedChanged; public event EventHandler? IsChangeDatePublishedAsyncAvailableChanged; public bool Equals(ICoreAlbum? other) => throw new NotImplementedException(); IReadOnlyList IMerged.Sources{ get; } = new List(); public IPlayableCollectionGroup? RelatedItems { get; } = new MockPlayableCollectionGroup(); }