namespace PlotLine.Models; public static class StoryIntelligenceNarrativeCandidateTypes { public const string PlotLine = "PlotLine"; public const string Thread = "Thread"; } public static class StoryIntelligenceNarrativeCandidateStatuses { public const string Pending = "Pending"; public const string Accepted = "Accepted"; public const string Rejected = "Rejected"; public const string Merged = "Merged"; } public static class StoryIntelligenceNarrativeReviewActions { public const string AcceptNew = "AcceptNew"; public const string MergeExisting = "MergeExisting"; public const string Reject = "Reject"; } public sealed class StoryIntelligenceNarrativeCandidate { public int NarrativeCandidateID { get; set; } public int ProjectID { get; set; } public int BookID { get; set; } public string CandidateType { get; set; } = string.Empty; public string CandidateKey { get; set; } = string.Empty; public string ProposedTitle { get; set; } = string.Empty; public string? ProposedDescription { get; set; } public string? Category { get; set; } public string? InferredState { get; set; } public int? ExistingPlotLineID { get; set; } public string? ExistingPlotLineName { get; set; } public int? ExistingPlotThreadID { get; set; } public string? ExistingPlotThreadTitle { get; set; } public int? RelatedPlotLineID { get; set; } public string? RelatedPlotLineName { get; set; } public decimal? Confidence { get; set; } public string Status { get; set; } = StoryIntelligenceNarrativeCandidateStatuses.Pending; public string? ReviewAction { get; set; } public int? AcceptedPlotLineID { get; set; } public string? AcceptedPlotLineName { get; set; } public int? AcceptedPlotThreadID { get; set; } public string? AcceptedPlotThreadTitle { get; set; } public int? ReviewedByUserID { get; set; } public DateTime? ReviewedUtc { get; set; } public DateTime CreatedUtc { get; set; } public DateTime UpdatedUtc { get; set; } public IReadOnlyList Evidence { get; set; } = []; } public sealed class StoryIntelligenceNarrativeCandidateEvidence { public int NarrativeCandidateEvidenceID { get; set; } public int NarrativeCandidateID { get; set; } public int SceneID { get; set; } public decimal SceneNumber { get; set; } public string SceneTitle { get; set; } = string.Empty; public decimal ChapterNumber { get; set; } public string ChapterTitle { get; set; } = string.Empty; public string? ContributionType { get; set; } public string? Evidence { get; set; } public int SortOrder { get; set; } public DateTime CreatedUtc { get; set; } } public sealed class StoryIntelligenceNarrativeCandidateSeed { public int ProjectID { get; init; } public int BookID { get; init; } public string CandidateType { get; init; } = string.Empty; public string CandidateKey { get; init; } = string.Empty; public string ProposedTitle { get; init; } = string.Empty; public string? ProposedDescription { get; init; } public string? Category { get; init; } public string? InferredState { get; init; } public int? ExistingPlotLineID { get; init; } public int? ExistingPlotThreadID { get; init; } public int? RelatedPlotLineID { get; init; } public decimal? Confidence { get; init; } }