"""Pytest configuration for benchmark tests."""

import os
from collections.abc import Generator

import pytest
from langsmith import Client, get_tracing_context


@pytest.fixture(scope="session", autouse=True)
def langsmith_client() -> Generator[Client | None, None, None]:
    """Create a LangSmith client if `LANGSMITH_API_KEY` is set.

    This fixture is session-scoped and automatically used by all tests.
    It creates a single client instance and ensures it's flushed after
    each test.
    """
    langsmith_api_key = os.environ.get("LANGSMITH_API_KEY") or os.environ.get(
        "LANGCHAIN_API_KEY"
    )

    if langsmith_api_key:
        client = get_tracing_context()["client"] or Client()
        yield client

        # Final flush at end of session
        client.flush()
    else:
        yield None


@pytest.fixture(autouse=True)
def flush_langsmith_after_test(langsmith_client: Client) -> Generator[None, None, None]:
    """Automatically flush LangSmith client after each test."""
    yield

    # This runs after each test
    if langsmith_client is not None:
        langsmith_client.flush()
