"""Match and MatchEvent models (football schema)"""

from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
from sqlalchemy.orm import relationship
from datetime import datetime
import enum
from app.core.db.database import Base


class MatchStatus(str, enum.Enum):
    """Match status"""
    SCHEDULED = "scheduled"
    LIVE = "live"
    FINISHED = "finished"
    POSTPONED = "postponed"
    CANCELLED = "cancelled"


class Match(Base):
    """Match/Game"""
    __tablename__ = "matches"
    
    id = Column(Integer, primary_key=True, index=True)
    league_id = Column(Integer, ForeignKey("leagues.id"), nullable=False)
    season_id = Column(Integer, ForeignKey("seasons.id"))
    home_team_id = Column(Integer, ForeignKey("teams.id"), nullable=False)
    away_team_id = Column(Integer, ForeignKey("teams.id"), nullable=False)
    
    # Mapped to `kickoff_at` in our DB schema
    match_date = Column("kickoff_at", DateTime, nullable=False, index=True)
    status = Column(String, default=MatchStatus.SCHEDULED.value, index=True)
    
    # Mapped to full-time scores in our DB schema
    home_score = Column("ft_home", Integer)
    away_score = Column("ft_away", Integer)

    # Convenience source fields (added via SQL patch)
    source_url = Column(String)
    source_id = Column(String, unique=True, index=True)
    
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    
    # Relationships
    league = relationship("League", back_populates="matches")
    season = relationship("Season", back_populates="matches")
    home_team = relationship("Team", foreign_keys=[home_team_id], back_populates="home_matches")
    away_team = relationship("Team", foreign_keys=[away_team_id], back_populates="away_matches")
    events = relationship("MatchEvent", back_populates="match", cascade="all, delete-orphan")
    predictions = relationship("Prediction", back_populates="match")


class MatchEvent(Base):
    """Match event (goal, card, etc.)"""
    __tablename__ = "match_events"
    
    id = Column(Integer, primary_key=True, index=True)
    match_id = Column(Integer, ForeignKey("matches.id"), nullable=False)
    event_type = Column(String, nullable=False)  # goal, card, substitution
    team_id = Column(Integer, ForeignKey("teams.id"))
    player_name = Column(String)
    minute = Column(Integer)
    description = Column(String)
    
    match = relationship("Match", back_populates="events")

