using GsConfigTool.Helpers; using GsConfigTool.Models; using GsConfigTool.Services; using System.Collections.ObjectModel; using System.Windows; using System.Windows.Input; namespace GsConfigTool.ViewModels; public class ProjectsViewModel : BaseViewModel { private readonly DatabaseService _db; private readonly MainViewModel _main; private ObservableCollection _projects = new(); private ServerProject? _selectedProject; private bool _isLoading; public ProjectsViewModel(DatabaseService db, MainViewModel main) { _db = db; _main = main; OpenCommand = new RelayCommand(() => _main.OpenProject(SelectedProject), () => SelectedProject != null); DeleteCommand = new RelayCommand(DeleteSelected, () => SelectedProject != null); RefreshCommand = new RelayCommand(async () => await LoadAsync()); NewArkSECommand = new RelayCommand(() => _main.NavigateTo("ArkSE")); NewArkSACommand = new RelayCommand(() => _main.NavigateTo("ArkSA")); NewPalworldCommand = new RelayCommand(() => _main.NavigateTo("Palworld")); _ = LoadAsync(); } public ObservableCollection Projects { get => _projects; set => SetField(ref _projects, value); } public ServerProject? SelectedProject { get => _selectedProject; set => SetField(ref _selectedProject, value); } public bool IsLoading { get => _isLoading; set => SetField(ref _isLoading, value); } public ICommand OpenCommand { get; } public ICommand DeleteCommand { get; } public ICommand RefreshCommand { get; } public ICommand NewArkSECommand { get; } public ICommand NewArkSACommand { get; } public ICommand NewPalworldCommand { get; } private async Task LoadAsync() { IsLoading = true; var list = await _db.GetAllProjectsAsync(); Projects = new ObservableCollection(list); IsLoading = false; } private async void DeleteSelected() { if (SelectedProject == null) return; var result = MessageBox.Show( $"Projekt \"{SelectedProject.Name}\" wirklich löschen?", "Löschen bestätigen", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result != MessageBoxResult.Yes) return; await _db.DeleteProjectAsync(SelectedProject.Id); await LoadAsync(); } }