using System.Diagnostics.CodeAnalysis; namespace NeonSprawl.Server.Game.Encounters; /// Adapter over (NEO-102). public sealed class RewardTableDefinitionRegistry(RewardTableDefinitionCatalog catalog) : IRewardTableDefinitionRegistry { private readonly IReadOnlyList _definitionsInIdOrder = BuildDefinitionsInIdOrder(catalog); /// public bool TryGetDefinition(string? rewardTableId, [NotNullWhen(true)] out RewardTableDefRow? definition) { if (rewardTableId is null) { definition = null; return false; } return catalog.TryGetRewardTable(rewardTableId, out definition); } /// public bool TryNormalizeKnown(string? rawRewardTableId, [NotNullWhen(true)] out string normalized) { if (rawRewardTableId is null) { normalized = string.Empty; return false; } normalized = rawRewardTableId.Trim().ToLowerInvariant(); if (normalized.Length == 0) { normalized = string.Empty; return false; } return catalog.TryGetRewardTable(normalized, out _); } /// public IReadOnlyList GetDefinitionsInIdOrder() => _definitionsInIdOrder; private static IReadOnlyList BuildDefinitionsInIdOrder(RewardTableDefinitionCatalog catalog) { var ids = catalog.ById.Keys.OrderBy(k => k, StringComparer.Ordinal).ToArray(); var list = new List(ids.Length); foreach (var id in ids) { list.Add(catalog.ById[id]); } return list; } }