@namespace Shared.Pages @inject CardRenderingService CardRenderer @page "/decks/{Name}" Chrono CCG - @(deck?.Name ?? "Deck Details")
Back to Decks @if (deck == null) {

Deck not found.

} else {

@deck.Name

Deck Code:
@deck.DeckCode
@if (deck.Factions.Count > 0) {
@foreach (var f in deck.Factions) { @f }
}
@deck.Cards.Count cards @(deck.IsValid ? "Valid" : "Invalid") @if (!deck.IsValid) { @deck.ValidationMessage }
@if (deck.Keycards.Count > 0) {

Keycards

} @if (deck.Divers.Count > 0) {

Divers

}

Cards

@if (deck.Description != null) {

Description

@CardRenderer.RenderDescription(deck.Description, SelectCard)
}
}
@code { [Parameter] public string Name { get; set; } = ""; private DeckData? deck; private CardData? selectedCard; private bool HasImage => selectedCard?.ImageFile is { Length: > 0 } && selectedCard.ImageFile != "placeholder.png"; protected override void OnParametersSet() { var decoded = Uri.UnescapeDataString(Name); deck = DeckDatabase.Decks.FirstOrDefault(d => d.IsVisible && d.Name == decoded); } private static readonly Dictionary CardLookup = CardDatabase.Cards .Where(c => !string.IsNullOrWhiteSpace(c.Name)) .GroupBy(c => c.Name, StringComparer.OrdinalIgnoreCase) .ToDictionary(g => g.Key, g => g.First(), StringComparer.OrdinalIgnoreCase); private CardData? LookupCard(string cardName) { return CardLookup.GetValueOrDefault(cardName); } private void SelectCard(CardData? card) { selectedCard = card; } private void CloseDetail() { selectedCard = null; } private List<(int Cost, int Count)> GetManaDistribution() { if (deck == null) return []; var counts = new Dictionary(); for (var i = 0; i <= 10; i++) counts[i] = 0; foreach (var cardName in deck.Cards) { var card = LookupCard(cardName); if (card?.Cost != null) { var cost = card.Cost.Value; if (cost >= 10) cost = 10; counts[cost]++; } } return counts.OrderBy(x => x.Key).Select(x => (x.Key, x.Value)).ToList(); } }