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

from __future__ import annotations

from src.market_data.acquisition.models.candle import Candle
from src.market_data.acquisition.protocol import (
    CandlesDocumentHandler,
    CandlesDocumentSource,
)


class CandlesFeed:
    """
    Read-only Feed канонических рыночных свечей.

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

    def __init__(
        self,
        *,
        source: CandlesDocumentSource,
        handler: CandlesDocumentHandler,
    ) -> None:
        self._source = source
        self._handler = handler

    def load_candles(
        self,
        symbol: str,
        *,
        interval: str,
        limit: int,
        price_type: str,
    ) -> tuple[Candle, ...]:
        """
        Получить канонический immutable-набор свечей инструмента.
        """

        document = self._source.fetch_candles_document(
            symbol,
            interval=interval,
            limit=limit,
            price_type=price_type,
        )

        return self._handler.handle_candles_document(
            document,
            symbol=symbol,
            interval=interval,
            source=f"rest_klines:{price_type}",
        )