from datetime import datetime

from sqlalchemy import DateTime, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column

from .base import Base


class ScoreboardPlayer(Base):
    __tablename__ = "ScoreboardPlayers"

    # This ISNT a primary key ??
    # But we need one otherwise SQLAlchemy will complain
    # As this table is used for query only, this is fine.
    GameId: Mapped[str] = mapped_column(String, primary_key=True)

    # Player Information
    OverviewPage: Mapped[str | None] = mapped_column(String, default=None)
    Name: Mapped[str | None] = mapped_column(String, default=None)
    Link: Mapped[str | None] = mapped_column(String, default=None)

    # Champion & Build
    Champion: Mapped[str | None] = mapped_column(String, default=None)
    SummonerSpells: Mapped[str | None] = mapped_column(String, default=None)
    Items: Mapped[str | None] = mapped_column(String, default=None)
    RoleBoundItem: Mapped[str | None] = mapped_column(String, default=None)
    Trinket: Mapped[str | None] = mapped_column(String, default=None)

    # Runes
    KeystoneMastery: Mapped[str | None] = mapped_column(String, default=None)
    KeystoneRune: Mapped[str | None] = mapped_column(String, default=None)
    PrimaryTree: Mapped[str | None] = mapped_column(String, default=None)
    SecondaryTree: Mapped[str | None] = mapped_column(String, default=None)
    Runes: Mapped[str | None] = mapped_column(Text, default=None)

    # Player Stats
    Kills: Mapped[int | None] = mapped_column(Integer, default=None)
    Deaths: Mapped[int | None] = mapped_column(Integer, default=None)
    Assists: Mapped[int | None] = mapped_column(Integer, default=None)
    Gold: Mapped[int | None] = mapped_column(Integer, default=None)
    CS: Mapped[int | None] = mapped_column(Integer, default=None)
    DamageToChampions: Mapped[int | None] = mapped_column(Integer, default=None)
    VisionScore: Mapped[int | None] = mapped_column(Integer, default=None)
    Pentakills: Mapped[int | None] = mapped_column(Integer, default=None)

    # Team Stats
    TeamKills: Mapped[int | None] = mapped_column(Integer, default=None)
    TeamGold: Mapped[int | None] = mapped_column(Integer, default=None)
    Team: Mapped[str | None] = mapped_column(String, default=None)
    TeamVs: Mapped[str | None] = mapped_column(String, default=None)

    # Game Information
    Time: Mapped[datetime | None] = mapped_column(DateTime, default=None)
    PlayerWin: Mapped[str | None] = mapped_column(String, default=None)
    DateTime_UTC: Mapped[datetime | None] = mapped_column(DateTime, default=None)
    DST: Mapped[str | None] = mapped_column(String, default=None)
    Tournament: Mapped[str | None] = mapped_column(String, default=None)

    # Role Information
    Role: Mapped[str | None] = mapped_column(String, default=None)
    Role_Number: Mapped[int | None] = mapped_column(Integer, default=None)
    IngameRole: Mapped[str | None] = mapped_column(String, default=None)
    Side: Mapped[int | None] = mapped_column(Integer, default=None)

    # Unique Identifiers
    UniqueLine: Mapped[str | None] = mapped_column(String, default=None)
    UniqueLineVs: Mapped[str | None] = mapped_column(String, default=None)
    UniqueRole: Mapped[str | None] = mapped_column(String, default=None)
    UniqueRoleVs: Mapped[str | None] = mapped_column(String, default=None)

    # IDs
    MatchId: Mapped[str | None] = mapped_column(String, default=None)
    GameTeamId: Mapped[str | None] = mapped_column(String, default=None)
    GameRoleId: Mapped[str | None] = mapped_column(String, default=None)
    GameRoleIdVs: Mapped[str | None] = mapped_column(String, default=None)
    StatsPage: Mapped[str | None] = mapped_column(String, default=None)
