import logfire
from openai import AsyncOpenAI

from app.config import get_settings


async def generate_embedding(text: str) -> list[float]:
    settings = get_settings()
    if not settings.APP_OPENAI_API_KEY:
        raise ValueError("APP_OPENAI_API_KEY not configured")

    client = AsyncOpenAI(api_key=settings.APP_OPENAI_API_KEY)

    with logfire.span("rag.embed", text_length=len(text)):
        response = await client.embeddings.create(
            model="text-embedding-3-small",
            input=text,
        )

    return response.data[0].embedding


async def generate_embeddings_batch(texts: list[str]) -> list[list[float]]:
    if not texts:
        return []

    settings = get_settings()
    if not settings.APP_OPENAI_API_KEY:
        raise ValueError("APP_OPENAI_API_KEY not configured")

    client = AsyncOpenAI(api_key=settings.APP_OPENAI_API_KEY)

    with logfire.span("rag.embed_batch", text_count=len(texts)):
        response = await client.embeddings.create(
            model="text-embedding-3-small",
            input=texts,
        )

    return [item.embedding for item in sorted(response.data, key=lambda item: item.index)]
