from datetime import datetime
from sqlalchemy import Column, Integer, String, Float, Boolean, JSON, DateTime
from app.database import Base


class Strategy(Base):
    __tablename__ = "strategies"

    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    name = Column(String(100), nullable=False, unique=True, index=True)
    enabled = Column(Boolean, nullable=False, default=True)
    # Weight used in weighted signal aggregation (0.0 - 1.0)
    weight = Column(Float, nullable=False, default=1.0)
    win_rate = Column(Float, nullable=True, default=0.0)
    total_signals = Column(Integer, nullable=False, default=0)
    winning_signals = Column(Integer, nullable=False, default=0)
    # Strategy-specific configuration parameters
    params = Column(JSON, nullable=True, default=dict)
    created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
    updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)

    def to_dict(self) -> dict:
        return {
            "id": self.id,
            "name": self.name,
            "enabled": self.enabled,
            "weight": self.weight,
            "win_rate": self.win_rate,
            "total_signals": self.total_signals,
            "winning_signals": self.winning_signals,
            "params": self.params,
            "created_at": self.created_at.isoformat() if self.created_at else None,
            "updated_at": self.updated_at.isoformat() if self.updated_at else None,
        }
