from abc import ABC, abstractmethod
from typing import Any

from models.platform import ConnectorStatus, PlatformId, TradeIntent


class PlatformConnector(ABC):
    """Contrat commun pour chaque plateforme (TV, Tradovate, Ninja…)."""

    platform_id: PlatformId
    display_name: str

    @abstractmethod
    def status(self) -> ConnectorStatus:
        """Etat du connecteur pour le dashboard / API."""

    @abstractmethod
    async def handle_inbound(self, payload: dict[str, Any]) -> dict[str, Any]:
        """Webhook ou message entrant depuis la plateforme."""

    def parse_intent(self, payload: dict[str, Any]) -> TradeIntent | None:
        """Optionnel — extraire une intention de trade du payload."""
        return None
