UI/HQ/Elements/HQShop.razor
@using Sandbox.UI;
@inherits Panel
@namespace PlanetMeat

<root>
	@if (Tab != "")
	{
		<div class="inventory pm-body">
			<span class="tab-title noshrink pm-title">#toolbox.@(Tab).title</span>
			@if (Tab == "research")
			{
				<div class="items">
					@if (Research.Current.HasTech("research_speed"))
					{
						<div class="item">
							<div class="info grow">
								<span>#improvement.@(ImproveResearch.Ident).title</span>
								<span>@(ImproveResearch.DisplayedCurrentEffect) -> @(ImproveResearch.DisplayedNextEffect)</span>
							</div>
							<button class="btn-buy click-active" onclick=@(() => ImproveResearch.TryPurchase())>
								<CurrencyDisplay Mode="cost" AccountId="meat" Amount=@(ImproveResearch.NextCost)>
								</CurrencyDisplay>
							</button>
						</div>
					}
					<div class="scroll-v pm-inset techlist">
						@foreach (var tech in AvailableTechs)
						{
							var completed = tech.Completed;
							var researching = tech == ResearchTarget;
							<div onclick=@(() => SelectTech(tech))
								 class="item tech @(completed ? "item-disabled" : "") @(researching ? "researching" : "")">
								<div class="info grow">
									<span>#@(tech.DisplayName)</span>
									@if (completed)
									{
										<span>#tech.duration.complete</span>
									}
									else
									{
										if (researching)
										{
											var remaining = Research.Current.ResearchRoundsRemaining;
											<div class="research-time">
												<span>@remaining</span>
												<span>#tech.duration.until@(remaining != 1 ? "_pl" : "")</span>
											</div>
										}
										else
										{
											<div class="research-time">
												<span>@(tech.Progress)</span>
												<span>/</span>
												<span>@(tech.Duration)</span>
											</div>
										}
									}
								</div>
							</div>
						}
					</div>
				</div>
			}
			else if (Tab == "improve")
			{
				<div class="items">
					<UpgradeShop Currency="meat"></UpgradeShop>
				</div>
			}
		</div>
	}
</root>

@code
{
	private string Tab
	{
		get => Catalogue.Current.CurrentTab;
		set => Catalogue.Current.CurrentTab = value;
	}

	private BaseTech ResearchTarget
	{
		get => Research.Current.ResearchTarget;
		set => Research.Current.ResearchTarget = value;
	}

	private ImproveResearch ImproveResearch => Research.Current.ImproveResearch;
	private IEnumerable<BaseTech> AvailableTechs => Research.Current.AvailableTechs;

	private void SelectTech(BaseTech tech)
	{
		if (Game.IsEditor && ResearchTarget == tech)
		{
			tech.AdvanceProgress(1000);
			Research.Current.BakeCatalogue();
		}
		else
		{
			ResearchTarget = tech;
		}
	}

	protected override int BuildHash() => System.HashCode.Combine(
		Tab,
		ResearchTarget,
		AvailableTechs.HashContents()
	);
}