using BeWo.ServiceProxy; using BeWo.Services; using BeWo.ViewModel.ListViewModel; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Feature.AI; using BS.Shared.Extensions.CustomInterfaces; using DevExpress.Mvvm; using DevExpress.Xpf.Layout.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; namespace BeWo.ViewModel.View.Administration { public class AiPromptbausteinComplexTreeViewModel : WindowViewModel { private AiPromptbausteinFolderVM _SelectedFolder; private IBeWoWindowService WindowService { get; set; } private AiActionType AiActionType { get; set; } public AiPromptbausteinFolderListVM Folders { get; set; } public AiPromptbausteinPromptVM SelectedPrompt { get; set; } public AiPromptbausteinFolderVM CopiedFolder { get; set; } public AiPromptbausteinPromptVM CopiedPrompt { get; set; } public DelegateCommand OpenAddFolderDialogCommand { get; private set; } public DelegateCommand OpenEditFolderDialogCommand { get; private set; } public DelegateCommand CopyFolderCommand { get; private set; } public DelegateCommand PasteFolderCommand { get; private set; } public DelegateCommand DeleteFolderCommand { get; private set; } public DelegateCommand OpenAddPromptDialogCommand { get; private set; } public DelegateCommand OpenEditPromptDialogCommand { get; private set; } public DelegateCommand CopyPromptCommand { get; private set; } public DelegateCommand PastePromptCommand { get; private set; } public DelegateCommand DeletePromptCommand { get; private set; } public bool IsEditingMode { get; set; } public AiPromptbausteinFolderVM SelectedFolder { get => _SelectedFolder; set => SetProperty(ref _SelectedFolder, value, nameof(SelectedFolder)); } public AiPromptbausteinComplexTreeViewModel() : this(null, AiActionType.ServiceRecordConversation) { if (BeWoApp.IsInDesignMode) { ReloadVMList(); SelectedFolder = Folders.VMList.FirstOrDefault(); return; } } public AiPromptbausteinComplexTreeViewModel(IBeWoWindowService windowService, AiActionType aiActionType) { WindowService = windowService; AiActionType = aiActionType; OpenAddFolderDialogCommand = new DelegateCommand(OpenAddFolderDialog, canOpenAddFolderDialog, false); OpenEditFolderDialogCommand = new DelegateCommand(OpenEditFolderDialog, canOpenEditFolderDialog, false); CopyFolderCommand = new DelegateCommand(CopyFolder, canCopyFolder, false); PasteFolderCommand = new DelegateCommand(PasteFolder, canPasteFolder, false); DeleteFolderCommand = new DelegateCommand(DeleteFolder, canDeleteFolder, false); OpenAddPromptDialogCommand = new DelegateCommand(OpenAddPromptDialog, canOpenAddPromptDialog, false); OpenEditPromptDialogCommand = new DelegateCommand(OpenEditPromptDialog, canOpenEditPromptDialog, false); CopyPromptCommand = new DelegateCommand(CopyPrompt, canCopyPrompt, false); PastePromptCommand = new DelegateCommand(PastePrompt, canPastePrompt, false); DeletePromptCommand = new DelegateCommand(OpenDeletePromptDialog, canOpenDeletePromptDialog, false); IsEditingMode = true; } public override bool IsDirty { get { return false; } } public bool HasCopiedFolder => CopiedFolder is object; public bool HasCopiedPrompt => CopiedPrompt is object; public CompactEmployeeDC CurrentEmployee => BeWoApp.CompactLoggedOnEmployee; public void UpdateFolderCommands() { OpenAddFolderDialogCommand.RaiseCanExecuteChanged(); OpenEditFolderDialogCommand.RaiseCanExecuteChanged(); CopyFolderCommand.RaiseCanExecuteChanged(); PasteFolderCommand.RaiseCanExecuteChanged(); DeleteFolderCommand.RaiseCanExecuteChanged(); } public void UpdatePromptCommands() { OpenAddPromptDialogCommand.RaiseCanExecuteChanged(); OpenEditPromptDialogCommand.RaiseCanExecuteChanged(); CopyPromptCommand.RaiseCanExecuteChanged(); PastePromptCommand.RaiseCanExecuteChanged(); DeletePromptCommand.RaiseCanExecuteChanged(); } public void SaveVMList() { } internal void ReloadVMList() { var folders_dc = PredefinedAiPromptbausteinFolders.CreateSubTree(AiActionType); Folders = new AiPromptbausteinFolderListVM(folders_dc); FirePropertyChanged(nameof(Folders)); } public void UpdateVMList(AiPromptbausteinTreeListVM new_list) { } void OpenAddFolderDialog() { var sel_folder = SelectedFolder; var new_vm = sel_folder.SubFolders.CreateNewVM(); new_vm.Creator = CurrentEmployee; new_vm.Parent = sel_folder; new_vm.CanAdd = true; new_vm.CanEdit = true; var vm = new AiPromptbausteinFolderViewModel(new_vm, true); vm.Accept_Button_Clicked += (s, e) => { sel_folder.SubFolders.VMList.Add(new_vm); sel_folder.IsExpanded = true; }; WindowService.Show(vm); } void OpenEditFolderDialog() { var sel_folder = SelectedFolder; var sel_dc = sel_folder.CommitToDataContract(); var edit_vm = new AiPromptbausteinFolderVM(sel_dc); var vm = new AiPromptbausteinFolderViewModel(edit_vm, false); vm.Accept_Button_Clicked += (s, e) => { var edit_dc = edit_vm.CommitToDataContract(); sel_folder.UpdateByDataContract(edit_dc); }; WindowService.Show(vm); } void CopyFolder() { } void PasteFolder() { } void DeleteFolder() { var sel_folder = SelectedFolder; var parent = sel_folder.Parent; var txt = "Möchten Sie den ausgewählten Ordner wirklich löschen?"; var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel); if (result != MessageBoxResult.OK) return; parent.SubFolders.VMList.Remove(sel_folder); } bool canOpenAddFolderDialog() { return SelectedFolder?.CanAdd ?? true; } bool canOpenEditFolderDialog() { return SelectedFolder?.CanEdit ?? false; } bool canCopyFolder() { return false; //return SelectedFolder.CanEdit; } bool canPasteFolder() { return false; //return HasCopiedFolder && SelectedFolder.CanAdd; } bool canDeleteFolder() { return SelectedFolder?.CanEdit ?? false; } void OpenAddPromptDialog() { var sel_folder = SelectedFolder; var new_vm = sel_folder.SubPrompts.CreateNewVM(); new_vm.Creator = CurrentEmployee; new_vm.ParentFolderOid = sel_folder.DataContract.Oid; new_vm.ShowPrompt = true; new_vm.ShowPromptByTenant = true; new_vm.CanEdit = true; var vm = new AiPromptbausteinPromptViewModel(new_vm, true); vm.Accept_Button_Clicked += (s, e) => { sel_folder.SubPrompts.VMList.Add(new_vm); SelectedPrompt = new_vm; }; WindowService.Show(vm); } void OpenEditPromptDialog() { var sel_prompt = SelectedPrompt; var sel_dc = sel_prompt.CommitToDataContract(); var edit_vm = new AiPromptbausteinPromptVM(sel_dc); var vm = new AiPromptbausteinPromptViewModel(edit_vm, false); vm.Accept_Button_Clicked += (s, e) => { var edit_dc = edit_vm.CommitToDataContract(); sel_prompt.UpdateByDataContract(edit_dc); }; WindowService.Show(vm); } void CopyPrompt() { CopiedPrompt = SelectedPrompt; } void PastePrompt() { var copied_dc = CopiedPrompt.CommitToDataContract(); copied_dc.Creator = CurrentEmployee; copied_dc.CanEdit = true; copied_dc.IsPublic = false; copied_dc.Oid = null; copied_dc.Version = 0; var copied_vm = new AiPromptbausteinPromptVM(copied_dc); SelectedFolder.SubPrompts.VMList.Add(copied_vm); } void OpenDeletePromptDialog() { var sel_prompt = SelectedPrompt; var folder = SelectedFolder; var txt = "Möchten Sie den ausgewählten Prompt wirklich löschen?"; var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel); if (result != MessageBoxResult.OK) return; folder.SubPrompts.VMList.Remove(SelectedPrompt); } bool canOpenAddPromptDialog() { return SelectedFolder?.CanAdd ?? false; } bool canOpenEditPromptDialog() { return SelectedPrompt?.CanEdit ?? false; } bool canCopyPrompt() { return SelectedPrompt is object; } bool canPastePrompt() { return canOpenAddPromptDialog() && HasCopiedPrompt; } bool canOpenDeletePromptDialog() { return SelectedPrompt?.CanEdit ?? false; } } }