using System.Collections.Frozen; namespace ICRebuild.Core; // These are Status row IDs from the supplied IC sources, not action/timeline/opcode IDs. // Kept named by purpose to prevent accidental reuse across different ID spaces. public static class StatusCatalog { public static readonly FrozenSet SlowCandidates = new uint[] {14,67,181,240,436,484,502,623,674,709,1073,1107,1114,1141,1147,1259,1344,1394,1595,1790,1796,1935,2099,2158,2391,2551,2662,2731,3167,3284,3472,3473,3548,3943,3948,4334,4341}.ToFrozenSet(); public static readonly FrozenSet LegacySlipperyCandidates = new uint[] {142,149,604,905,911,1579,1580}.ToFrozenSet(); public static readonly FrozenSet ForcedMarch = new uint[] {1257,1681,3629,3719,3737}.ToFrozenSet(); public static readonly FrozenSet LegacyDirectionCandidates = new uint[] {1293,1294,1295,1296,1958,1959,1960,1961,2161,2162,2163,2164,2381,2382,2383,2384,2538,2539,2540,2541,3698,3699,3700,3701,3715,3716,3717,3718}.ToFrozenSet(); public static readonly FrozenSet Confusion = new uint[] {1422,2936,3694,3909}.ToFrozenSet(); public static readonly FrozenSet RejectedLegacyBlockIds = new uint[] {142,149,2538,2539,2540,2541}.ToFrozenSet(); // Status sheet names and descriptions checked against the user's 2026.09.15 data. public static readonly FrozenSet AuditedSlow = SlowCandidates.Concat(new uint[] {5044,5175,5356}).ToFrozenSet(); public static readonly FrozenSet AuditedBlockCandidates = LegacySlipperyCandidates.Concat(ForcedMarch) .Concat(LegacyDirectionCandidates).Concat(Confusion).Except(RejectedLegacyBlockIds).ToFrozenSet(); public static IEnumerable<(string Group,uint Id)> Entries() { foreach(var (name,set) in new[] {("Slow",SlowCandidates),("Slippery",LegacySlipperyCandidates),("ForcedMarch",ForcedMarch),("DirectionCommands",LegacyDirectionCandidates),("Confusion",Confusion)}) foreach(var id in set.Order()) yield return (name,id); } }