using System.Text.Json.Serialization;

namespace SVSim.EmulatedEntrypoint.Models.Dtos.Requests.Admin;

/// <summary>
/// Snake-case JSON. Only used by the import endpoint (plain JSON over HTTP, not the
/// Unity msgpack path) so no MessagePack attributes are needed.
/// </summary>
public class ImportViewerRequest
{
    [JsonPropertyName("steam_id")] public ulong SteamId { get; set; }

    [JsonPropertyName("display_name")] public string? DisplayName { get; set; }
    [JsonPropertyName("country_code")] public string? CountryCode { get; set; }
    [JsonPropertyName("tutorial_state")] public int? TutorialState { get; set; }

    [JsonPropertyName("selected_emblem_id")] public int? SelectedEmblemId { get; set; }
    [JsonPropertyName("selected_degree_id")] public int? SelectedDegreeId { get; set; }

    [JsonPropertyName("currency")] public ImportCurrency? Currency { get; set; }

    [JsonPropertyName("owned_sleeve_ids")] public List<int>? OwnedSleeveIds { get; set; }
    [JsonPropertyName("owned_emblem_ids")] public List<int>? OwnedEmblemIds { get; set; }
    [JsonPropertyName("owned_degree_ids")] public List<int>? OwnedDegreeIds { get; set; }
    [JsonPropertyName("owned_leader_skin_ids")] public List<int>? OwnedLeaderSkinIds { get; set; }
    [JsonPropertyName("owned_mypage_background_ids")] public List<int>? OwnedMyPageBackgroundIds { get; set; }

    [JsonPropertyName("classes")] public List<ImportClassData>? Classes { get; set; }
}

public class ImportCurrency
{
    [JsonPropertyName("crystals")] public ulong? Crystals { get; set; }
    [JsonPropertyName("rupees")] public ulong? Rupees { get; set; }
    [JsonPropertyName("red_ether")] public ulong? RedEther { get; set; }
}

public class ImportClassData
{
    [JsonPropertyName("class_id")] public int ClassId { get; set; }
    [JsonPropertyName("level")] public int Level { get; set; }
    [JsonPropertyName("exp")] public int Exp { get; set; }
}
