using System.Text.Json.Serialization;
namespace Theriapolis.Core.Data;
///
/// Definition record for a named faction, loaded from factions.json.
///
public sealed class FactionDef
{
/// Machine-readable id matching FactionId enum (e.g. "covenant_enforcers").
public string Id { get; set; } = "";
/// Display name shown in UI.
public string Name { get; set; } = "";
/// Abbreviated name for tight spaces.
public string ShortName { get; set; } = "";
/// Hex color string for map overlay (e.g. "#4455AA").
public string Color { get; set; } = "#FFFFFF";
/// Brief description used in tooltips/codex.
public string Description { get; set; } = "";
///
/// Phase 6 M2 — opposition multipliers per reputation.md §I-2.
/// When the player gains +N with this faction, every entry
/// { otherFactionId: m } here applies +N × m to that other
/// faction's standing. Multipliers are negative for rivals (helping
/// Inheritors hurts you with Enforcers), positive for allies, 0 for
/// neutrals. Asymmetry is by design — see the design doc.
///
[JsonPropertyName("opposition")]
public Dictionary Opposition { get; set; } = new();
///
/// Phase 6 M2 — when true, this faction is hidden from the reputation
/// screen until the player learns it exists (the Maw, in Act I climax).
/// The faction still exists internally and accumulates standing.
///
[JsonPropertyName("hidden")]
public bool Hidden { get; set; } = false;
}