using IdokladSdk.Enums;
using IdokladSdk.Models.Attachment;
using IdokladSdk.Models.Webhook;
using Idoklad.Client;
namespace Idoklad.Services;
///
/// Integration / utility agendas: webhooks, notifications, change log, registered sales (EET),
/// unpaired documents, attachments and the system code books.
///
public sealed class IntegrationService
{
private readonly IdokladApiAccessor _accessor;
public IntegrationService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Webhooks ----
public Task ListWebhooksAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.WebhookClient.List().ToPageAsync(page, pageSize, ct);
public Task WebhookDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.WebhookClient.Detail(id).ToDetailAsync(ct);
public async Task CreateWebhookAsync(AgendaWebhookSettingsPostModel model, CancellationToken ct)
=> (await _accessor.Api.WebhookClient.PostAsync(model, ct)).Unwrap();
public async Task DeleteWebhookAsync(int id, CancellationToken ct)
=> (await _accessor.Api.WebhookClient.DeleteAsync(id, ct)).Unwrap();
// ---- Notifications ----
public Task ListNotificationsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.NotificationClient.List().ToPageAsync(page, pageSize, ct);
public async Task DeleteNotificationAsync(int id, CancellationToken ct)
=> (await _accessor.Api.NotificationClient.DeleteAsync(id, ct)).Unwrap();
// ---- Change log ----
public Task ListLogAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.LogClient.List().ToPageAsync(page, pageSize, ct);
// ---- Registered sales (EET) ----
public Task ListRegisteredSalesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.RegisteredSaleClient.List().ToPageAsync(page, pageSize, ct);
public async Task RegisteredSaleDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.RegisteredSaleClient.DefaultAsync(ct)).Unwrap();
// ---- Unpaired documents ----
public Task ListUnpairedDocumentsAsync(
MovementType movementType, PairingDocumentType pairingDocumentType, int page, int pageSize, CancellationToken ct)
=> _accessor.Api.UnpairedDocumentClient.List(movementType, pairingDocumentType).ToPageAsync(page, pageSize, ct);
// ---- Attachments ----
public async Task GetAttachmentAsync(int attachmentId, bool compressed, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.GetAsync(attachmentId, compressed, ct)).Unwrap();
public async Task GetDocumentAttachmentsAsync(int documentId, AttachmentDocumentType documentType, bool compressed, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.GetAsync(documentId, documentType, compressed, ct)).Unwrap();
public async Task UploadAttachmentAsync(AttachmentUploadModel model, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.UploadAsync(model, ct)).Unwrap();
public async Task DeleteAttachmentAsync(int attachmentId, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.DeleteAsync(attachmentId, ct)).Unwrap();
public async Task DeleteDocumentAttachmentsAsync(int documentId, AttachmentDocumentType documentType, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.DeleteAsync(documentId, documentType, ct)).Unwrap();
// ---- System code books ----
public Task CodeBooksAsync(CancellationToken ct)
=> _accessor.Api.SystemClient.CodeBooks().ToDetailAsync(ct);
public Task CodeBooksChangesAsync(DateTime lastCheck, CancellationToken ct)
=> _accessor.Api.SystemClient.CodeBooksChanges(lastCheck).ToDetailAsync(ct);
}