# app/src/market_data/acquisition/feeds/quotes_feed.py

from __future__ import annotations

from src.market_data.acquisition.models.quote import Quote
from src.market_data.acquisition.protocol import (
    QuoteDocumentHandler,
    QuoteDocumentSource,
)


# Feed текущих котировок: получает документ и передаёт его обработчику.
class QuotesFeed:
    def __init__(
        self,
        *,
        source: QuoteDocumentSource,
        handler: QuoteDocumentHandler,
    ) -> None:
        self._source = source
        self._handler = handler

    def load_quote(
        self,
        symbol: str,
    ) -> Quote:
        """
        Получить документ котировки и преобразовать его в модель Quote.

        Feed не выполняет transport, parsing, validation, mapping,
        нормализацию symbol, retry, кэширование или обработку ошибок.
        """

        document = self._source.fetch_quote_document(symbol)

        return self._handler.handle_quote_document(document)
