using DocumentService.Client.Models.ValueObjects;
namespace DocumentService.Client.Models.Requests;
///
/// Request DTO for Base64-encoded PDF merge operation
///
public record MergePdfsBase64Request
{
///
/// Array of Base64-encoded PDF files (minimum 2 required)
///
/// ["JVBERi0xLjQK...", "JVBERi0xLjQK..."]
public required List Base64Pdfs { get; init; }
///
/// Optional page ranges per PDF (null = all pages).
/// Format: "1-3,5" means pages 1, 2, 3, and 5.
/// If provided, array length must match Base64Pdfs length.
///
/// ["1-2", "1,3,5", null]
public List? PageRanges { get; init; }
}
///
/// Request DTO for Base64-encoded PDF annotation
///
public record AddAnnotationBase64Request
{
///
/// Base64-encoded PDF file
///
/// "JVBERi0xLjQK..."
public required string Base64Pdf { get; init; }
///
/// Type of annotation to add
///
/// TextMarkup
public required AnnotationType AnnotationType { get; init; }
///
/// Target page number (1-indexed)
///
/// 1
public required int PageNumber { get; init; }
///
/// Rectangle X1 coordinate (left)
///
/// 100.0
public required double X1 { get; init; }
///
/// Rectangle Y1 coordinate (top or bottom depending on Origin)
///
/// 100.0
public required double Y1 { get; init; }
///
/// Rectangle X2 coordinate (right). Optional if Width is provided.
///
/// 200.0
public double? X2 { get; init; }
///
/// Rectangle Y2 coordinate (bottom or top depending on Origin). Optional if Height is provided.
///
/// 120.0
public double? Y2 { get; init; }
///
/// Rectangle width. Alternative to X2 (X2 = X1 + Width). Optional if X2 is provided.
///
/// 100.0
public double? Width { get; init; }
///
/// Rectangle height. Alternative to Y2 (Y2 = Y1 + Height). Optional if Y2 is provided.
///
/// 20.0
public double? Height { get; init; }
///
/// Annotation content (required for FreeText and StickyNote)
///
/// "Important text to highlight"
public string? Content { get; init; }
///
/// Author name (optional)
///
/// "John Doe"
public string? Author { get; init; }
///
/// Hex color (6 digits, e.g., "FF0000" for red). Optional - defaults vary by annotation type.
///
/// "FFFF00"
public string? Color { get; init; }
///
/// Text markup style (Highlight, Underline, or Strikeout). Required for TextMarkup annotations.
///
/// Highlight
public TextMarkupStyle? TextMarkupStyle { get; init; }
///
/// Coordinate origin (BottomLeft = PDF native, TopLeft = UI-friendly). Default: BottomLeft
///
/// BottomLeft
public AnnotationOrigin Origin { get; init; } = AnnotationOrigin.BottomLeft;
}
///
/// Request DTO for Base64-encoded PDF stamp operation
///
public record AddStampBase64Request
{
///
/// Base64-encoded PDF file
///
/// "JVBERi0xLjQK..."
public required string Base64Pdf { get; init; }
///
/// Type of stamp (Text, Image, or Predefined)
///
/// Text
public required StampType StampType { get; init; }
///
/// Target page numbers (1-indexed). Null or empty = all pages.
///
/// [1, 3, 5]
public int[]? PageNumbers { get; init; }
///
/// Stamp position X coordinate
///
/// 100.0
public required double X { get; init; }
///
/// Stamp position Y coordinate
///
/// 100.0
public required double Y { get; init; }
///
/// Stamp width (optional, auto-size for images if not specified)
///
/// 200.0
public double? Width { get; init; }
///
/// Stamp height (optional, auto-size for images if not specified)
///
/// 50.0
public double? Height { get; init; }
///
/// Coordinate origin (BottomLeft = PDF native, TopLeft = UI-friendly). Default: BottomLeft
///
/// BottomLeft
public AnnotationOrigin Origin { get; init; } = AnnotationOrigin.BottomLeft;
///
/// Text content (required for Text stamps)
///
/// "CONFIDENTIAL"
public string? Text { get; init; }
///
/// Font name (default: Arial)
///
/// "Arial"
public string? FontName { get; init; }
///
/// Font size in points (default: 12)
///
/// 24.0
public double? FontSize { get; init; }
///
/// Hex color (6 digits, e.g., "FF0000" for red, default: "000000")
///
/// "FF0000"
public string? Color { get; init; }
///
/// Opacity (0.0 = transparent, 1.0 = opaque, default: 0.5)
///
/// 0.5
public double? Opacity { get; init; }
///
/// Rotation angle in degrees (0-360, default: 0)
///
/// 45.0
public double? Rotation { get; init; }
///
/// Stamp placement (Foreground = on top, Background = watermark effect, default: Foreground)
///
/// Foreground
public StampPlacement Placement { get; init; } = StampPlacement.Foreground;
///
/// Base64-encoded image (required for Image stamps, PNG/JPEG)
///
/// "iVBORw0KGgoAAAANSUhEUgAA..."
public string? Base64Image { get; init; }
///
/// Predefined stamp type (required for Predefined stamps)
///
/// Confidential
public PredefinedStampType? PredefinedType { get; init; }
}