using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using AIImages.Models;

namespace AIImages.Services
{
    /// <summary>
    /// Интерфейс сервиса для работы с Stable Diffusion API
    /// </summary>
    public interface IStableDiffusionApiService
    {
        /// <summary>
        /// Генерирует изображение на основе запроса
        /// </summary>
        Task<GenerationResult> GenerateImageAsync(
            GenerationRequest request,
            CancellationToken cancellationToken = default
        );

        /// <summary>
        /// Получает прогресс текущей генерации
        /// </summary>
        Task<GenerationProgress> GetProgressAsync(CancellationToken cancellationToken = default);

        /// <summary>
        /// Проверяет доступность API
        /// </summary>
        Task<bool> CheckApiAvailability(
            string apiEndpoint,
            CancellationToken cancellationToken = default
        );

        /// <summary>
        /// Получает список доступных моделей с API
        /// </summary>
        Task<List<string>> GetAvailableModels(
            string apiEndpoint,
            CancellationToken cancellationToken = default
        );

        /// <summary>
        /// Получает список доступных сэмплеров
        /// </summary>
        Task<List<string>> GetAvailableSamplers(
            string apiEndpoint,
            CancellationToken cancellationToken = default
        );

        /// <summary>
        /// Получает список доступных schedulers
        /// </summary>
        Task<List<string>> GetAvailableSchedulers(
            string apiEndpoint,
            CancellationToken cancellationToken = default
        );
    }
}
