namespace NeonSprawl.Server.Game.Crafting;

/// <summary>
/// Server-internal craft resolution envelope (NEO-69); promoted to wire JSON via <see cref="CraftResponse"/> (NEO-70).
/// NEO-71 telemetry hook sites live in <see cref="CraftOperations.TryCraft"/> (success path + centralized <c>Deny</c> helper).
/// </summary>
/// <param name="InputsConsumed">Scaled inputs removed on success; empty when denied.</param>
/// <param name="OutputsGranted">Scaled outputs added on success; empty when denied.</param>
/// <param name="XpGrantSummary">Refine skill XP applied on success; null when denied.</param>
public readonly record struct CraftResult(
    bool Success,
    string? ReasonCode,
    IReadOnlyList<CraftIoApplied> InputsConsumed,
    IReadOnlyList<CraftIoApplied> OutputsGranted,
    CraftXpGrantSummary? XpGrantSummary);
