using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using StrixMusic.Sdk.CoreModels;
using StrixMusic.Services.CoreManagement;
namespace StrixMusic.Shared.ViewModels
{
///
/// A view model containing metadata about a service (core) that the user can create an instance of.
///
public class AvailableServicesItemViewModel : ObservableObject
{
private readonly ICoreManagementService _coreManagementService;
///
/// Initializes a new instance of the class.
///
/// A core management service where cores can be re-registered.
/// The core metadata to wrap around.
public AvailableServicesItemViewModel(ICoreManagementService coreManagementService, CoreMetadata metadata)
{
_coreManagementService = coreManagementService;
Metadata = metadata;
CreateCoreInstanceCommand = new AsyncRelayCommand(CreateCoreInstanceAsync);
}
///
public CoreMetadata Metadata { get; }
///
/// Fires when the user selects this item.
///
public IAsyncRelayCommand CreateCoreInstanceCommand { get; }
private Task CreateCoreInstanceAsync() => _coreManagementService.RegisterCoreInstanceAsync(Metadata);
}
}