"""
Chat router for basic chat functionality
"""

import os
import httpx
from fastapi import APIRouter, Depends
from fastapi.responses import StreamingResponse

from models.chat import ChatRequest, ChatResponse
from core.dependencies import get_access_token

router = APIRouter(prefix="/chat", tags=["chat"])


async def gemini_stream(chat_message, access_token, api_url):
    """Streaming generator for Gemini API response"""
    headers = {
        "Content-Type": "application/json",
        "X-goog-api-key": access_token
    }
    payload = {
        "contents": [{"parts": [{"text": chat_message}]}],
        "stream": True
    }
    async with httpx.AsyncClient() as client:
        async with client.stream("POST", api_url, json=payload, headers=headers) as response:
            async for chunk in response.aiter_text():
                yield chunk


@router.post("", response_model=ChatResponse)
async def chat_endpoint(chat: ChatRequest, access_token: str = Depends(get_access_token)):
    """Process a basic chat message using Gemini API"""
    GEMINI_API_URL = os.getenv("GEMINI_API_URL", 
                              "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent")
    return StreamingResponse(
        gemini_stream(chat.message, access_token, GEMINI_API_URL),
        media_type="text/plain"
    )
