# app/src/trading/decision/validation.py

from __future__ import annotations

from src.trading.market_intelligence.common.models import CoordinatorResult
from src.trading.decision.exceptions import (
    TradingValidationError,
)


class TradingValidation:
    """Проверка входного CoordinatorResult для Trading Layer."""

    def validate(
        self,
        coordinator_result: CoordinatorResult,
    ) -> None:
        """Проверить CoordinatorResult перед принятием торгового решения."""
        self._validate_result_exists(coordinator_result)
        self._validate_result_usable(coordinator_result)
        self._validate_result_has_no_errors(coordinator_result)

    def _validate_result_exists(
        self,
        coordinator_result: CoordinatorResult,
    ) -> None:
        """Проверить, что CoordinatorResult передан."""
        if coordinator_result is None:
            raise TradingValidationError(
                "CoordinatorResult is required for Trading."
            )

    def _validate_result_usable(
        self,
        coordinator_result: CoordinatorResult,
    ) -> None:
        """Проверить пригодность CoordinatorResult для принятия решения."""
        if not coordinator_result.is_usable:
            raise TradingValidationError(
                "CoordinatorResult is not usable."
            )

    def _validate_result_has_no_errors(
        self,
        coordinator_result: CoordinatorResult,
    ) -> None:
        """Проверить отсутствие критических ошибок Coordinator."""
        if coordinator_result.has_errors:
            raise TradingValidationError(
                "CoordinatorResult contains errors."
            )