"""Adapter factory — config-driven provider selection (docs/DATA_SOURCES.md §7)."""
from __future__ import annotations

from app.adapters.base import ProviderAdapter
from app.adapters.demo import DemoDataAdapter
from app.adapters.eodhd import EODHDAdapter
from app.adapters.fmp import FMPAdapter
from app.core.config import Settings


def build_adapter(name: str, settings: Settings) -> ProviderAdapter:
    if name == "DEMO":
        return DemoDataAdapter()
    if name == "FMP":
        if not settings.FMP_API_KEY:
            raise RuntimeError("PROVIDER_PRIMARY/SECONDARY=FMP but FMP_API_KEY is not set — see .env.example")
        return FMPAdapter(api_key=settings.FMP_API_KEY, base_url=settings.FMP_BASE_URL, timeout=settings.PROVIDER_REQUEST_TIMEOUT_SECONDS)
    if name == "EODHD":
        if not settings.EODHD_API_KEY:
            raise RuntimeError("PROVIDER_PRIMARY/SECONDARY=EODHD but EODHD_API_KEY is not set — see .env.example")
        return EODHDAdapter(api_key=settings.EODHD_API_KEY, base_url=settings.EODHD_BASE_URL, timeout=settings.PROVIDER_REQUEST_TIMEOUT_SECONDS)
    raise ValueError(f"Unknown provider: {name}")


def get_primary_adapter(settings: Settings) -> ProviderAdapter:
    return build_adapter(settings.PROVIDER_PRIMARY, settings)


def get_secondary_adapter(settings: Settings) -> ProviderAdapter | None:
    if settings.PROVIDER_SECONDARY == "NONE":
        return None
    return build_adapter(settings.PROVIDER_SECONDARY, settings)
