package CHAPTER12;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// 채팅 GUI 클래스
class ChatGUIWithThread extends JFrame {
    private JTextArea chatArea;      // 채팅 내용을 표시하는 영역
    private JTextField inputField;   // 사용자 입력 필드
    private JButton sendButton;      // 전송 버튼

    public ChatGUIWithThread() {
        setTitle("AI 채팅 시뮬레이터");
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // 채팅 영역 구성 (스크롤 포함)
        chatArea = new JTextArea();
        chatArea.setEditable(false); // 사용자는 편집 불가
        JScrollPane scroll = new JScrollPane(chatArea);
        add(scroll, BorderLayout.CENTER);

        // 입력 패널 하단 구성
        JPanel inputPanel = new JPanel();
        inputPanel.setLayout(new BorderLayout());
        inputField = new JTextField();    // 사용자 텍스트 입력
        sendButton = new JButton("전송"); // 전송 버튼

        inputPanel.add(inputField, BorderLayout.CENTER);
        inputPanel.add(sendButton, BorderLayout.EAST);
        add(inputPanel, BorderLayout.SOUTH);

        // 전송 버튼 클릭 시 메시지 전송
        sendButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sendMessage();
            }
        });

        // 엔터 키 입력 시도 메시지 전송
        inputField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sendMessage();
            }
        });

        setVisible(true); // 창 표시
    }

    // 사용자 메시지 전송 처리
    private void sendMessage() {
        String userInput = inputField.getText().trim(); // 입력 텍스트 가져오기
        if (!userInput.isEmpty()) {
            chatArea.append("나: " + userInput + "\n"); // 사용자 메시지 출력
            inputField.setText(""); // 입력 필드 비우기

            // AI 응답을 별도 스레드에서 처리 (비동기 응답 시뮬레이션)
            new Thread(() -> {
                try {
                    Thread.sleep(1500); // 1.5초 후 응답
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                String botReply = generateReply(userInput); // 응답 생성

                // UI 업데이트는 EDT에서 안전하게 실행
                SwingUtilities.invokeLater(() -> chatArea.append("AI: " + botReply + "\n"));
            }).start();
        }
    }

    // 간단한 AI 응답 생성 로직
    private String generateReply(String input) {
        if (input.contains("안녕?")) return "안녕하세요! 무엇을 도와드릴까요?";
        if (input.contains("지금 몇 시야?")) return "현재 시간은 " + java.time.LocalTime.now().withNano(0) + "입니다.";
        if (input.contains("고마워")) return "언제든지요!";
        return "죄송해요, 아직 그에 대한 대답은 배우지 못했어요.";
    }
}
public class REAL_ChatGUIWithThread {
    public static void main(String[] args) {
        new ChatGUIWithThread(); // GUI 실행
    }
}

