"""
=========================================
CV6 AI Trading OS
Trade History — SQLAlchemy Model
Uses the existing project Base & engine
=========================================
"""

import time
import uuid
from sqlalchemy import Column, String, Integer, Float, Text
from app.database.base import Base


class TradeHistory(Base):
    """
    SQLAlchemy ORM model for trade history.
    Stores executed, cancelled, and rejected orders with PnL.
    """

    __tablename__ = "trade_history"

    id              = Column(Integer, primary_key=True, autoincrement=True)
    order_id        = Column(String(64), unique=True, index=True,
                             default=lambda: str(uuid.uuid4()))
    broker_order_id = Column(String(64), default="", index=True)
    broker          = Column(String(32), default="", index=True)
    symbol          = Column(String(32), nullable=False, index=True)
    exchange        = Column(String(16), default="NSE")
    trade_type      = Column(String(8),  nullable=False)   # BUY | SELL
    status          = Column(String(16), nullable=False, index=True)  # EXECUTED|CANCELLED|REJECTED|PENDING
    quantity        = Column(Integer, default=0)
    price           = Column(Float, default=0.0)
    avg_price       = Column(Float, default=0.0)
    filled_qty      = Column(Integer, default=0)
    product         = Column(String(8), default="MIS")     # MIS|CNC|NRML
    order_type      = Column(String(16), default="MARKET") # MARKET|LIMIT|SL
    pnl             = Column(Float, default=0.0)
    charges         = Column(Float, default=0.0)           # brokerage + taxes
    ai_signal       = Column(String(8), default="")        # BUY|SELL|HOLD
    ai_confidence   = Column(Float, default=0.0)
    strategy        = Column(String(64), default="")
    notes           = Column(Text, default="")
    placed_at       = Column(Float, default=lambda: time.time())
    executed_at     = Column(Float, nullable=True)
    updated_at      = Column(Float, default=lambda: time.time())
