namespace AIImages.Models
{
    /// <summary>
    /// Запрос на генерацию изображения
    /// </summary>
    public class GenerationRequest
    {
        public string Prompt { get; set; }
        public string NegativePrompt { get; set; }
        public int Steps { get; set; }
        public float CfgScale { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public string Sampler { get; set; }
        public string Scheduler { get; set; }
        public int Seed { get; set; }
        public string Model { get; set; }
        public bool SaveImagesToServer { get; set; }
    }

    /// <summary>
    /// Результат генерации изображения
    /// </summary>
    public class GenerationResult
    {
        public bool Success { get; set; }
        public byte[] ImageData { get; set; }
        public string ErrorMessage { get; set; }
        public string SavedPath { get; set; }
        public GenerationRequest Request { get; set; }

        public static GenerationResult Failure(string error)
        {
            return new GenerationResult { Success = false, ErrorMessage = error };
        }

        public static GenerationResult SuccessResult(
            byte[] imageData,
            string savedPath,
            GenerationRequest request
        )
        {
            return new GenerationResult
            {
                Success = true,
                ImageData = imageData,
                SavedPath = savedPath,
                Request = request,
            };
        }
    }

    /// <summary>
    /// Прогресс генерации изображения
    /// </summary>
    public class GenerationProgress
    {
        /// <summary>
        /// Процент завершения (0.0 - 1.0)
        /// </summary>
        public double Progress { get; set; }

        /// <summary>
        /// Текущий шаг
        /// </summary>
        public int CurrentStep { get; set; }

        /// <summary>
        /// Общее количество шагов
        /// </summary>
        public int TotalSteps { get; set; }

        /// <summary>
        /// Оставшееся время в секундах (приблизительно)
        /// </summary>
        public double EtaRelative { get; set; }

        /// <summary>
        /// Идет ли генерация в данный момент
        /// </summary>
        public bool IsActive { get; set; }

        /// <summary>
        /// Превью текущего состояния генерации (base64)
        /// </summary>
        public string CurrentImage { get; set; }
    }
}
