# ============================================================
# 12. FastAPI 웹 티어 + Python AI 챗봇 연동
#
# 스프링부트와 '가장 닮은' 파이썬 프레임워크: 타입 힌트 기반 요청 스키마(Pydantic = DTO),
# 데코레이터 라우팅, 의존성 주입, 자동 OpenAPI 문서(/docs) — 구조는 비슷한데 코드가 훨씬 짧다.
#
#   [브라우저] --/api/chat--> [FastAPI :8000] --/chat--> [Python AI :5000] --> OpenAI
#
# 실행:  uvicorn main:app --port 8000 --reload     (http://localhost:8000)
#   pip install -r requirements.txt
# ============================================================

import httpx
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel

AI_URL = "http://localhost:5000/chat"          # 공통 Python AI 서비스
app = FastAPI()


class ChatRequest(BaseModel):                   # 요청 본문 스키마 (스프링의 DTO 에 해당)
    message: str


@app.post("/api/chat")
async def chat(req: ChatRequest):
    async with httpx.AsyncClient() as client:
        r = await client.post(AI_URL, json={"message": req.message})
    return {"reply": r.json()["reply"]}


# 정적 화면(index.html/app.js) 서빙 — API 라우트보다 뒤에 마운트한다.
app.mount("/", StaticFiles(directory="static", html=True), name="static")
