"""Domain models for neural trading system."""

from __future__ import annotations

from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional

from .enums import TradeDirection


@dataclass
class NeuralSignal:
    """Neural network trading signal with predicted entry/SL/TP.

    Unified dataclass used by both inference pipeline and scanner.
    ``side`` stores "LONG"/"SHORT" as a string for convenience,
    ``ticker`` is optional (empty string for single-ticker contexts).
    """
    timestamp: int  # Unix timestamp
    side: str  # "LONG" or "SHORT"
    entry_price: float
    sl_price: float
    tp_price: float
    entry_probability: float = 0.0
    confidence: float = 0.0
    sl_distance_atr: float = 0.0
    tp_distance_atr: float = 0.0
    atr_at_signal: float = 0.0
    ticker: str = ""
    metadata: dict = field(default_factory=dict)


@dataclass
class Trade:
    """Completed trade record."""
    ticker: str
    direction: TradeDirection
    entry_price: float
    exit_price: float
    quantity: int
    entry_time: datetime
    exit_time: datetime
    pnl: float
    pnl_percent: float
    commission: float = 0.0
    slippage: float = 0.0
    sl_price: float = 0.0
    tp_price: float = 0.0
    status: str = "TP"

    @property
    def net_pnl(self) -> float:
        return self.pnl - self.commission - self.slippage
