namespace PARR.Core.Common.Interfaces
{
    /// <summary>
    /// Отслеживание програсса (% от задачи)
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IProgressAsync<T>
    {
        /// <summary>
        /// Установить значение програсса (%)
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        Task ReportAsync(T value);
    }

    /// <summary>
    /// Отслеживание програсса (% от задачи)
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class ProgressAsync<T> : IProgressAsync<T>
    {
        private readonly Func<T, Task> _handler;

        /// <summary>
        /// Отслеживание програсса (% от задачи)
        /// </summary>
        /// <param name="handler"></param>
        public ProgressAsync(Func<T, Task> handler)
        {
            _handler = handler;
        }

        public Task ReportAsync(T value)
        {
            return _handler(value);
        }
    }

}
