using System.Text.Json.Serialization;

namespace Theriapolis.Core.Data;

/// <summary>
/// Immutable clade (race-equivalent) record loaded from clades.json.
/// Defines the broad biological family — Canidae, Felidae, etc. —
/// plus the ability mods, traits, and detriments shared by all member
/// species. See clades.md for the authoritative content.
/// </summary>
public sealed record CladeDef
{
    [JsonPropertyName("id")]
    public string Id { get; init; } = "";

    [JsonPropertyName("name")]
    public string Name { get; init; } = "";

    /// <summary>STR/DEX/CON/INT/WIS/CHA → modifier (typically +1 each on two abilities).</summary>
    [JsonPropertyName("ability_mods")]
    public Dictionary<string, int> AbilityMods { get; init; } = new();

    [JsonPropertyName("traits")]
    public TraitDef[] Traits { get; init; } = Array.Empty<TraitDef>();

    [JsonPropertyName("detriments")]
    public TraitDef[] Detriments { get; init; } = Array.Empty<TraitDef>();

    [JsonPropertyName("languages")]
    public string[] Languages { get; init; } = Array.Empty<string>();

    /// <summary>
    /// "Predator" / "Prey" — surfaces in dialogue + faction-affinity logic
    /// (Phase 6) and gates a few class features in Phase 5 (e.g. Feral
    /// level-20 Apex Predator vs Apex Prey).
    /// </summary>
    [JsonPropertyName("kind")]
    public string Kind { get; init; } = "predator";
}
