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 MockArtist : MockPlayableCollectionGroup, IArtist { private readonly List _genres = new(); private int _totalGenreCount; 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 bool Equals(ICoreArtist? other) => false; public IReadOnlyList Sources { get; } = new List(); public IPlayableCollectionGroup? RelatedItems { get; } = new MockPlayableCollectionGroup(); }