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}",
};
}