from __future__ import annotations

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

from .base import Base


class MatchScheduleGame(Base):
    """SQLAlchemy ORM model for MatchScheduleGames"""

    __tablename__ = "MatchScheduleGame"

    # Primary Key - using GameId as primary key
    GameId: Mapped[str] = mapped_column(String, primary_key=True)

    # Basic Information
    OverviewPage: Mapped[str | None] = mapped_column(String, default=None)
    _pageName: Mapped[str | None] = mapped_column(String, default=None)

    # Team Information
    Blue: Mapped[str | None] = mapped_column(String, default=None)
    Red: Mapped[str | None] = mapped_column(String, default=None)
    BlueFinal: Mapped[str | None] = mapped_column(String, default=None)
    RedFinal: Mapped[str | None] = mapped_column(String, default=None)

    # Score and Result
    Winner: Mapped[int | None] = mapped_column(Integer, default=None)
    BlueScore: Mapped[int | None] = mapped_column(Integer, default=None)
    RedScore: Mapped[int | None] = mapped_column(Integer, default=None)

    # Game Status
    IsChronobreak: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsRemake: Mapped[bool | None] = mapped_column(Boolean, default=None)
    FF: Mapped[int | None] = mapped_column(Integer, default=None)

    # Pick/Ban Information
    Selection: Mapped[str | None] = mapped_column(String, default=None)
    PickSelection: Mapped[str | None] = mapped_column(String, default=None)
    FirstPick: Mapped[str | None] = mapped_column(String, default=None)
    FirstSelection: Mapped[str | None] = mapped_column(String, default=None)
    HasSelection: Mapped[bool | None] = mapped_column(Boolean, default=None)

    # VODs and Content
    MatchHistory: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    Recap: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    Reddit: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    Vod: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    VodPB: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    VodGameStart: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    VodPostgame: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    VodHighlights: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    VodInterview: Mapped[str | None] = mapped_column(Text, default=None)  # Wikitext
    InterviewWith: Mapped[str | None] = mapped_column(
        String, default=None
    )  # Comma-delimited list

    # MVP Information
    MVP: Mapped[str | None] = mapped_column(String, default=None)
    MVPPoints: Mapped[int | None] = mapped_column(Integer, default=None)

    # Navigation/Indexing
    N_MatchInTab: Mapped[int | None] = mapped_column(Integer, default=None)
    N_TabInPage: Mapped[int | None] = mapped_column(Integer, default=None)
    N_GameInMatch: Mapped[int | None] = mapped_column(Integer, default=None)
    N_Page: Mapped[int | None] = mapped_column(Integer, default=None)

    # Identifiers
    MatchId: Mapped[str | None] = mapped_column(String, default=None)
    RiotPlatformGameId: Mapped[str | None] = mapped_column(String, default=None)
    RiotPlatformId: Mapped[str | None] = mapped_column(String, default=None)
    RiotGameId: Mapped[str | None] = mapped_column(String, default=None)
    RiotHash: Mapped[str | None] = mapped_column(String, default=None)
    RiotVersion: Mapped[int | None] = mapped_column(Integer, default=None)
    HasRpgidInput: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IgnoreRpgid: Mapped[bool | None] = mapped_column(Boolean, default=None)
    VersionedRpgid: Mapped[str | None] = mapped_column(String, default=None)

    # Additional Content
    WrittenSummary: Mapped[str | None] = mapped_column(Text, default=None)

    # Footnotes
    BlueFootnote: Mapped[str | None] = mapped_column(Text, default=None)
    RedFootnote: Mapped[str | None] = mapped_column(Text, default=None)
    Footnote: Mapped[str | None] = mapped_column(Text, default=None)
