import os
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from openai import AsyncOpenAI
from dotenv import load_dotenv

# 환경 변수 로드 , 내 env 파일 최우선
load_dotenv(override=True)
openai_client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# FastAPI 앱 생성 및 CORS 설정
app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

# 요청 스키마 정의
class ChatReq(BaseModel):
    messages: list[dict]

# ────────────────────────────────
# 엔드포인트: 도메인 + /goalskill/back + 엔드포인트  
# ────────────────────────────────

# 1) GPT 채팅
@app.post("/goalskill/back/gpt-chat")
async def gpt_chat(req: ChatReq):
    try:
        res = await openai_client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=req.messages,
            temperature=0.7,
        )
        return {"reply": res.choices[0].message.content}
    except Exception as e:
        import traceback; traceback.print_exc()
        raise HTTPException(status_code=500, detail=str(e))

# 2) 대화 목록
@app.get("/goalskill/back/conversations")
async def list_conversations():
    # TODO: 실제 DB 조회로 변경
    return [
        {"id": 1, "title": "자기소개 테스트"},
        {"id": 2, "title": "회사추천 테스트"}
    ]

# 3) 대화 기록 저장
@app.post("/goalskill/back/save_transcript")
async def save_transcript(payload: dict):
    # payload = {"category": "...", "content": "..."}
    # TODO: 실제 DB 저장 로직
    return {"status": "saved"}

# 4) 헬스 체크
@app.get("/goalskill/back/health")
async def health():
    return {"status": "ok"}