UI/HUD/RoundRecapMenu.razor
@namespace Sandbox.UI
@using System;
@using System.Collections.Generic;
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent

<root>
	<style>
		RoundRecapMenu {
			position: absolute;
			inset: 0;
			pointer-events: none;
			justify-content: center;
			align-items: center;
			font-family: sans-serif;
		}

		.recap-backdrop {
			position: absolute;
			inset: 0;
			background-color: rgba(0, 0, 0, 0.85);
			justify-content: center;
			align-items: center;
			pointer-events: all;
		}

		.recap-box {
			width: 620px;
			max-height: 85%;
			background-color: rgba(14, 16, 22, 0.98);
			border: 2px solid #e5a93c;
			border-radius: 4px;
			box-shadow: 0 24px 60px rgba(0, 0, 0, 0.95);
			padding: 28px;
			flex-direction: column;
		}

		.recap-header {
			flex-direction: column;
			align-items: center;
			border-bottom: 1px solid rgba(229, 169, 60, 0.3);
			padding-bottom: 16px;
			margin-bottom: 16px;
		}

		.recap-title {
			font-size: 24px;
			font-weight: 900;
			color: #ffd57e;
			letter-spacing: 4px;
			text-transform: uppercase;
		}

		.stats-summary {
			flex-direction: row;
			justify-content: space-around;
			padding: 14px 0;
			background-color: rgba(255, 255, 255, 0.03);
			border-radius: 3px;
			margin-bottom: 16px;
		}

		.stat-block {
			flex-direction: column;
			align-items: center;
		}

		.stat-val {
			font-size: 22px;
			font-weight: 900;
			color: #f8fafc;
			font-family: monospace;
		}

		.stat-lbl {
			font-size: 9px;
			font-weight: 800;
			color: #94a3b8;
			letter-spacing: 1.5px;
			text-transform: uppercase;
			margin-top: 3px;
		}

		.scroll-list {
			flex-direction: column;
			max-height: 200px;
			overflow-y: scroll;
			gap: 4px;
			padding-right: 8px;
			margin-bottom: 24px;
		}

		.feat-row {
			flex-direction: row;
			justify-content: space-between;
			padding: 6px 10px;
			background-color: rgba(255, 255, 255, 0.04);
			border-radius: 2px;
			font-size: 11px;
			font-weight: 800;
			color: #e2e8f0;
			text-transform: uppercase;
		}

		.btn-continue {
			align-self: center;
			width: 280px;
			text-align: center;
		}
	</style>

	@if ( GameManager.Instance?.CurrentPhase == GamePhase.RoundRecap )
	{
		<div class="recap-backdrop">
			<div class="recap-box">
				<div class="recap-header">
					<span class="recap-title">Round @(GameManager.Instance.CurrentRoundIndex + 1) Debrief</span>
				</div>

				<div class="stats-summary">
					<div class="stat-block">
						<span class="stat-val">@(RoundTracker.Instance?.KillsCount ?? 0)</span>
						<span class="stat-lbl">Gladiators Slain</span>
					</div>

					<div class="stat-block">
						@{
							int gain = GameManager.Instance?.LastRoundFanGain ?? 0;
							string gainColor = gain >= 0 ? "#4ade80" : "#ef4444";
							string gainText = (gain >= 0 ? "+" : "") + gain;
						}
						<span class="stat-val" style="color: @gainColor;">@gainText</span>
						<span class="stat-lbl">Fans Gained</span>
					</div>

					<div class="stat-block">
						<span class="stat-val" style="color: #ffd57e;">
							@($"{GameManager.Instance?.TotalFans ?? 0} / {GameManager.TargetFans}")
						</span>
						<span class="stat-lbl">Total Support</span>
					</div>
				</div>

				<div class="scroll-list">
					@if ( RoundTracker.Instance != null )
					{
						@foreach ( var kvp in RoundTracker.Instance.PlayerActionsCount )
						{
							if ( kvp.Value <= 0 ) continue;
							var display = GetActionDisplay( kvp.Key );

							<div class="feat-row">
								<span>@display.Title</span>
								<span style="color: @display.ColorHex;">x @kvp.Value</span>
							</div>
						}
					}
				</div>

				<button class="btn-roman btn-continue" @onclick=@OnContinuePressed>Return to Camp</button>
			</div>
		</div>
	}
</root>

@code {
	protected override void OnUpdate()
	{
		if ( GameManager.Instance?.CurrentPhase == GamePhase.RoundRecap )
		{
			UIStateManager.RequestFocus( this );
		}
	}

	private void OnContinuePressed()
	{
		UIStateManager.ReleaseFocus( this );
		GameManager.Instance?.AdvanceToNextRoundOrBuffer();
	}

	private (string Title, string ColorHex) GetActionDisplay( CrowdAction action )
	{
		var def = CrowdEvaluator.Instance?.Config?.GetDefinition( action );
		if ( def != null && !string.IsNullOrWhiteSpace( def.Title ) )
		{
			return (def.Title, def.DisplayColor.Hex);
		}

		var fallback = CrowdEventDisplay.GetMetadata( action );
		return (fallback.Title, fallback.DisplayColor.Hex);
	}

	protected override int BuildHash()
	{
		return HashCode.Combine( 
			RoundTracker.Instance?.KillsCount, 
			GameManager.Instance?.TotalFans,
			GameManager.Instance?.LastRoundFanGain,
			GameManager.Instance?.CurrentPhase 
		);
	}
}