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<ServerProject> _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<ServerProject> 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<ServerProject>(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();
}
}