SboxSuperuser/Core/Commands/ConsoleRootState.cs

Validation/state object for a console command root. It validates the provided root name, checks for collisions or missing native registrations against a list of native command names, and exposes whether the root is available plus a user-facing message.

namespace SboxSuperuser.Core.Commands;

internal sealed class ConsoleRootState
{
	internal string Name { get; }
	internal bool IsAvailable { get; }
	internal string Message { get; }

	internal ConsoleRootState( string name, IEnumerable<string> registeredNativeNames )
	{
		Name = name ?? "";
		try
		{
			CommandRootName.Validate( name );
		}
		catch ( ArgumentException )
		{
			Message = "Invalid console root. Use 1–32 lowercase letters, digits or underscores, starting with a letter.";
			return;
		}

		var names = registeredNativeNames.ToArray();
		foreach ( var required in new[] { "superuser", "superuser_request", name } )
		{
			var expected = required == name && name != "admin" ? 0 : 1;
			if ( names.Count( value => string.Equals( value, required, StringComparison.OrdinalIgnoreCase ) ) != expected )
			{
				Message = $"Native root/transport collision or missing registration: {required}. Configure another logical root or remove the conflicting managed entry.";
				return;
			}
		}

		IsAvailable = true;
		Message = name == "admin" ? "Native admin entry ready; fallback: superuser admin <command>."
			: $"Configured logical root ready: superuser {name} <command>. Dynamic native aliases are unavailable in this engine.";
	}
}