from dotenv import load_dotenv

load_dotenv()  # .env 에서 OPENAI_API_KEY 로드

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

llm = ChatOpenAI(model="gpt-4o-mini")

# (1) 정답 — history 자리를 비워 둔 프롬프트
prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 친절한 AI 도우미입니다."),
    MessagesPlaceholder(variable_name="history"),  # 과거 대화가 들어갈 자리
    ("human", "{input}"),
])
chain = prompt | llm | StrOutputParser()

# (2) 정답 — 세션별 대화 기록 저장소
store = {}


def get_history(session_id):
    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]


chat = RunnableWithMessageHistory(
    chain,
    get_history,
    input_messages_key="input",
    history_messages_key="history",
)

# 같은 session_id 로 호출하면 이전 대화를 기억한다
config = {"configurable": {"session_id": "user-1"}}
print(chat.invoke({"input": "내 이름은 홍길동이야."}, config=config))
print(chat.invoke({"input": "내 이름이 뭐라고 했지?"}, config=config))
