from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import StreamingResponse
from app.models.chat import ChatRequest, ChatResponse

from app.services.langgraph_agent_service import LangGraphAgentService, get_langgraph_service
router = APIRouter()

@router.post("/chat/stream", summary="Stream chat response using SSE with structured output")
async def chat_stream_endpoint(
    request: ChatRequest, 
    langgraph_agent_service: LangGraphAgentService = Depends(get_langgraph_service)
):
    """
    Stream the query response using Server-Sent Events (SSE) while
    maintaining a structured output. Yields partial JSON chunks.
    """
    try:
        return StreamingResponse(
            langgraph_agent_service.stream_answer(request.query, request.history),
            media_type="text/event-stream"
        )
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
