UI/BaseCanvas.Static.cs
namespace HC3;

partial class BaseCanvas
{
	private static Dictionary<string, BaseCanvas> canvases = new();
	public static string OpenedCanvas { get; private set; } = string.Empty;

	public static void RegisterCanvas( string name, BaseCanvas canvas )
	{
		canvases[name] = canvas;
	}

	public static void OpenCanvas( string name )
	{
		foreach ( var canvas in canvases )
		{
			if ( canvas.Key == name )
			{
				canvas.Value.IsVisible = true;
				canvas.Value.OnOpen();
			}
			else
			{
				canvas.Value.IsVisible = false;
				canvas.Value.OnClose();
			}
		}
		OpenedCanvas = name;
	}

	public static void CloseCanvas( string name )
	{
		canvases[name].IsVisible = false;
		OpenedCanvas = string.Empty;
	}

	public static void ToggleCanvas( string name )
	{
		if ( !canvases.ContainsKey( name ) )
		{
			Log.Warning( $"Canvas {name} not found." );
			return;
		}

		if ( canvases[name].IsVisible )
		{
			CloseCanvas( name );
		}
		else
		{
			OpenCanvas( name );
		}
	}

	public static void CloseAllCanvases()
	{
		foreach ( var canvas in canvases )
		{
			canvas.Value.IsVisible = false;
			canvas.Value.OnClose();
		}
		OpenedCanvas = string.Empty;
	}
}