from __future__ import annotations

from typing import Any, Dict

__all__ = ["detect_vendor"]


def detect_vendor(payload: Dict[str, Any] | None) -> str:
    """
    Определение вендора по форме payload.
    Возвращает одно из: "openai" | "gemini" | "claude" | "unknown".

    Правила (порядок важен):
    - Anthropic (Claude):
      * наличие ключа "anthropic_version" (официальный заголовок/поле)
      * явный маркер provider == "anthropic"
    - Gemini:
      * наличие "contents" или "generationConfig" (Google AI Studio / Vertex)
    - OpenAI:
      * наличие "messages" или "model"
    - Фоллбэк: "unknown"
    """
    if not isinstance(payload, dict):
        return "unknown"

    # Явные подсказки, если заранее указали
    hint = str(payload.get("vendor_format") or payload.get("vendor") or "").lower()
    if hint in {"openai", "gemini", "claude"}:
        return hint

    # Anthropic (Claude)
    if "anthropic_version" in payload or payload.get("provider") == "anthropic":
        return "claude"

    # Gemini (Google)
    if "contents" in payload or "generationConfig" in payload:
        return "gemini"

    # OpenAI
    if "messages" in payload or "model" in payload:
        return "openai"

    return "unknown"