# src/risk/stops/base.py

from abc import ABC, abstractmethod
import pandas as pd
from src.core.trade import TradeType


class StopLoss(ABC):
    """
    Interfaz base para Stop Loss.

    Un stop:
    - NO ejecuta órdenes
    - NO calcula size
    - SOLO devuelve un precio de stop
    """

    @abstractmethod
    def get_stop_price(
        self,
        *,
        data: pd.DataFrame,
        idx: int,
        entry_price: float,
        trade_type: TradeType
    ) -> float:
        """
        Devuelve el precio del stop.

        Args:
            data: DataFrame OHLCV
            idx: índice temporal actual
            entry_price: precio de entrada
            trade_type: LONG o SHORT

        Returns:
            stop_price (float)
        """
        pass

    def update_stop(
        self,
        *,
        data: pd.DataFrame,
        idx: int,
        position
    ):
        """
        Por defecto: stop NO dinámico.
        Devuelve None → no mover stop.
        """
        return None
