from dataclasses import dataclass
from dateutil import parser
import datetime

@dataclass
class Team:
    name: str
    abbr: str
    runs: int = 0
    hits: int = 0
    errors: int = 0

    def get_score(self) -> str:
        return f"{self.runs}/{self.hits}/{self.errors}"


@dataclass
class GameStatus:
    title: str
    status: str
    detail: str
    short_detail: str


@dataclass
class Game:
    date: datetime.datetime
    status: GameStatus 
    inning: str
    home_team: Team
    away_team: Team


def parse_game_status(data) -> GameStatus:
    if data["type"]["name"] == "STATUS_SCHEDULED":
        title = f"{data['type']['detail']} - {data['type']['shortDetail']}"
    else:
        title = f"{data['type']['detail']}"

    return GameStatus(title=title,
                      status=data["type"]["name"],
                      detail=data["type"]["detail"],
                      short_detail=data["type"]["shortDetail"])


def game_factory(data) -> Game:
    teams = []
    for team in data["competitors"]:
        teams.append(Team(name=team["team"]["displayName"],
                          abbr=team["team"]["abbreviation"],
                          runs=int(team["score"]),
                          hits=team["hits"],
                          errors=team["errors"]))

    home_team = teams[0]
    away_team = teams[1]

    status = parse_game_status(data["status"])

    game = Game(date=parser.parse(data["date"]),
                status=status,
                inning=status.detail,
                home_team=home_team,
                away_team=away_team)

    return game