"""Feature models"""
from sqlalchemy import Column, Integer, String, ForeignKey, Date, Float, DateTime
from sqlalchemy.orm import relationship
from datetime import datetime
from app.core.db.database import Base


class TeamFormDaily(Base):
    """Daily aggregated team statistics"""
    __tablename__ = "team_form_daily"
    
    id = Column(Integer, primary_key=True, index=True)
    team_id = Column(Integer, ForeignKey("teams.id"), nullable=False, index=True)
    date = Column(Date, nullable=False, index=True)
    
    # Rolling statistics
    matches_played = Column(Integer, default=0)
    wins = Column(Integer, default=0)
    draws = Column(Integer, default=0)
    losses = Column(Integer, default=0)
    goals_for = Column(Integer, default=0)
    goals_against = Column(Integer, default=0)
    points = Column(Integer, default=0)
    
    # Home/Away split
    home_matches = Column(Integer, default=0)
    home_wins = Column(Integer, default=0)
    away_matches = Column(Integer, default=0)
    away_wins = Column(Integer, default=0)
    
    created_at = Column(DateTime, default=datetime.utcnow)
    
    __table_args__ = ({"sqlite_autoincrement": True},)


class Feature(Base):
    """Feature snapshot for a match"""
    __tablename__ = "features"
    
    id = Column(Integer, primary_key=True, index=True)
    match_id = Column(Integer, ForeignKey("matches.id"), nullable=False, index=True)
    calculated_at = Column(DateTime, default=datetime.utcnow, index=True)
    
    # Home team features
    home_goals_for_avg = Column(Float)
    home_goals_against_avg = Column(Float)
    home_points_avg = Column(Float)
    home_form_last_n = Column(Float)
    home_elo = Column(Float)
    home_days_rest = Column(Float)
    
    # Away team features
    away_goals_for_avg = Column(Float)
    away_goals_against_avg = Column(Float)
    away_points_avg = Column(Float)
    away_form_last_n = Column(Float)
    away_elo = Column(Float)
    away_days_rest = Column(Float)
    
    # Head-to-head
    h2h_home_wins = Column(Integer, default=0)
    h2h_draws = Column(Integer, default=0)
    h2h_away_wins = Column(Integer, default=0)
    
    # Raw feature vector (JSON string for flexibility)
    feature_vector = Column(String)  # JSON array

