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

from __future__ import annotations

from src.market_data.acquisition.models.instrument import Instrument
from src.market_data.acquisition.protocol import (
    InstrumentDocumentHandler,
    InstrumentDocumentSource,
)


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

    def load_instruments(self) -> tuple[Instrument, ...]:
        """
        Получить документ от источника и преобразовать его в модели Instrument.

        Feed не выполняет transport, parsing, validation, mapping,
        кэширование или обработку ошибок самостоятельно.
        """

        document = self._source.fetch_instrument_document()

        return self._handler.handle_instrument_document(document)