using MessagePack;
using System.Text.Json.Serialization;
using SVSim.EmulatedEntrypoint.Models.Dtos.Common;
using SVSim.EmulatedEntrypoint.Models.Dtos.Common.Guild;
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Guild;
///
/// Mirrors GuildInfo.cs:68-86. Always-present: max_member_num, max_sub_leader_num,
/// guild_status, usable_stamp_list. Conditionally present (client `Keys.Contains` -gated):
/// guild (detail + members), join_request_count, invite_count.
///
[MessagePackObject]
public class GuildInfoResponse
{
[JsonPropertyName("max_member_num"), Key("max_member_num"), JsonConverter(typeof(StringifiedIntConverter)),
JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public int MaxMemberNum { get; set; }
[JsonPropertyName("max_sub_leader_num"), Key("max_sub_leader_num"), JsonConverter(typeof(StringifiedIntConverter)),
JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public int MaxSubLeaderNum { get; set; }
[JsonPropertyName("guild_status"), Key("guild_status"), JsonConverter(typeof(StringifiedIntConverter)),
JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public int GuildStatus { get; set; }
/// Stamp ids the viewer can use in chat. Stringified ints (capture: ["100001",...]).
[JsonPropertyName("usable_stamp_list"), Key("usable_stamp_list"),
JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public List UsableStampList { get; set; } = new();
[JsonPropertyName("guild"), Key("guild")]
public GuildBundle? Guild { get; set; }
[JsonPropertyName("join_request_count"), Key("join_request_count"), JsonConverter(typeof(StringifiedIntConverter))]
public int? JoinRequestCount { get; set; }
[JsonPropertyName("invite_count"), Key("invite_count"), JsonConverter(typeof(StringifiedIntConverter))]
public int? InviteCount { get; set; }
}
[MessagePackObject]
public class GuildBundle
{
[JsonPropertyName("detail"), Key("detail")]
public GuildDetailDto Detail { get; set; } = new();
[JsonPropertyName("members"), Key("members")]
public List Members { get; set; } = new();
}