using CommunityToolkit.Diagnostics;
using OwlCore.Extensions;
using StrixMusic.Sdk.ViewModels;
using StrixMusic.Shells.Groove.Messages.Navigation.Pages;
using StrixMusic.Shells.Groove.Messages.Navigation.Pages.Abstract;
using StrixMusic.Shells.Groove.ViewModels.Pages;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace StrixMusic.Shells.Groove.TemplateSelectors
{
///
/// A for the based on the ViewModel.
///
public class MainContentTemplateSelector : DataTemplateSelector
{
///
/// The to use if the ViewModel is a .
///
public DataTemplate? AlbumPageTemplate { get; set; }
///
/// The to use if the ViewModel is a .
///
public DataTemplate? ArtistPageTemplate { get; set; }
///
/// The to use if the ViewModel is a .
///
public DataTemplate? HomePageTemplate { get; set; }
///
/// The to use if the ViewModel is a .
///
public DataTemplate? PlaylistPageTemplate { get; set; }
///
/// The to use if the ViewModel is a .
///
public DataTemplate? PlaylistsPageTemplate { get; set; }
///
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
switch (item)
{
case AlbumViewModel _:
Guard.IsNotNull(AlbumPageTemplate, nameof(AlbumPageTemplate));
return AlbumPageTemplate;
case ArtistViewModel _:
Guard.IsNotNull(ArtistPageTemplate, nameof(ArtistPageTemplate));
return ArtistPageTemplate;
case LibraryViewModel _:
Guard.IsNotNull(HomePageTemplate, nameof(HomePageTemplate));
return HomePageTemplate;
case PlaylistViewModel _:
Guard.IsNotNull(PlaylistPageTemplate, nameof(PlaylistPageTemplate));
return PlaylistPageTemplate;
case IPlaylistCollectionViewModel _:
Guard.IsNotNull(PlaylistsPageTemplate, nameof(PlaylistsPageTemplate));
return PlaylistsPageTemplate;
default:
return base.SelectTemplateCore(item);
}
}
}
}