from fastapi import APIRouter, Depends

from lmos_openai_types import CreateChatCompletionRequest, CreateCompletionRequest

from mcp_bridge.auth import get_api_key
from mcp_bridge.openai_clients import (
    client,
    completions,
    chat_completions,
    streaming_chat_completions, get_client,
)

from mcp_bridge.openapi_tags import Tag

router = APIRouter(prefix="/v1", tags=[Tag.openai])


@router.post("/completions")
async def openai_completions(request: CreateCompletionRequest, api_key: str = Depends(get_api_key)):
    """Completions endpoint"""
    if request.stream:
        raise NotImplementedError("Streaming Completion is not supported")
    else:
        return await completions(request, api_key)


@router.post("/chat/completions")
async def openai_chat_completions(request: CreateChatCompletionRequest, api_key: str = Depends(get_api_key)):
    """Chat Completions endpoint"""
    if request.stream:
        return await streaming_chat_completions(request, api_key)
    else:
        return await chat_completions(request, api_key)


@router.get("/models")
async def models(api_key: str = Depends(get_api_key)):
    """List models"""
    client = get_client(api_key)
    response = await client.get("/models")
    return response.json()
