using Hcs.Client.Api.Request.Exception;
using Hcs.Client.Api.Request.NsiCommon;
using Hcs.Service.Async.NsiCommon;
using System.Threading;
using System.Threading.Tasks;

namespace Hcs.Client.Api
{
    // http://open-gkh.ru/NsiCommonService/
    public class NsiCommonApi(ClientBase client) : ApiBase(client)
    {
        /// <summary>
        /// Возвращает данные общесистемного справочника
        /// </summary>
        /// <param name="registryNumber">Реестровый номер справочника</param>
        /// <param name="listGroup">Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Данные общесистемного справочника</returns>
        public async Task<NsiItemType> ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default)
        {
            try
            {
                var request = new ExportNsiItemRequest(client);
                return await request.ExecuteAsync(registryNumber, listGroup, token);
            }
            catch (NoResultsRemoteException)
            {
                return null;
            }
        }

        /// <summary>
        /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них
        /// </summary>
        /// <param name="listGroup">Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Перечень общесистемных справочников</returns>
        public async Task<NsiListType> ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default)
        {
            try
            {
                var request = new ExportNsiListRequest(client);
                return await request.ExecuteAsync(listGroup, token);
            }
            catch (NoResultsRemoteException)
            {
                return null;
            }
        }
    }
}
