using System.Text.Json.Serialization;
namespace NeonSprawl.Server.Game.Encounters;
/// JSON body for GET /game/players/{{id}}/encounter-progress (NEO-108).
public sealed class EncounterProgressListResponse
{
public const int CurrentSchemaVersion = 1;
[JsonPropertyName("schemaVersion")]
public int SchemaVersion { get; init; } = CurrentSchemaVersion;
[JsonPropertyName("playerId")]
public required string PlayerId { get; init; }
/// Per-player rows ordered by catalog encounter id (ordinal).
[JsonPropertyName("encounters")]
public required IReadOnlyList Encounters { get; init; }
}
/// Authoritative per-player progress for one encounter definition.
public sealed class EncounterProgressRowJson
{
[JsonPropertyName("encounterId")]
public required string EncounterId { get; init; }
/// inactive, active, or completed.
[JsonPropertyName("state")]
public required string State { get; init; }
[JsonPropertyName("defeatedTargetIds")]
public required IReadOnlyList DefeatedTargetIds { get; init; }
[JsonPropertyName("completedAt")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public DateTimeOffset? CompletedAt { get; init; }
[JsonPropertyName("rewardGrantSummary")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public IReadOnlyList? RewardGrantSummary { get; init; }
}