# app/src/market_data/acquisition/service.py

from __future__ import annotations

from src.market_data.acquisition.models.instrument import Instrument
from src.market_data.acquisition.models.quote import Quote
from src.market_data.acquisition.registry import (
    InstrumentFeedRegistry,
    QuoteFeedRegistry,
)


# Application-level сервис получения справочника инструментов.
class InstrumentAcquisitionService:
    def __init__(
        self,
        *,
        registry: InstrumentFeedRegistry,
    ) -> None:
        self._registry = registry

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

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

        feed = self._registry.get(source_name)

        return feed.load_instruments()


# Application-level сервис получения текущих котировок.
class QuoteAcquisitionService:
    def __init__(
        self,
        *,
        registry: QuoteFeedRegistry,
    ) -> None:
        self._registry = registry

    def load_quote(
        self,
        source_name: str,
        symbol: str,
    ) -> Quote:
        """
        Получить Quotes Feed из Registry и загрузить текущую котировку.

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

        feed = self._registry.get(source_name)

        return feed.load_quote(symbol)
