using PlotLine.Models; namespace PlotLine.ViewModels; public sealed class IllustrationLibraryAdminViewModel { public IllustrationLibraryFilter Filter { get; init; } = new(); public IllustrationLibrarySummary Summary { get; init; } = new(); public IReadOnlyList Items { get; init; } = []; public IReadOnlyList Categories { get; init; } = IllustrationLibraryCategories.All; public IReadOnlyList Statuses { get; init; } = [ IllustrationLibraryStatuses.Planned, IllustrationLibraryStatuses.Queued, IllustrationLibraryStatuses.Generating, IllustrationLibraryStatuses.Generated, IllustrationLibraryStatuses.Approved, IllustrationLibraryStatuses.Rejected, IllustrationLibraryStatuses.Failed, IllustrationLibraryStatuses.Superseded, IllustrationLibraryStatuses.Disabled ]; public int StarterCharacterCount { get; init; } public int StarterLocationCount { get; init; } public int StarterAssetCount { get; init; } public IllustrationStarterGenerationPlan StarterGenerationPlan { get; init; } = new(0, 0, 0); public string StoragePathHint { get; init; } = "/uploads/story-intelligence-library"; public string ProviderStatus { get; init; } = string.Empty; public int CompletedTotal => Summary.GeneratedCount + Summary.ApprovedCount + Summary.FailedCount + Summary.SupersededCount; } public sealed class IllustrationLibraryQueueForm { public bool Confirmed { get; set; } public string? Category { get; set; } public string? Status { get; set; } public string? Search { get; set; } } public sealed class IllustrationLibraryBulkRetryForm { public string? Category { get; set; } public string? Status { get; set; } public string? Search { get; set; } } public sealed class IllustrationStarterGenerationForm { public bool Confirmed { get; set; } } public sealed class IllustrationLibraryRejectForm { public string? Reason { get; set; } public string? Category { get; set; } public string? Status { get; set; } public string? Search { get; set; } } public sealed class IllustrationLibraryMetadataForm { public string? DisplayTitle { get; set; } public string? ShortDescription { get; set; } public string? MetadataJson { get; set; } public string? AdminNotes { get; set; } public string? Category { get; set; } public string? Status { get; set; } public string? Search { get; set; } }