"""Provider registry. Real adapters are created lazily so missing keys only fail when used."""
from __future__ import annotations
import os

from .base import Provider

_instances: dict[str, Provider] = {}


def get_provider(name: str) -> Provider:
    if name not in _instances:
        if name == "anthropic":
            from .anthropic_ import AnthropicProvider
            _instances[name] = AnthropicProvider(os.environ.get("ANTHROPIC_API_KEY"))
        elif name == "openai":
            from .openai_ import OpenAIProvider
            _instances[name] = OpenAIProvider(os.environ.get("OPENAI_API_KEY"))
        elif name == "google":
            from .google_ import GoogleProvider
            _instances[name] = GoogleProvider(os.environ.get("GOOGLE_API_KEY"))
        elif name == "fake":
            from .fake import FakeProvider
            _instances[name] = FakeProvider()
        else:
            raise ValueError(f"unknown provider {name}")
    return _instances[name]


def set_provider(name: str, p: Provider) -> None:   # tests
    _instances[name] = p
