UI/Common/InputHints.razor
@using Sandbox.UI

@namespace sGBA

@inherits PanelComponent

<root class="@RootClass">
	@if (DetailsOpen)
	{
		<ControllerHint Action="GBA_B" Label="#prompt.back" />
	}
	else if (SettingsOpen)
	{
		<ControllerHint Action="GBA_B" Label="#prompt.back" />
		<ControllerHint Action="GBA_A" Label="#prompt.ok" />
	}
	else if (Home?.AllSoftwareOpen == true)
	{
		@if (Home?.CanOpenDetails == true)
		{
			<ControllerHint Action="GBA_Select" Label="#prompt.details" />
		}
		<ControllerHint Action="GBA_B" Label="#prompt.back" />
		<ControllerHint Action="GBA_A" Label="@(Home?.CanOpenDetails == true ? "#prompt.start" : "#prompt.ok")" />
	}
	else if (Home?.NavigationFocused == true)
	{
		<ControllerHint Action="GBA_A" Label="#prompt.ok" />
	}
	else if (Home?.CanOpenDetails == true || Home?.HasHomeAction == true)
	{
		@if (Home?.CanOpenDetails == true)
		{
			<ControllerHint Action="GBA_Select" Label="#prompt.details" />
		}
		<ControllerHint Action="GBA_A" [email protected] />
	}
</root>

@code
{
	public static InputHints Current { get; private set; }

	private HomeScreen Home => HomeScreen.Current;
	private bool DetailsOpen => DetailsModal.Current?.IsVisible == true;
	private bool SettingsOpen => SettingsModal.Current?.IsVisible == true;
	private bool AddGamesOpen => AddGamesModal.Current?.IsVisible == true;
	private bool HomeOpen => Home?.IsVisible == true;
	private bool AllSoftwareOpen => Home?.AllSoftwareOpen == true;
	private bool ForegroundDialogOpen => new Game.Overlay().IsOpen;

	private bool IsVisible => DetailsOpen || SettingsOpen || (HomeOpen && !ForegroundDialogOpen && (Home.NavigationFocused || Home.CanOpenDetails || Home.HasHomeAction || Home.AllSoftwareOpen));
	private string RootClass => (IsVisible ? "visible" : "") + (AllSoftwareOpen && !AddGamesOpen ? " all-software" : "");

	protected override void OnTreeFirstBuilt() => Current = this;

	protected override void OnDestroy()
	{
		if (Current == this) Current = null;
	}

	public void Refresh()
	{
		StateHasChanged();
	}

	protected override int BuildHash()
	{
		return HashCode.Combine(
			HashCode.Combine(IsVisible, DetailsOpen, SettingsOpen, AddGamesOpen, HomeOpen, AllSoftwareOpen, Home?.NavigationFocused, Home?.CanOpenDetails),
			HashCode.Combine(Home?.HasHomeAction, Home?.AllSoftwareOpen, Home?.PrimaryActionLabel, ForegroundDialogOpen));
	}
}