using System.Text.Json.Serialization;
namespace AIStudio.Assistants.SWOTAnalysis;
///
/// The complete SWOT analysis, as the result view shows it and the chat stores it.
///
///
/// The assistant keeps its result in its session state, which compares objects by reference since
/// the mirror instance takes over only what changed. Therefore, replace a result as a whole and never
/// change it in place: a change in place would not reach an instance the user returns to.
///
public sealed class SwotAnalysisResult
{
[JsonPropertyName("matrix_heading")]
public string MatrixHeading { get; set; } = string.Empty;
[JsonPropertyName("internal_label")]
public string InternalLabel { get; set; } = string.Empty;
[JsonPropertyName("external_label")]
public string ExternalLabel { get; set; } = string.Empty;
[JsonPropertyName("positive_label")]
public string PositiveLabel { get; set; } = string.Empty;
[JsonPropertyName("negative_label")]
public string NegativeLabel { get; set; } = string.Empty;
[JsonPropertyName("strengths")]
public SwotCategory Strengths { get; set; } = new();
[JsonPropertyName("weaknesses")]
public SwotCategory Weaknesses { get; set; } = new();
[JsonPropertyName("opportunities")]
public SwotCategory Opportunities { get; set; } = new();
[JsonPropertyName("threats")]
public SwotCategory Threats { get; set; } = new();
[JsonPropertyName("overall_assessment")]
public SwotOverallAssessment OverallAssessment { get; set; } = new();
[JsonPropertyName("prioritized_actions")]
public SwotPrioritizedActions PrioritizedActions { get; set; } = new();
[JsonPropertyName("moderation_notes")]
public SwotModerationNotes ModerationNotes { get; set; } = new();
[JsonIgnore]
public IReadOnlyList Categories =>
[
this.Strengths,
this.Weaknesses,
this.Opportunities,
this.Threats,
];
}