// Copyright (c) Arlo Godfrey. All Rights Reserved.
// Licensed under the GNU Lesser General Public License, Version 3.0 with additional terms.
// See the LICENSE, LICENSE.LESSER and LICENSE.ADDITIONAL files in the project root for more information.
using System;
using System.Collections.Generic;
using OwlCore.Events;
using OwlCore.Provisos;
using StrixMusic.Sdk.AdapterModels;
using StrixMusic.Sdk.CoreModels;
namespace StrixMusic.Sdk.AppModels
{
///
/// Implementations provide a root entry point for interaction with the SDK. Allows for interfacing with multiple
/// merged s, configuring plugins, and more.
///
/// Instances of this class may contain data merged from one or more sources.
public interface IStrixDataRoot : IAppModel, IMerged, IAsyncInit, IAsyncDisposable
{
///
/// Configuration options for merging collections items together.
///
public MergedCollectionConfig MergeConfig { get; }
///
/// The available devices.
///
public IReadOnlyList Devices { get; }
///
/// Gets the library.
///
public ILibrary Library { get; }
///
/// A list of pinned playable items.
///
public IPlayableCollectionGroup? Pins { get; }
///
/// Contains various search-related data and activities.
///
public ISearch? Search { get; }
///
/// Gets the recently played items for this .
///
public IRecentlyPlayed? RecentlyPlayed { get; }
///
/// Used to browse and discover new music.
///
public IDiscoverables? Discoverables { get; }
///
/// Raised when is changed.
///
public event EventHandler? PinsChanged;
///
/// Raised when is changed.
///
public event EventHandler? SearchChanged;
///
/// Raised when is changed.
///
public event EventHandler? RecentlyPlayedChanged;
///
/// Raised when is changed.
///
public event EventHandler? DiscoverablesChanged;
///
/// Raised when the contents of is changed.
///
public event CollectionChangedEventHandler? DevicesChanged;
}
}