Editor/Output/ArchExpectedReports.cs
namespace Sunless.Architecture;

public interface IArchExpectedReport {
	ArchKind Kind { get; }

	object Describe( object payload, ArchTarget target, ArchTool tool );
}

public static class ArchExpectedReports {
	public static object Describe( ArchKind kind, object payload, ArchTarget target, ArchTool tool ) {
		var report = Standing().FirstOrDefault( candidate => candidate.Kind == kind );

		return report?.Describe( payload, target, tool );
	}

	static IEnumerable<IArchExpectedReport> Standing() {
		yield return new ArchWallExpectedReport();
		yield return new ArchRoofExpectedReport();
		yield return new ArchStairExpectedReport();
	}
}