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 MergeCandidate = "MergeCandidate"; 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 string? ChangeType { get; set; } public string? Significance { get; set; } public int? ExistingPlotLineID { get; set; } public string? ExistingPlotLineName { get; set; } public int? ExistingPlotThreadID { get; set; } public string? ExistingPlotThreadTitle { get; set; } public int? WholeBookPlotSynthesisRunID { get; set; } public int? AuthorPlotSeedID { get; set; } public decimal? ExistingPlotLineMatchConfidence { get; set; } public string? ExistingPlotLineMatchReason { get; set; } public decimal? SeedMatchConfidence { get; set; } public string? SeedMatchReason { get; set; } public string? Source { get; set; } public int? RelatedPlotLineID { get; set; } public string? RelatedPlotLineName { get; set; } public string? ParentCandidateKey { get; set; } public int? ParentNarrativeCandidateID { get; set; } public string? ParentCandidateTitle { get; set; } public int? MergeTargetNarrativeCandidateID { 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 IReadOnlyList Events { 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 string? ChangeType { get; init; } public string? Significance { get; init; } public int? ExistingPlotLineID { get; init; } public int? ExistingPlotThreadID { get; init; } public int? WholeBookPlotSynthesisRunID { get; init; } public int? AuthorPlotSeedID { get; init; } public decimal? ExistingPlotLineMatchConfidence { get; init; } public string? ExistingPlotLineMatchReason { get; init; } public decimal? SeedMatchConfidence { get; init; } public string? SeedMatchReason { get; init; } public string? Source { get; init; } public int? RelatedPlotLineID { get; init; } public string? ParentCandidateKey { get; init; } public int? ParentNarrativeCandidateID { get; init; } public decimal? Confidence { get; init; } } public sealed class StoryIntelligenceNarrativeCandidateEvent { public int NarrativeCandidateEventID { get; set; } public int NarrativeCandidateID { get; set; } public int? WholeBookPlotSynthesisRunID { get; set; } public string EventKey { get; set; } = string.Empty; 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 EventType { get; set; } = string.Empty; public string EventTitle { get; set; } = string.Empty; public string? EventDescription { get; set; } public string? Evidence { get; set; } public decimal? Confidence { get; set; } public int SortOrder { get; set; } public bool IsIgnored { get; set; } public int? AcceptedThreadEventID { get; set; } public DateTime CreatedUtc { get; set; } public DateTime UpdatedUtc { get; set; } }