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

namespace Hcs.Broker.Api
{
    // http://open-gkh.ru/NsiCommonService/
    public interface INsiCommonApi
    {
        /// <summary>
        /// Возвращает данные общесистемного справочника
        /// </summary>
        /// <param name="registryNumber">Реестровый номер справочника</param>
        /// <param name="listGroup">Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Данные общесистемного справочника</returns>
        Task<NsiItemType> ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default);

        /// <summary>
        /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них
        /// </summary>
        /// <param name="listGroup">Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Перечень общесистемных справочников</returns>
        Task<NsiListType> ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default);

        /// <summary>
        /// Запрашивает экспорт данных общесистемного справочника
        /// </summary>
        /// <param name="registryNumber">Реестровый номер справочника</param>
        /// <param name="listGroup">Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Идентификатор сообщения операции экспорта</returns>
        Task<string> RequestExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default);

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