"""Event-related data models."""
from __future__ import annotations
import datetime
from typing import Literal
from enum import Enum
from dataclasses import dataclass, field
# Enums for autocomplete
[docs]
class EventTier(str, Enum):
"""Event tier options."""
ALL = "all"
VCT = "vct"
VCL = "vcl"
T3 = "t3"
GC = "gc"
CG = "cg"
OFFSEASON = "offseason"
[docs]
class EventStatus(str, Enum):
"""Event status filter options."""
ALL = "all"
UPCOMING = "upcoming"
ONGOING = "ongoing"
COMPLETED = "completed"
# Type aliases for backward compatibility
TierName = Literal["all", "vct", "vcl", "t3", "gc", "cg", "offseason"]
StatusFilter = Literal["all", "upcoming", "ongoing", "completed"]
_TIER_TO_ID: dict[str, str] = {
"all": "all",
"vct": "60",
"vcl": "61",
"t3": "62",
"gc": "63",
"cg": "64",
"offseason": "67",
}
[docs]
@dataclass(frozen=True)
class ListEvent:
"""Event summary from events listing."""
id: int
name: str
status: Literal["upcoming", "ongoing", "completed"]
url: str
region: str | None = None
start_date: datetime.date | None = None
end_date: datetime.date | None = None
start_text: str | None = None
end_text: str | None = None
prize: str | None = None
[docs]
@dataclass(frozen=True)
class Info:
"""Event header/info details."""
id: int
name: str
subtitle: str | None = None
date_text: str | None = None
start_date: datetime.date | None = None
end_date: datetime.date | None = None
prize: str | None = None
location: str | None = None
regions: list[str] = field(default_factory=list)
[docs]
@dataclass(frozen=True)
class MatchTeam:
"""Team in an event match."""
name: str
id: int | None = None
country: str | None = None
score: int | None = None
is_winner: bool | None = None
[docs]
@dataclass(frozen=True)
class Match:
"""Event match entry."""
match_id: int
event_id: int
status: str
teams: tuple["MatchTeam", "MatchTeam"]
url: str
stage: str | None = None
phase: str | None = None
date: datetime.date | None = None
time: str | None = None
[docs]
@dataclass(frozen=True)
class StageMatches:
"""Match summary for a stage."""
name: str
match_count: int
completed: int
upcoming: int
ongoing: int
start_date: datetime.date | None = None
end_date: datetime.date | None = None
[docs]
@dataclass(frozen=True)
class MatchSummary:
"""Event matches summary."""
event_id: int
total_matches: int
completed: int
upcoming: int
ongoing: int
stages: list["StageMatches"] = field(default_factory=list)
[docs]
@dataclass(frozen=True)
class Team:
"""Team information for an event."""
id: int
name: str
type: str | None = None
[docs]
@dataclass(frozen=True)
class StandingEntry:
"""Single standing entry."""
place: str
prize: str | None = None
team_id: int | None = None
team_name: str | None = None
team_country: str | None = None
note: str | None = None
[docs]
@dataclass(frozen=True)
class Standings:
"""Event standings."""
event_id: int
stage_path: str
url: str
entries: list["StandingEntry"] = field(default_factory=list)
[docs]
@dataclass(frozen=True)
class EventStage:
"""Available stage option for an event matches page."""
name: str
series_id: str
url: str