using BeWo.ServiceProxy; using BeWo.ViewModel.ListViewModel; using BS.Shared.DataContracts.Feature.AI; using DevExpress.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace BeWo.ViewModel.View.Administration { public class AiPromptbausteinRoutineViewModel : AcceptCancelDialogViewModel { private readonly bool _IsNew; public AiPromptbausteinRoutineStepVM _SelectedStep; public AiPromptbausteinFolderListVM FolderListVM { get; set; } public ICommand DeleteStepCommand { get; private set; } public ICommand MoveStepUpCommand { get; private set; } public ICommand MoveStepDownCommand { get; private set; } public AiPromptbausteinRoutineStepVM SelectedStep { get => _SelectedStep; set => SetProperty(ref _SelectedStep, value, nameof(SelectedStep)); } public AiPromptbausteinRoutineViewModel(AiPromptbausteinRoutineVM viewModel, AiPromptbausteinFolderListVM folders) : base(viewModel) { FolderListVM = folders; ViewModel.Steps.VMList.ListChanged += (s, e) => { SaveCommand.RaiseCanExecuteChanged(); }; DeleteStepCommand = new DelegateCommand(DeleteStep, canDeleteStep); MoveStepUpCommand = new DelegateCommand(MoveStepUp, canMoveStepUp); MoveStepDownCommand = new DelegateCommand(MoveStepDown, canMoveStepDown); } void DeleteStep(AiPromptbausteinRoutineStepVM step) { ViewModel.Steps.VMList.Remove(step); } void MoveStepUp(AiPromptbausteinRoutineStepVM step) { swap(step, -1); } void MoveStepDown(AiPromptbausteinRoutineStepVM step) { swap(step, 1); } bool canDeleteStep(AiPromptbausteinRoutineStepVM step) { return step is object; } bool canMoveStepUp(AiPromptbausteinRoutineStepVM step) { return step is object && ViewModel.Steps.Count > 1 && ViewModel.Steps.VMList.First() != step; } bool canMoveStepDown(AiPromptbausteinRoutineStepVM step) { return step is object && ViewModel.Steps.Count > 1 && ViewModel.Steps.VMList.Last() != step; } protected override bool canSave() { return base.canSave() && !string.IsNullOrWhiteSpace(ViewModel.Title) && (ViewModel.Steps?.VMList.Any() ?? false); } protected override void Save() { var dc = ViewModel.CommitToDataContract(); if (ViewModel.IsNew) { ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinRoutine(dc), DataSave); } else { ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinRoutine(dc), DataSave); } } private void swap(AiPromptbausteinRoutineStepVM step_x, int offset_y) { var id_x = ViewModel.Steps.VMList.IndexOf(step_x); var id_y = id_x + offset_y; var step_y = ViewModel.Steps.VMList[id_y]; var prompt_x = step_x.PromptReference; var version_x = step_x.ReferenceVersion; var valid_x = step_x.IsValid; var prompt_y = step_y.PromptReference; var version_y = step_y.ReferenceVersion; var valid_y = step_y.IsValid; step_x.PromptReference = prompt_y; step_x.ReferenceVersion = version_y; step_x.SetIsValid(valid_y); step_y.PromptReference = prompt_x; step_y.ReferenceVersion = version_x; step_y.SetIsValid(valid_x); SelectedStep = step_y; } } }