# app/src/integrations/exchange/exceptions.py

from __future__ import annotations


class ExchangeError(Exception):
    """Base exchange integration error."""


class ExchangeConnectionError(ExchangeError):
    """HTTP/network/timeout level exchange error."""


class ExchangeResponseError(ExchangeError):
    """Unexpected HTTP response or malformed JSON."""


def is_exchange_time_sync_error(exc: Exception) -> bool:
    text = str(exc).lower()
    return (
        "-1021" in text
        or "doesn't match server time" in text
        or "server time" in text and "match" in text
        or "рассинхрон" in text
    )


def format_exchange_error_for_user(exc: Exception) -> str:
    if is_exchange_time_sync_error(exc):
        return (
            "Биржа отклонила запрос из-за рассинхронизации времени. "
            "Проверь системное время и повтори попытку."
        )

    if isinstance(exc, ExchangeConnectionError):
        return (
            "Не удалось получить данные биржи: таймаут или ошибка сети. "
            "Попробуй ещё раз через несколько секунд."
        )

    if isinstance(exc, ExchangeResponseError):
        return (
            "Биржа вернула ошибку ответа. "
            "Попробуй ещё раз через несколько секунд."
        )

    if isinstance(exc, ExchangeError):
        return (
            "Не удалось получить данные биржи. "
            "Попробуй ещё раз через несколько секунд."
        )

    return "Временная ошибка получения данных биржи. Попробуй ещё раз через несколько секунд."