UI/HUD/Elements/RoundStatsReadout.razor
@using Sandbox.UI;
@inherits Panel
@namespace PlanetMeat

<root>
	@{
		var ctx = Career.Current.RoundStats;

		@if (TryGetDamageText(ctx, "all", out var allDmgText))
		{
			<div class="category">
				<span class="title key">#stats.dmg.all</span>
				<span class="value">@allDmgText</span>
				@foreach (var cat in Catalogue.Current.BlameTools)
				{
					if (TryGetDamageText(ctx, "by_" + cat, out var wepDmgText))
					{
						<span class="key">#tool.@(cat).title</span>
						<span class="value">@wepDmgText</span>
					}
				}
			</div>
		}

		@if (TryGetGenericText(ctx, "wep_kills", out var allWepText))
		{
			<div class="category">
				<span class="title key">#stats.kill_weps.all</span>
				<span class="value">@allWepText</span>
				@foreach (var cat in Catalogue.Current.BlameTools)
				{
					if (TryGetGenericText(ctx, "kills_by_" + cat, out var wepKillText))
					{
						<span class="key">#tool.@(cat).title</span>
						<span class="value">@wepKillText</span>
					}
				}
			</div>
		}

		@if (TryGetGenericText(ctx, "kills_all", out var allKillText))
		{
			<div class="category">
				<span class="title key">#stats.kill_types.all</span>
				<span class="value">@allKillText</span>
				@foreach (var enemy in Agenda.Current.AllVariants)
				{
					if (TryGetGenericText(ctx, "kills_" + enemy.Ident, out var variantKillText))
					{
						<span class="key">#@(enemy.DisplayName)</span>
						<span class="value">@variantKillText</span>
					}
				}
			</div>
		}
	}
</root>

@code
{
	private bool TryGetDamageText(StatContext ctx, string scope, out string value)
	{
		if (ctx.TryGetNow("damage_" + scope, out var dmg))
		{
			if (ctx.TryGetNow("overkill_" + scope, out var overkill))
				value = LargeNumberString.ToCompact(dmg - overkill) + " · " + LargeNumberString.ToCompact(overkill);
			else
				value = LargeNumberString.ToCompact(dmg);

			return true;
		}
		value = "";
		return false;
	}

	private bool TryGetGenericText(StatContext ctx, string ident, out string value)
	{
		if (ctx.TryGetNow(ident, out var s))
		{
			value = LargeNumberString.ToCompact(s);
			return true;
		}
		value = "";
		return false;
	}

	protected override int BuildHash() => System.HashCode.Combine(
		Agenda.Current.ScoutReportId
	);
}