namespace NeonSprawl.Server.Game.Combat;

/// <summary>
/// Server-internal combat resolution envelope (NEO-81); promoted to wire JSON via cast response extension (NEO-82).
/// NEO-84 telemetry hook sites live in <see cref="CombatOperations.TryResolve"/>.
/// </summary>
/// <param name="DamageDealt">Catalog damage applied on success; zero on deny.</param>
/// <param name="TargetRemainingHp">Authoritative HP after success; optional on deny (e.g. zero on <c>target_defeated</c>).</param>
/// <param name="TargetDefeated"><c>true</c> when post-resolve HP is zero on success; <c>false</c> on deny.</param>
public readonly record struct CombatResult(
    bool Success,
    string? ReasonCode,
    int DamageDealt,
    int? TargetRemainingHp,
    bool TargetDefeated);
