Source code for nhl_scrabble.reports.team_report

"""Team scores reporter."""

import heapq

from nhl_scrabble.models.team import TeamScore
from nhl_scrabble.reports.base import BaseReporter


[docs] class TeamReporter(BaseReporter): """Generate team scores reports with top players."""
[docs] def __init__(self, top_players_per_team: int = 5) -> None: """Initialize team reporter. Args: top_players_per_team: Number of top players to show per team """ self.top_players_per_team = top_players_per_team
[docs] def generate(self, team_scores: dict[str, TeamScore]) -> str: """Generate team scores report. Args: team_scores: Dictionary mapping team abbreviations to TeamScore objects Returns: Formatted team report string """ parts = [self._format_header("📊 TEAM SCRABBLE SCORES (Sorted by Total Score)")] sorted_teams = self._sort_by_key( team_scores.items(), key=lambda x: x[1].total, reverse=True, ) for rank, (team_abbrev, team_data) in enumerate(sorted_teams, 1): parts.append( f"\n\n#{rank} {team_abbrev} ({team_data.division}): " f"{self._format_score(team_data.total)} points ({team_data.player_count} players)", ) # Show top players from each team top_players = heapq.nlargest( self.top_players_per_team, team_data.players, key=lambda x: x.full_score, ) parts.extend( f"\n {i}. {player.full_name}: {self._format_score(player.full_score)} " f"({player.first_name}={self._format_score(player.first_score, width=2)}, " f"{player.last_name}={self._format_score(player.last_score, width=2)})" for i, player in enumerate(top_players, 1) ) return "".join(parts)