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; } }