using DocumentService.Client.Models.Requests;
namespace DocumentService.Client.Interfaces;
///
/// Client for PDF operations (merge, annotate, stamp).
///
public interface IPdfOperationsClient
{
// ==================== MERGE OPERATIONS ====================
///
/// Merges multiple PDFs (multipart).
///
/// PDF file streams to merge
/// Optional page ranges per PDF (e.g., "1-3,5")
/// Cancellation token
/// Merged PDF as stream
Task MergeAsync(IEnumerable pdfStreams, List? pageRanges = null, CancellationToken cancellationToken = default);
///
/// Merges multiple PDFs (Base64).
///
/// PDF files as byte arrays
/// Optional page ranges per PDF (e.g., "1-3,5")
/// Cancellation token
/// Merged PDF as stream
Task MergeAsync(IEnumerable pdfByteArrays, List? pageRanges = null, CancellationToken cancellationToken = default);
// ==================== ANNOTATION OPERATIONS ====================
///
/// Adds annotation to PDF (multipart).
///
/// PDF file stream
/// Annotation request with coordinates and style
/// Cancellation token
/// Annotated PDF as stream
Task AnnotateAsync(Stream pdfStream, AddAnnotationBase64Request request, CancellationToken cancellationToken = default);
///
/// Adds annotation to PDF (Base64).
///
/// PDF file as byte array
/// Annotation request with coordinates and style
/// Cancellation token
/// Annotated PDF as stream
Task AnnotateAsync(byte[] pdfBytes, AddAnnotationBase64Request request, CancellationToken cancellationToken = default);
// ==================== STAMP OPERATIONS ====================
///
/// Adds stamp to PDF (multipart).
///
/// PDF file stream
/// Stamp request with position and style
/// Cancellation token
/// Stamped PDF as stream
Task StampAsync(Stream pdfStream, AddStampBase64Request request, CancellationToken cancellationToken = default);
///
/// Adds stamp to PDF (Base64).
///
/// PDF file as byte array
/// Stamp request with position and style
/// Cancellation token
/// Stamped PDF as stream
Task StampAsync(byte[] pdfBytes, AddStampBase64Request request, CancellationToken cancellationToken = default);
}