namespace NeonSprawl.Server.Game.Gathering;

/// <summary>Result of <see cref="ResourceNodeInstanceOperations.TryCommitSuccessfulGatherDecrement"/> (NEO-61).</summary>
public enum ResourceNodeInstanceMutationKind
{
    /// <summary>Validation or depletion deny — capacity unchanged when already depleted.</summary>
    Denied,

    /// <summary>Decrement applied and persisted.</summary>
    Applied,
}

/// <param name="ReasonCode">Populated when <see cref="Kind"/> is <see cref="ResourceNodeInstanceMutationKind.Denied"/>.</param>
/// <param name="Snapshot">Authoritative snapshot after apply, or current snapshot on depletion deny; null for unknown node.</param>
public readonly record struct ResourceNodeInstanceMutationOutcome(
    ResourceNodeInstanceMutationKind Kind,
    string? ReasonCode,
    ResourceNodeInstanceSnapshot? Snapshot);
