# ============================================================
# [실습] 초간단 GUI RAG 챗봇 (Flask + static 서빙 + REST API)
#
# day1 RAG(검색+생성)를 '웹 입력창'으로. 프론트(static/rag.html, rag.js)는 제공됨.
# 아래 항목을 직접 구현하세요:
#  1) get_embedding(text) 와 doc_embeddings: 문서들을 임베딩해 둔다.
#  2) rag_answer(question): 검색(코사인 최대 문서) + gpt-4o-mini 답변 → (문서, 답변) 반환.
#  3) POST /api/rag : {"message": ...} 받아 {"retrieved": ..., "answer": ...} 반환
#
# 실행:  python 12_gui_rag_실습.py  →  http://localhost:5000
# ============================================================

import os
import numpy as np
from flask import Flask, request, jsonify, send_from_directory
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

documents = [
    "Python은 강력한 프로그래밍 언어입니다.",
    "OpenAI는 AI 연구를 선도하는 기업입니다.",
    "FAISS는 벡터 검색을 위한 라이브러리입니다.",
]


def get_embedding(text):
    # 1) 여기에 코드를 작성하세요
    pass


# 1) 여기에 코드를 작성하세요 (위 documents 를 임베딩해 doc_embeddings 로 보관)


def rag_answer(question):
    # 2) 여기에 코드를 작성하세요 (질문 임베딩 → 최근접 문서 검색 → 프롬프트 → gpt-4o-mini → (문서, 답변))
    pass


app = Flask(__name__)


@app.route("/")
def index():
    return send_from_directory(app.static_folder, "rag.html")


@app.route("/api/rag", methods=["POST"])
def rag():
    question = request.json["message"]
    retrieved_doc, answer = rag_answer(question)
    return jsonify({"retrieved": retrieved_doc, "answer": answer})


if __name__ == "__main__":
    app.run(debug=True, port=5000)
