using Hcs.Broker.Api.Request;
using Hcs.Service.Async.Nsi;

namespace Hcs.Broker.Api
{
    // http://open-gkh.ru/NsiService/
    public interface INsiApi
    {
        /// <summary>
        /// Возвращает данные справочника поставщика информации
        /// </summary>
        /// <param name="registryNumber">Реестровый номер справочника</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Данные справочника</returns>
        Task<IEnumerable<NsiItemType>> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);

        /// <summary>
        /// Запрашивает экспорт данных справочника поставщика информации
        /// </summary>
        /// <param name="registryNumber">Реестровый номер справочника</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Идентификатор сообщения операции экспорта</returns>
        Task<string> RequestExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default);

        /// <summary>
        /// Возвращает результат экспорта данных справочника поставщика информации
        /// </summary>
        /// <param name="messageGuid">Идентификатор сообщения операции экспорта</param>
        /// <returns>Результат запроса</returns>
        Task<RequestSingleResult<NsiItemType>> GetExportDataProviderNsiItemResultAsync(string messageGuid);
    }
}
