from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_agent
from langgraph.checkpoint.memory import MemorySaver

from agent_utils import run_agent

load_dotenv()


@tool
def get_weather(city: str) -> str:
    """도시 날씨 조회."""
    return {"서울": "맑음, 22도", "부산": "흐림, 25도"}.get(city, "정보 없음")


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

# (1) 정답 — checkpointer 한 줄로 메모리 활성화
agent = create_agent(llm, [get_weather], checkpointer=MemorySaver())

if __name__ == "__main__":
    # (2) 정답 — 같은 thread "alice" 는 맥락 유지
    alice = {"configurable": {"thread_id": "alice"}}
    run_agent(agent, "내 이름은 앨리스야. 기억해줘.", config=alice)
    run_agent(agent, "내가 사는 곳은 서울이야. 날씨 어때?", config=alice)
    run_agent(agent, "내 이름이 뭐였지?", config=alice)

    # 다른 thread "bob" 은 격리 (앨리스를 모름)
    print("\n--- 다른 세션(bob): 격리 확인 ---")
    bob = {"configurable": {"thread_id": "bob"}}
    run_agent(agent, "내 이름이 뭐였지?", config=bob)
