using System.Text.Json.Serialization; namespace DocumentAutomation.Shared; public sealed record InspectionWarning { public required string Code { get; init; } public required string Message { get; init; } public string? Part { get; init; } public string? Location { get; init; } public string? MatchedValue { get; init; } public string? DetectionRule { get; init; } } public sealed record DocumentFieldInfo { public required string Type { get; init; } public required string Part { get; init; } public int? Section { get; init; } public string? Instruction { get; init; } } public sealed record DocumentImageSummary { public int RasterImages { get; init; } public int DrawingObjects { get; init; } public int VmlShapes { get; init; } public int ExternalImages { get; init; } } public sealed record DocumentStyleInfo { public required string StyleId { get; init; } public string? Name { get; init; } public string? Type { get; init; } public bool IsDefault { get; init; } public string? BasedOn { get; init; } public string? LinkedStyle { get; init; } public int UsageCount { get; init; } } public sealed record SectionPartAssignment { public required int Section { get; init; } public IReadOnlyList Headers { get; init; } = []; public IReadOnlyList Footers { get; init; } = []; public bool LinkToPrevious { get; init; } } public sealed record InsertionPointInfo { public required string Type { get; init; } public string? Location { get; init; } } public enum SectionBreakPolicy { Remove, ConvertToParagraph, ConvertToPageBreak } public enum RevisionImportPolicy { PreserveAndWarn, AcceptAll, RejectAll, BlockImport } public enum CommentImportPolicy { PreserveAndWarn, Exclude, BlockImport } public enum StyleConflictPolicy { KeepSourceFormatting, UseDestinationStyles, MapKnownStyles } public sealed record WordOperationProgress { public required string Stage { get; init; } public string? Message { get; init; } public int? Percent { get; init; } } public sealed record BodyImportPlan { public required int ParagraphCount { get; init; } public required int TableCount { get; init; } public required int InlineShapeCount { get; init; } public required int FloatingShapeCount { get; init; } public required int InternalSectionBreakCount { get; init; } public required int PageBreakCount { get; init; } public required IReadOnlyList IncludedStories { get; init; } public required IReadOnlyList ExcludedStories { get; init; } public required IReadOnlyList Warnings { get; init; } } public sealed record DocxBodyImportRequest { public required string SourcePath { get; init; } public required object DestinationRangeHandle { get; init; } public SectionBreakPolicy SectionBreakPolicy { get; init; } = SectionBreakPolicy.ConvertToPageBreak; public RevisionImportPolicy RevisionPolicy { get; init; } = RevisionImportPolicy.PreserveAndWarn; public CommentImportPolicy CommentPolicy { get; init; } = CommentImportPolicy.Exclude; public StyleConflictPolicy StyleConflictPolicy { get; init; } = StyleConflictPolicy.KeepSourceFormatting; } public sealed record BodyImportResult { public required BodyImportPlan Plan { get; init; } public required string InsertionMode { get; init; } public required IReadOnlyList Warnings { get; init; } } public sealed record DocumentInspectionResult { public required string FilePath { get; init; } public long FileSize { get; init; } public DateTime LastWriteTimeUtc { get; init; } public int Sections { get; init; } public int Paragraphs { get; init; } public int Tables { get; init; } public int Images { get; init; } public DocumentImageSummary ImageSummary { get; init; } = new(); public int Headers { get; init; } public int Footers { get; init; } public bool HasPageFields { get; init; } public bool HasNumPagesFields { get; init; } public bool HasSectionPagesFields { get; init; } public IReadOnlyList Fields { get; init; } = []; public int Bookmarks { get; init; } public int ContentControls { get; init; } public int Comments { get; init; } public bool HasTrackedChanges { get; init; } public bool HasProtectedParts { get; init; } public IReadOnlyList StyleDetails { get; init; } = []; public IReadOnlyList SectionAssignments { get; init; } = []; public InsertionPointInfo InsertionPoint { get; init; } = new() { Type = "None" }; public BodyImportPlan? BodyImportPlan { get; init; } public IReadOnlyList Warnings { get; init; } = []; public IReadOnlyList Styles => StyleDetails.Select(x => x.StyleId).ToArray(); } public sealed record WordDocumentBuildRequest { public required string TemplatePath { get; init; } public required string BodyPath { get; init; } public required string OutputDocxPath { get; init; } public string? RulesProfilePath { get; init; } public bool PreserveBodyFormatting { get; init; } = true; public bool PreservePageBreaks { get; init; } = true; } public sealed record WordDocumentResult { public required string OutputDocxPath { get; init; } public string? OutputPdfPath { get; init; } public required string LogPath { get; init; } public required TimeSpan Duration { get; init; } public required string InsertionPoint { get; init; } public BodyImportResult? BodyImport { get; init; } } public sealed record WordPreviewResult { public required string PdfPath { get; init; } public required TimeSpan Duration { get; init; } } public enum RuleEvaluationStatus { Pass, Fail, NotApplicable, NeedsReview, Error } public sealed record RuleEvaluationResult { public required string RuleId { get; init; } public required RuleEvaluationStatus Status { get; init; } public required string Message { get; init; } public string? ClauseId { get; init; } public int? SourcePage { get; init; } public string? DocumentLocation { get; init; } public bool CanAutoFix { get; init; } } public sealed record OllamaSettings { public string BaseUrl { get; init; } = "http://192.168.200.112:11434"; public string Model { get; init; } = ""; public int TimeoutSeconds { get; init; } = 120; }