using System;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Threading;
using System.Threading.Tasks;
using DynamicData.Binding;
using StabilityMatrix.Avalonia.Models;
using StabilityMatrix.Core.Inference;
using StabilityMatrix.Core.Models;
using StabilityMatrix.Core.Models.Api.Comfy;
using StabilityMatrix.Core.Models.FileInterfaces;
namespace StabilityMatrix.Avalonia.Services;
public interface IInferenceClientManager : IDisposable, INotifyPropertyChanged, INotifyPropertyChanging
{
ComfyClient? Client { get; set; }
///
/// Whether the client is connected
///
[MemberNotNullWhen(true, nameof(Client))]
bool IsConnected { get; }
///
/// Whether the client is connecting
///
bool IsConnecting { get; }
///
/// Whether the user can initiate a connection
///
bool CanUserConnect { get; }
///
/// Whether the user can initiate a disconnection
///
bool CanUserDisconnect { get; }
IObservableCollection Models { get; }
IObservableCollection VaeModels { get; }
IObservableCollection ControlNetModels { get; }
IObservableCollection PromptExpansionModels { get; }
IObservableCollection Samplers { get; }
IObservableCollection Upscalers { get; }
IObservableCollection Schedulers { get; }
IObservableCollection Preprocessors { get; }
Task CopyImageToInputAsync(FilePath imageFile, CancellationToken cancellationToken = default);
Task UploadInputImageAsync(ImageSource image, CancellationToken cancellationToken = default);
Task WriteImageToInputAsync(ImageSource imageSource, CancellationToken cancellationToken = default);
Task ConnectAsync(CancellationToken cancellationToken = default);
Task ConnectAsync(PackagePair packagePair, CancellationToken cancellationToken = default);
Task CloseAsync();
}