from dotenv import load_dotenv

load_dotenv()  # .env 에서 OPENAI_API_KEY 로드

from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
from langchain_openai import ChatOpenAI

examples = [
    {"sentence": "오늘 정말 최고의 하루였어!", "result": "감정: 긍정 / 점수: 9"},
    {"sentence": "이거 진짜 별로네요. 시간 낭비였어요.", "result": "감정: 부정 / 점수: 2"},
    {"sentence": "그냥 평범했어요. 특별히 좋지도 나쁘지도 않았네요.", "result": "감정: 중립 / 점수: 5"},
]

# (1) 정답 — 예제 한 건을 어떤 '메시지 쌍' 으로 만들지 정의
example_prompt = ChatPromptTemplate.from_messages([
    ("human", "{sentence}"),
    ("ai",    "{result}"),
])

# examples 를 위 쌍으로 펼쳐 주는 few-shot 블록
fewshot_messages = FewShotChatMessagePromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
)

# system + (few-shot 메시지들이 펼쳐짐) + 진짜 user 입력
final_prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 한국어 감정 분석기입니다. 사용자 문장에 대해 '감정: X / 점수: N' 형식으로만 답하세요."),
    fewshot_messages,              # 예제들이 여기에 자동으로 펼쳐짐
    ("human", "{sentence}"),
])

# 실제 동작 확인 (아직 LCEL·파서 전이라 04 처럼 format_messages → invoke → .content 로 단계별)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
messages = final_prompt.format_messages(sentence="배송이 너무 느려서 답답했어요.")
response = llm.invoke(messages)
print(response.content)   # 예시 형식을 따라: 감정: 부정 / 점수: 3
