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

namespace AsbCloudApp.Services
{
    /// <summary>
    /// сервис пользователей телеметрии
    /// </summary>
    public interface ITelemetryUserService
    {
        /// <summary>
        /// get user by ids
        /// </summary>
        /// <param name="idTelemetry"></param>
        /// <param name="idUser"></param>
        /// <returns></returns>
        TelemetryUserDto? GetOrDefault(int idTelemetry, int idUser);

        /// <summary>
        /// get users by id telemetry and predicate
        /// </summary>
        /// <param name="idTelemetry"></param>
        /// <param name="predicate"></param>
        /// <returns></returns>
        IEnumerable<TelemetryUserDto> GetUsers(int idTelemetry, Func<TelemetryUserDto, bool>? predicate = default);

        /// <summary>
        /// получает и сохраняет/обновляет список пользователей панели оператора
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="dtos"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task UpsertAsync(string uid, IEnumerable<TelemetryUserDto> dtos, CancellationToken token = default);
    }
}