using System;
using System.ComponentModel;
using System.Threading.Tasks;
using LANCommander.Launcher.ViewModels;
namespace LANCommander.Launcher.Services;
public interface INavigationService : INotifyPropertyChanged
{
ViewModelBase? CurrentView { get; }
bool CanGoBack { get; }
bool IsNavigating { get; }
///
/// Navigate to a view model. If is true the history
/// stack is emptied first (use for root navigations like Library/Depot toggle).
/// An optional callback runs while
/// is true, driving the loading indicator.
///
void NavigateTo(ViewModelBase viewModel, bool clearHistory = false, Func? initializeAsync = null);
/// Pop the history stack and return to the previous view. No-op if the stack is empty.
void GoBack();
///
/// Replace the current view without pushing to history.
/// Useful for in-place refreshes (e.g. re-initializing DepotBrowse with new filters).
///
void ReplaceCurrent(ViewModelBase viewModel);
}