Editor/Stair/ArchStairGuardSheet.cs
using System;
using Editor;

namespace Sunless.Architecture;

public sealed class ArchStairGuardSheet : IArchSheet {
	public Type Payload => typeof( ArchStairGuardPart );

	public void Build( ToolSidebarWidget panel, ArchTool tool, ArchSelection picked, Action refresh, Action changed ) {
		if ( picked.Item is not ArchStairGuardPart guard ) {
			return;
		}

		using ( var edges = ArchIconGrid.In( panel.AddGroup( "Edge" ) ) ) {
			edges.Pick( "Left going up", "guard_left", "align_horizontal_left",
				guard.Edge == StairEdge.Left, () => { guard.Edge = StairEdge.Left; refresh?.Invoke(); changed?.Invoke(); } );

			edges.Pick( "Right going up", "guard_right", "align_horizontal_right",
				guard.Edge == StairEdge.Right, () => { guard.Edge = StairEdge.Right; refresh?.Invoke(); changed?.Invoke(); } );

			edges.Pick( "The head - the far end a turn leaves open", "guard_head", "vertical_align_top",
				guard.Edge == StairEdge.Head, () => { guard.Edge = StairEdge.Head; refresh?.Invoke(); changed?.Invoke(); } );
		}

		using ( var kinds = ArchIconGrid.In( panel.AddGroup( "Railing" ) ) ) {
			kinds.Pick( "Balustrade — newels, balusters and a handrail over them", "opt_rails", "fence",
				guard.Railing == StairRailing.Balustrade, () => { guard.Railing = StairRailing.Balustrade; changed?.Invoke(); } );

			kinds.Pick( "Handrail — bolted to the plaster, for a side that runs against a wall", "opt_wall_rail", "handyman",
				guard.Railing == StairRailing.Handrail, () => { guard.Railing = StairRailing.Handrail; changed?.Invoke(); } );
		}

		panel.AddGroup( "Height" ).Add( ArchPartUi.Number( "Height", guard.Height, tool.Kit.HandrailHeight,
			value => guard.Height = MathF.Max( 0f, value ), changed ) );
	}
}