using System.Text.Json.Serialization; using MessagePack; using SVSim.EmulatedEntrypoint.Models.Dtos.Common; namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.ArenaTwoPick; /// /// Wire-shape notes vs prod do_matching captures (2026-05-31 TK2 capture): /// /// Prod sends room_id from matching_state 3003 onward. We deliberately /// omit it. The client's DoMatchingDetail data model has no room_id /// field and DoMatchingBase.SettingDoMatchingData() never reads the key; /// private-room flows (RoomConnectController) get their room id from a /// separate API (OpenRoomBattleCreate*) and don't consult this response. /// Re-add only if a downstream consumer surfaces. /// node_server_url must always be present (empty string while waiting, /// actual URL on SUCCEEDED/SUCCEEDED_OWNER). The client's accessor is unguarded. /// battle_id stays absent on RETRY (its accessor IS guarded via /// Keys.Contains). /// /// [MessagePackObject] public sealed class DoMatchingResponseDto { [JsonPropertyName("matching_state")] [Key("matching_state")] public int MatchingState { get; set; } = 3004; // SUCCEEDED [JsonPropertyName("timeout_period")] [JsonConverter(typeof(StringifiedIntConverter))] [Key("timeout_period")] public int TimeoutPeriod { get; set; } = 30; [JsonPropertyName("retry_period")] [JsonConverter(typeof(StringifiedIntConverter))] [Key("retry_period")] public int RetryPeriod { get; set; } = 3; [JsonPropertyName("battle_id")] [Key("battle_id")] public string? BattleId { get; set; } [JsonPropertyName("node_server_url")] [Key("node_server_url")] public string? NodeServerUrl { get; set; } // Required by the client when matching_state ∈ {3004, 3007, 3011} — // DoMatchingBase.SettingCardMasterId does jsonData["card_master_id"].ToInt() // with no Keys.Contains guard, so omitting it throws KeyNotFoundException. // Value matches what /load/index returns (the "current battle card master"). [JsonPropertyName("card_master_id")] [Key("card_master_id")] public int CardMasterId { get; set; } = 1; [JsonPropertyName("room_param")] [Key("room_param")] public string RoomParam { get; set; } = ""; [JsonPropertyName("mission_parameter")] [Key("mission_parameter")] public Dictionary MissionParameter { get; set; } = new() { ["follower_play_count_for_mission"] = "{me.game_play_cards_other_self.unit.count}", }; }