using MessagePack; using System.Text.Json.Serialization; namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Pack; [MessagePackObject] public class PackOpenResponse { [JsonPropertyName("pack_list")] [Key("pack_list")] public List PackList { get; set; } = new(); [JsonPropertyName("reward_list")] [Key("reward_list")] public List RewardList { get; set; } = new(); [JsonPropertyName("rewards")] [Key("rewards")] public List Rewards { get; set; } = new(); [JsonPropertyName("is_special_effect")] [Key("is_special_effect")] public bool IsSpecialEffect { get; set; } /// Empty array literal — matches prod when no missions completed. [JsonPropertyName("mission_result")] [Key("mission_result")] public List MissionResult { get; set; } = new(); /// /// Set only on the /tutorial/pack_open path to signal the END (100) transition inline with /// the pack reward. Global WhenWritingNull keeps it off the wire on regular /pack/open. /// [JsonPropertyName("tutorial_step")] [Key("tutorial_step")] public int? TutorialStep { get; set; } } [MessagePackObject] public class CardPackEntryDto { [JsonPropertyName("card_id")] [Key("card_id")] public long CardId { get; set; } [JsonPropertyName("rarity")] [Key("rarity")] public int Rarity { get; set; } /// Always 1 per drawn slot — matches prod sample shape. [JsonPropertyName("number")] [Key("number")] public int Number { get; set; } = 1; }