using AsbCloudApp.Data.SAUB;
using SignalRSwaggerGen.Attributes;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace AsbCloudWebApi.SignalR.Clients
{
    /// <summary>
    /// Hub по работе с телеметрией
    /// </summary>
    [SignalRHub]
    public interface ITelemetryHubClient
    {
        /// <summary>
        /// Отправка клиенту уведомления о доставке с панели drill test данных.
        /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}"
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task ReceiveDrilltestData(DrillTestDto dto, CancellationToken token);

        /// <summary>
        /// Обновление записей РТК
        /// Для подписки на метод необходимо отправить сообщение "ProcessMapWellDrilling" 
        /// </summary>
        /// <param name="dtos"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task UpdateProcessMap(IEnumerable dtos, CancellationToken token);

        /// <summary>
        /// Отправка сауб-данных клиенту.
        /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" 
        /// </summary>
        /// <param name="dtos"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task ReceiveDataSaub(IEnumerable<TelemetryDataSaubDto> dtos, CancellationToken token);

        /// <summary>
        /// Отправка спин-данных клиенту.
        /// Для подписки на метод необходимо отправить сообщение в формате $"well_{idWell}" 
        /// </summary>
        /// <param name="dtos"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task ReceiveDataSpin(IEnumerable<TelemetryDataSpinDto> dtos, CancellationToken token);

    }
}