using AsbCloudApp.Data;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace AsbCloudApp.Services
{
    /// <summary>
    /// Сервис "Дело скважины"
    /// </summary>
    public interface IWellFinalDocumentsService
    {
        /// <summary>
        /// Обновление записей дела скважины
        /// </summary>
        /// <param name="idWell"></param>
        /// <param name="dtos"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task<int> UpdateRangeAsync(int idWell, IEnumerable<WellFinalDocumentInputDto>? dtos, CancellationToken token);

        /// <summary>
        /// Получение истории файлов
        /// </summary>
        /// <param name="idWell"></param>
        /// <param name="idCategory"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task<WellFinalDocumentsHistoryDto> GetFilesHistoryByIdCategoryAsync(int idWell, int idCategory, CancellationToken token);

        /// <summary>
        /// Сохранение файла
        /// </summary>
        /// <param name="idWell"></param>
        /// <param name="idCategory"></param>
        /// <param name="idUser">пользователь, который сохраняет файл</param>
        /// <param name="fileStream"></param>
        /// <param name="fileName"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task<int> SaveCategoryFileAsync(int idWell, int idCategory, int idUser, Stream fileStream, string fileName, CancellationToken token);

        /// <summary>
        /// Повторно оповестить ответственных за загрузку
        /// </summary>
        /// <param name="idWell"></param>
        /// <param name="idUser">запрашивающий пользователь, для проверки его прав и текста сообщения</param>
        /// <param name="idCategory"></param>
        /// <param name="token"></param>
        /// <returns>count of notified publishers</returns>
        Task<int> ReNotifyPublishersAsync(int idWell, int idUser, int idCategory, CancellationToken token);
    }
}