"""
CV6 AI Trading OS — Paper Trading Models
"""
from pydantic import BaseModel, Field
from typing import Optional, List


class PaperTradeRequest(BaseModel):
    capital: Optional[float] = Field(default=None, gt=0)  # positive if supplied
    symbol: str = Field(min_length=1, max_length=20)       # H-8 FIX: no empty symbol
    action: str                                            # BUY | SELL
    quantity: int = Field(gt=0)                            # H-7 FIX: quantity > 0
    entry_price: float = Field(gt=0)                       # H-9 FIX: price > 0 (no free-money exploit)
    stop_loss: Optional[float] = Field(default=None, gt=0)
    target_price: Optional[float] = Field(default=None, gt=0)
    order_type: Optional[str] = "MARKET"
    product: Optional[str] = "INTRADAY"


class PaperTradeResponse(BaseModel):
    success: bool
    message: str
    symbol: str
    action: str
    quantity: int
    entry_price: float
    invested_amount: float
    remaining_capital: float
    total_capital: float
    open_positions: int
    realized_pnl: float
    unrealized_pnl: float


class PaperPosition(BaseModel):
    symbol: str
    side: str
    quantity: int
    entry_price: float
    ltp: float
    pnl: float
    pnl_pct: float
    stop_loss: Optional[float] = None
    target_price: Optional[float] = None


class PaperAccountResponse(BaseModel):
    total_capital: float
    available_capital: float
    invested_amount: float
    realized_pnl: float
    unrealized_pnl: float
    total_pnl: float
    open_positions: List[PaperPosition]
    trade_count: int
    win_count: int
    loss_count: int
    win_rate: float


class PaperCancelRequest(BaseModel):
    symbol: str
