from __future__ import annotations

from datetime import date

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

from .base import Base


class Player(Base):
    __tablename__ = "Players"

    # Primary Key
    ID: Mapped[str] = mapped_column(String, primary_key=True)

    # Basic Information
    OverviewPage: Mapped[str | None] = mapped_column(String, default=None)
    Player: Mapped[str | None] = mapped_column(String, default=None)
    Image: Mapped[str | None] = mapped_column(String, default=None)
    Name: Mapped[str | None] = mapped_column(String, default=None)
    NativeName: Mapped[str | None] = mapped_column(String, default=None)
    NameAlphabet: Mapped[str | None] = mapped_column(String, default=None)
    NameFull: Mapped[str | None] = mapped_column(String, default=None)

    # Location/Nationality
    Country: Mapped[str | None] = mapped_column(String, default=None)
    Nationality: Mapped[str | None] = mapped_column(String, default=None)
    NationalityPrimary: Mapped[str | None] = mapped_column(String, default=None)

    # Demographics
    Age: Mapped[int | None] = mapped_column(Integer, default=None)
    Birthdate: Mapped[date | None] = mapped_column(Date, default=None)
    Deathdate: Mapped[date | None] = mapped_column(Date, default=None)

    # Team Information
    ResidencyFormer: Mapped[str | None] = mapped_column(String, default=None)
    Team: Mapped[str | None] = mapped_column(String, default=None)
    Team2: Mapped[str | None] = mapped_column(String, default=None)
    CurrentTeams: Mapped[str | None] = mapped_column(String, default=None)
    TeamSystem: Mapped[str | None] = mapped_column(String, default=None)
    Team2System: Mapped[str | None] = mapped_column(String, default=None)
    Residency: Mapped[str | None] = mapped_column(String, default=None)

    # Role/Contract
    Role: Mapped[str | None] = mapped_column(String, default=None)
    Contract: Mapped[date | None] = mapped_column(Date, default=None)
    ContractText: Mapped[str | None] = mapped_column(String, default=None)

    # Game Information
    FavChamps: Mapped[str | None] = mapped_column(String, default=None)
    SoloqueueIds: Mapped[str | None] = mapped_column(Text, default=None)

    # Social Media
    Askfm: Mapped[str | None] = mapped_column(String, default=None)
    Bluesky: Mapped[str | None] = mapped_column(String, default=None)
    Discord: Mapped[str | None] = mapped_column(Text, default=None)
    Facebook: Mapped[str | None] = mapped_column(Text, default=None)
    Instagram: Mapped[str | None] = mapped_column(String, default=None)
    Lolpros: Mapped[str | None] = mapped_column(String, default=None)
    DPMLOL: Mapped[str | None] = mapped_column(String, default=None)
    Reddit: Mapped[str | None] = mapped_column(String, default=None)
    Snapchat: Mapped[str | None] = mapped_column(String, default=None)
    Stream: Mapped[str | None] = mapped_column(Text, default=None)
    KICK: Mapped[str | None] = mapped_column(String, default=None)
    Twitter: Mapped[str | None] = mapped_column(String, default=None)
    Threads: Mapped[str | None] = mapped_column(String, default=None)
    LinkedIn: Mapped[str | None] = mapped_column(Text, default=None)
    Vk: Mapped[str | None] = mapped_column(Text, default=None)
    Website: Mapped[str | None] = mapped_column(Text, default=None)
    Weibo: Mapped[str | None] = mapped_column(Text, default=None)
    Youtube: Mapped[str | None] = mapped_column(Text, default=None)

    # Historical Information
    TeamLast: Mapped[str | None] = mapped_column(String, default=None)
    RoleLast: Mapped[str | None] = mapped_column(
        String, default=None
    )  # Semicolon-delimited list

    # Boolean Flags
    IsRetired: Mapped[bool | None] = mapped_column(Boolean, default=None)
    ToWildrift: Mapped[bool | None] = mapped_column(Boolean, default=None)
    ToValorant: Mapped[bool | None] = mapped_column(Boolean, default=None)
    ToTFT: Mapped[bool | None] = mapped_column(Boolean, default=None)
    ToLegendsOfRuneterra: Mapped[bool | None] = mapped_column(Boolean, default=None)
    To2XKO: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsPersonality: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsSubstitute: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsTrainee: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsLowercase: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsAutoTeam: Mapped[bool | None] = mapped_column(Boolean, default=None)
    IsLowContent: Mapped[bool | None] = mapped_column(Boolean, default=None)


class PlayerRedirect(Base):
    __tablename__ = "PlayerRedirects"

    ID: Mapped[str] = mapped_column(String, primary_key=True)
    AllName: Mapped[str] = mapped_column(String)
    OverviewPage: Mapped[str] = mapped_column(String)
