using Hcs.Broker.Api.Payload.Bills;
using Hcs.Service.Async.Bills;

namespace Hcs.Broker.Api
{
    // http://open-gkh.ru/BillsServiceAsync/
    public interface IBillsApi
    {
        /// <summary>
        /// Экспорт платежных документов
        /// </summary>
        /// <param name="paymentDocumentID">Идентификатор платежного документа</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Платежные документы</returns>
        Task<IEnumerable<exportPaymentDocumentResultType>> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default);

        /// <summary>
        /// Экспорт платежных документов
        /// </summary>
        /// <param name="year">Год</param>
        /// <param name="month">Месяц</param>
        /// <param name="fiasHouseGuid">Глобальный уникальный идентификатор дома по ФИАС</param>
        /// <param name="accountNumber">Номер лицевого счета/иной идентификатор плательщика</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Платежные документы</returns>
        Task<IEnumerable<exportPaymentDocumentResultType>> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default);

        /// <summary>
        /// Экспорт платежных документов
        /// </summary>
        /// <param name="year">Год</param>
        /// <param name="month">Месяц</param>
        /// <param name="fiasHouseGuid">Глобальный уникальный идентификатор дома по ФИАС</param>
        /// <param name="paymentDocumentNumber">Номер платежного документа, по которому внесена плата,
        /// присвоенный такому документу исполнителем в целях осуществления расчетов по внесению платы</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>Платежные документы</returns>
        Task<IEnumerable<exportPaymentDocumentResultType>> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default);

        /// <summary>
        /// Импорт сведений о платежных документах
        /// </summary>
        /// <param name="payload">Пейлоад сведений о платежных документах</param>
        /// <param name="token">Токен отмены</param>
        /// <returns>true, если операция выполнена успешно, иначе - false</returns>
        Task<bool> ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default);
    }
}
