using AsbCloudApp.Data;
using System.Collections.Generic;

namespace AsbCloudApp.Services
{
    /// <summary>
    /// Делегат обновления состояния задачи
    /// </summary>
    /// <param name="job"></param>
    public delegate void OnJobProgressDelagate(JobDto job);

    /// <summary>
    /// Сервис прореживания архива БД.
    /// Удаляет часть телеметрии.
    /// Понижает частоту записей в БД с 1 запись за 1 сек до 1 запись за N сек.
    /// </summary>
    public interface IReduceSamplingService
    {
        /// <summary>
        /// Получить все задания. Задания удаляются минимум через 10 сек после выполнения, возможно позднее.
        /// </summary>
        /// <returns>Enumerable of JobDto or empty</returns>
        IEnumerable<JobDto> GetJobs();

        /// <summary>
        /// Получить состояние определенной задачи
        /// </summary>
        /// <param name="idTelemetry"></param>
        /// <returns></returns>
        JobDto? GetOrDefaultState(int idTelemetry);

        /// <summary>
        /// Создать задачу прореживанию архива и добавить её в очередь на выполнение
        /// </summary>
        /// <param name="idTelemetry">телеметрия для прореживания</param>
        /// <param name="onProgress">колбек процесса выполнения</param>
        /// <param name="jobDto">созданная задача или задача из очереди</param>
        /// <returns>задача добавлена == true</returns>
        bool TryEnqueueRediceSamplingJob(int idTelemetry, OnJobProgressDelagate onProgress, out JobDto jobDto);
    }
}