aboutsummaryrefslogtreecommitdiff
path: root/nba/scores.py
blob: 47ed552ef954f4f4638354a9786e6c7d7d193633 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"""
Tabulates a scoreboard for today's games.
"""

from tabulate import tabulate

# ANSI escape codes for text formatting
BOLD = "\033[1m"
END = "\033[0m"
RED = "\033[91m"
GREEN = "\033[32m"


# Function to get team record from standings
def get_team_record(team_name, standings) -> str:
    """
    Retrieves a team's win-loss record from the standings data.

    Args:
            team_name (str): Name of the team.
            standings (dict): Team standings data.

    Returns:
            record (str): Team's win-loss record in 'W-L' format. Defaults to 'N/A'.
    """
    for result_set in standings["resultSets"]:
        if result_set["name"] == "Standings":
            for team in result_set["rowSet"]:
                if team[4] == team_name:
                    return f"{team[12]}-{team[13]}"
    return "N/A"


def build_scoreboard(games, standings) -> None:
    """
    Prints the current day's games in a table format.

    Args:
            games (dict): JSON parsed games data.
            standings (dict): Team standings data.
    """
    scoreboard_data = games["scoreboard"]
    games = scoreboard_data["games"]

    # Prepare the table data
    table_data = []
    for game in games:
        home_team = game["homeTeam"]["teamName"]
        away_team = game["awayTeam"]["teamName"]
        game_status = game["gameStatusText"]
        home_score = game["homeTeam"]["score"]
        away_score = game["awayTeam"]["score"]

        home_record = get_team_record(home_team, standings)
        away_record = get_team_record(away_team, standings)

        # Determine the winning team
        if home_score > away_score:
            home_team_bold = f"{BOLD}{GREEN}{home_team} ({home_record}){END}{END}"
            away_team_bold = f"{away_team} ({away_record}){END}"
            home_score_bold = f"{BOLD}{GREEN}{home_score}{END}{END}"
            away_score_bold = f"{away_score}{END}"
        elif away_score > home_score:
            home_team_bold = f"{home_team} ({home_record}){END}"
            away_team_bold = f"{BOLD}{GREEN}{away_team} ({away_record}){END}{END}"
            home_score_bold = f"{home_score}{END}"
            away_score_bold = f"{BOLD}{GREEN}{away_score}{END}{END}"
        else:
            home_team_bold = f"{home_team} ({home_record})"
            away_team_bold = f"{away_team} ({away_record})"
            home_score_bold = f"{home_score}"
            away_score_bold = f"{away_score}"

        # Determine games still in progress
        if game_status != "Final":
            game_status = f"{RED}{game_status}{END}"

        table_data.append(
            [
                f"{home_team_bold}\n{away_team_bold}",
                f"{home_score_bold}\n{away_score_bold}",
                f"{BOLD}{game_status}{END}",
            ]
        )

    # Define the table headers
    headers = ["Team", "Score", "Game Status"]

    # Print the table
    print(tabulate(table_data, headers=headers, tablefmt="grid"))