"""OpenAI API key extraction from request headers."""

from __future__ import annotations

import os

from fastapi import Request, HTTPException

_HEADER_NAME = "x-openai-api-key"


def get_openai_api_key(request: Request) -> str | None:
    """Extract OpenAI API key from request header, falling back to env var.

    Returns the key or None if neither source is available.
    """
    return (
        request.headers.get(_HEADER_NAME)
        or os.environ.get("CRYSTALLISE_OPENAI_API_KEY")
        or os.environ.get("OPENAI_API_KEY")
    )


def require_openai_api_key(request: Request) -> str:
    """Extract OpenAI API key or raise 400 if unavailable."""
    key = get_openai_api_key(request)
    if not key:
        raise HTTPException(
            status_code=400,
            detail="OpenAI API key required. Set X-OpenAI-API-Key header or configure CRYSTALLISE_OPENAI_API_KEY.",
        )
    return key
