from __future__ import annotations

import logging

import httpx

from config.settings import settings

logger = logging.getLogger(__name__)

TIMEOUT = 5.0


class BrainBotClient:
    """
    يرسل الإشارة إلى Brain Bot.
    فشل الإرسال لا يُوقف MACD Bot — يُسجَّل فقط.
    """

    def __init__(self) -> None:
        self._client: httpx.AsyncClient | None = None

    async def start(self) -> None:
        self._client = httpx.AsyncClient(
            base_url=settings.BRAIN_BOT_URL,
            timeout=TIMEOUT,
        )
        logger.info(f"BrainBotClient متصل بـ: {settings.BRAIN_BOT_URL}")

    async def stop(self) -> None:
        if self._client:
            await self._client.aclose()
        logger.info("BrainBotClient أُغلق")

    async def send_signal(self, payload: dict) -> bool:
        """
        POST /analysis_signal
        يُعيد True عند 202، False عند الفشل.
        """
        try:
            resp = await self._client.post("/analysis_signal", json=payload)
            if resp.status_code == 202:
                logger.info(
                    f"إشارة أُرسلت لـ Brain Bot: "
                    f"{payload['action']} {payload['symbol']} "
                    f"ثقة={payload['confidence']}"
                )
                return True
            logger.warning(
                f"Brain Bot رفض الإشارة: {resp.status_code} | {resp.text}"
            )
        except httpx.TimeoutException:
            logger.warning(f"timeout عند إرسال الإشارة لـ Brain Bot ({TIMEOUT}s)")
        except Exception as e:
            logger.warning(f"خطأ عند إرسال الإشارة لـ Brain Bot: {e}")
        return False


brain_client = BrainBotClient()
