from math import floor from csv import reader from typing import Tuple from pathlib import Path from dataclasses import dataclass MIN_LEVEL = 1 MAX_LEVEL = 10 PLAYER_PER_COURT = 4 @dataclass class Player: name: str skill: int = 0 status: bool = False @dataclass class Team: player1: str player2: str @dataclass class Game: court: int team1: Team team2: Team @dataclass class CourtList: total: int def __post_init__(self) -> None: self.courts = {i + 1: True for i in range(self.total)} def get_court_status(self, court_number: int) -> bool: return self.courts[court_number] def toggle_court_status(self, court_number: int) -> None: new_status = not self.courts[court_number] self.courts[court_number] = new_status return new_status def get_courts(self) -> dict: return self.courts def separate_courts(self) -> Tuple[dict, dict]: active_courts = {k: v for k, v in self.courts.items() if v} inactive_courts = {k: v for k, v in self.courts.items() if not v} return active_courts, inactive_courts @dataclass class PlayerList: location: str def __post_init__(self) -> None: with open("data/" + self.location, newline="") as file: pointer = reader(file) next(pointer, None) players = { id: Player(row[0], int(row[1])) for id, row in enumerate(pointer) } self.players = players def get_player_status(self, player_number: int) -> bool: return self.players[player_number].status def toggle_player_status(self, player_number: int) -> Tuple[bool, str]: new_status = not self.players[player_number].status self.players[player_number].status = new_status return new_status, self.players[player_number].name def get_players(self) -> dict: return self.players def get_possible_game_count(self) -> int: active_player_count = len(self.get_active_players()) possible_games = floor(active_player_count / PLAYER_PER_COURT) return possible_games def get_active_players(self) -> Tuple[dict, dict]: active_players = {k: v for k, v in self.players.items() if v.status} return active_players