using MessagePack; using SVSim.Database.Enums; namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses; [MessagePackObject] public class IndexResponse { #region Primitive Returns [Key("spot_point")] public int SpotPoint { get; set; } [Key("is_available_colosseum_free_entry")] public bool IsAvailableColosseumFreeEntry { get; set; } [Key("friend_battle_invite_count")] public int FriendBattleInviteCount { get; set; } [Key("battle_recovery_status")] public int BattleRecoveryStatus { get; set; } [Key("room_recovery_status")] public int RoomRecoveryStatus { get; set; } [Key("is_battle_pass_period")] public int IsBattlePassPeriod { get; set; } [Key("card_set_id_for_resource_dl_view")] public int CardSetIdForResourceDlView { get; set; } [Key("deck_format")] public int DeckFormat { get; set; } = 1; #endregion #region Basic User Data [Key("user_tutorial")] public UserTutorial UserTutorial { get; set; } = new UserTutorial(); [Key("user_info")] public UserInfo UserInfo { get; set; } = new UserInfo(); [Key("user_crystal_count")] public UserCurrency UserCurrency { get; set; } = new UserCurrency(); #endregion #region Inventory Data [Key("user_item_list")] public List UserItems { get; set; } = new(); [Key("user_deck_rotation")] public UserFormatDeckInfo UserRotationDecks { get; set; } = new(); [Key("user_deck_unlimited")] public UserFormatDeckInfo UserUnlimitedDecks { get; set; } = new(); [Key("user_deck_my_rotation")] public UserFormatDeckInfo UserMyRotationDecks { get; set; } = new(); [Key("user_card_list")] public List UserCards { get; set; } = new(); [Key("user_class_list")] public List UserClasses { get; set; } = new(); /// /// Wire is an array; parser iterates by index (LoadDetail.cs:358-360). /// [Key("user_sleeve_list")] public List Sleeves { get; set; } = new(); [Key("user_emblem_list")] public List UserEmblems { get; set; } = new(); [Key("user_degree_list")] public List UserDegrees { get; set; } = new(); /// /// Wire is an array; parser iterates by index (LoadDetail.cs:348-356). /// [Key("user_leader_skin_list")] public List LeaderSkins { get; set; } = new(); /// /// Wire is string[]; parser calls .ToString() on each element (LoadDetail.cs:387-392). /// [Key("user_mypage_list")] public List MyPageBackgrounds { get; set; } = new(); #endregion #region Advanced Player Data /// /// Wire is an array of 5 entries; parser uses deck_format as discriminator /// (LoadDetail.cs:527-538). /// [Key("user_rank")] public List UserRankInfo { get; set; } = new(); [Key("user_rank_match_list")] public List UserRankedMatches { get; set; } = new(); [Key("daily_login_bonus")] public DailyLoginBonus DailyLoginBonus { get; set; } = new(); [Key("challenge_config")] public ArenaConfig ArenaConfig { get; set; } = new(); #endregion #region Global Data [Key("red_ether_overwrite_list")] public List RedEtherOverrides { get; set; } = new(); /// /// Wire is a flat number[]; parser passes it straight to SetMaintenanceCardIds /// (LoadDetail.cs:165). /// [Key("maintenance_card_list")] public List MaintenanceCards { get; set; } = new(); [Key("arena_info")] public List ArenaInfos { get; set; } = new(); /// /// Wire is an array; client uses POSITIONAL logic (index >= 24 = master ranks, /// LoadDetail.cs:417-422). Order must match repository's ordering. /// [Key("rank_info")] public List RankInfo { get; set; } = new(); /// /// Wire is an array; parser iterates by index (LoadDetail.cs:425-434). /// [Key("class_exp")] public List ClassExp { get; set; } = new(); [Key("loading_exclusion_card_list")] public List LoadingTipCardExclusions { get; set; } = new(); [Key("default_setting")] public DefaultSettings DefaultSettings { get; set; } = new(); [Key("unlimited_restricted_base_card_id_list")] public Dictionary UnlimitedBanList { get; set; } = new(); /// /// Client unconditionally accesses [1] and [Count-1] (LoadDetail.cs:184) — list MUST /// have at least 2 entries or the client crashes. /// [Key("rotation_card_set_id_list")] public List RotationSets { get; set; } = new(); /// /// Wire is a flat number[]; parser iterates and reads .ToInt() (LoadDetail.cs:463-468). /// [Key("reprinted_base_card_ids")] public List ReprintedCards { get; set; } = new(); [Key("spot_cards")] public Dictionary SpotCards { get; set; } = new(); [Key("pre_release_info")] public PreReleaseInfo? PreReleaseInfo { get; set; } [Key("my_rotation_info")] public MyRotationInfo? MyRotationInfo { get; set; } [Key("avatar_info")] public MyRotationInfo? AvatarRotationInfo { get; set; } [Key("feature_maintenance_list")] public List FeatureMaintenances { get; set; } = new(); [Key("special_crystal_info")] public List SpecialCrystalInfos { get; set; } = new(); [Key("battle_pass_level_info")] public Dictionary? BattlePassLevelInfo { get; set; } /// /// Wire is string[]; parser calls .ToString() on each element (LoadDetail.cs:493-499). /// [Key("open_battle_field_id_list")] public List OpenBattlefieldIds { get; set; } = new(); #endregion #region Misc Data [Key("loot_box_regulation")] public LootBoxRegulations LootBoxRegulations { get; set; } = new(); [Key("gathering_info")] public GatheringInfo GatheringInfo { get; set; } = new(); /// /// Spec is unclear whether this is returned at /load/index or only at /config/* endpoints /// (load-index.md line 390). Pending live-capture confirmation; harmless extra. /// [Key("user_config")] public UserConfig UserConfig { get; set; } = new(); #endregion }