using MessagePack;
using System.Text.Json.Serialization;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Requests.DeckBuilder;
///
/// Covers all three client-side overloads of GenerateDeckCodeTask.SetParameter:
/// standard, crossover (sub_clan present), and my-rotation (rotation_id present, no phantom).
/// Optional fields stay null on shapes that don't carry them.
///
/// Deliberately does NOT inherit from : portal endpoints are anonymous
/// (the server ignores viewer_id / steam_id / steam_session_ticket on the wire — see the
/// data_headers in the prod traffic dump where they're all zeroed). The fields still arrive on
/// the wire from the client; System.Text.Json silently drops unknown JSON properties.
///
[MessagePackObject]
public class GenerateDeckCodeRequest
{
[JsonPropertyName("clan")]
[Key("clan")]
public int Clan { get; set; }
[JsonPropertyName("sub_clan")]
[Key("sub_clan")]
public int? SubClan { get; set; }
[JsonPropertyName("deck_format")]
[Key("deck_format")]
public int DeckFormat { get; set; }
// Wire key is camelCase mid-word capital — verified in data_dumps/captures/traffic.ndjson live
// capture (`"cardID":[...]`). The client's LitJson serializer emits the C# property name
// verbatim, and the param classes in Wizard/GenerateDeckCodeTask.cs use `cardID` /
// `phantomCardID`. Snake-case would silently bind to empty and the controller would emit
// INVALID_DECK; that was the 2026-05-28 "blank code in the deck builder UI" symptom.
[JsonPropertyName("cardID")]
[Key("cardID")]
public List CardID { get; set; } = new();
[JsonPropertyName("phantomCardID")]
[Key("phantomCardID")]
public List? PhantomCardID { get; set; }
[JsonPropertyName("rotation_id")]
[Key("rotation_id")]
public string? RotationId { get; set; }
}