using DocumentService.Client.Interfaces; using DocumentService.Client.Models.Requests; using Microsoft.Extensions.Logging; using System.Net.Http; namespace DocumentService.Client.Clients; /// /// Implementation of ZUGFeRD client (detection and extraction). /// public class ZugferdClient(HttpClient httpClient, ILogger logger) : BaseDocumentClient(httpClient, logger), IZugferdClient { /// public async Task HasZugferdAsync(Stream pdfStream, CancellationToken cancellationToken = default) { var result = await SendMultipartAsync( "/api/pdf/zugferd/has-zugferd", pdfStream, "document.pdf", cancellationToken); return result ?? throw new InvalidOperationException("API returned null response"); } /// public async Task HasZugferdAsync(byte[] pdfBytes, CancellationToken cancellationToken = default) { var request = new HasZugferdRequest { Base64Pdf = ToBase64(pdfBytes) }; var result = await SendJsonAsync( "/api/pdf/zugferd/has-zugferd", request, cancellationToken); return result ?? throw new InvalidOperationException("API returned null response"); } /// public async Task ExtractZugferdAsync(Stream pdfStream, CancellationToken cancellationToken = default) { // asFile=true returns the XML file directly (application/xml stream) return await SendMultipartForStreamAsync( "/api/pdf/zugferd/extract?asFile=true", pdfStream, "document.pdf", cancellationToken); } /// public async Task ExtractZugferdAsync(byte[] pdfBytes, CancellationToken cancellationToken = default) { var request = new ExtractZugferdRequest { Base64Pdf = ToBase64(pdfBytes) }; // format=file returns the XML file directly (application/xml stream) return await SendJsonForStreamAsync( "/api/pdf/zugferd/extract?format=file", request, cancellationToken); } /// public async Task ExtractZugferdAsResultAsync(Stream pdfStream, CancellationToken cancellationToken = default) { // asFile=false returns JSON with metadata + XML content var result = await SendMultipartAsync( "/api/pdf/zugferd/extract?asFile=false", pdfStream, "document.pdf", cancellationToken); return result ?? throw new InvalidOperationException("API returned null response"); } /// public async Task ExtractZugferdAsResultAsync(byte[] pdfBytes, CancellationToken cancellationToken = default) { var request = new ExtractZugferdRequest { Base64Pdf = ToBase64(pdfBytes) }; // format=json returns JSON with metadata + XML content var result = await SendJsonAsync( "/api/pdf/zugferd/extract?format=json", request, cancellationToken); return result ?? throw new InvalidOperationException("API returned null response"); } }