package CHAPTER13;

import java.io.*;
import java.util.Scanner;

public class LAB02_SimpleTextEditor {
    // Scanner 객체를 프로그램 전역에서 사용
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        while (true) {
            // 사용자에게 메뉴 출력
            System.out.println("\n 간단한 텍스트 에디터");
            System.out.println("1. 새 파일 작성 및 저장");
            System.out.println("2. 파일 불러오기");
            System.out.println("3. 파일 편집 (추가 저장)");
            System.out.println("4. 특정 단어 검색 및 변경");
            System.out.println("5. 종료");
            System.out.print("선택: ");
            int choice = scanner.nextInt();
            scanner.nextLine();  // 개행 문자 처리 (nextInt() 사용 후 필요)

            // 사용자 입력에 따른 기능 실행
            switch (choice) {
                case 1 -> saveFile();         // 새 파일 작성 및 저장
                case 2 -> loadFile();         // 파일 불러오기
                case 3 -> editFile();         // 기존 파일에 내용 추가
                case 4 -> searchAndReplace(); // 특정 단어 검색 및 변경
                case 5 -> { 
                    System.out.println("프로그램 종료"); 
                    return;  // 프로그램 종료
                }
                default -> System.out.println("올바른 번호를 입력하세요.");
            }
        }
    }

    // 새 파일 작성 및 저장
    private static void saveFile() {
        System.out.print("저장할 파일명 입력 (*.txt 포함): ");
        String fileName = scanner.nextLine();

        System.out.println("✍ 입력할 내용을 작성하고, 종료하려면 'exit' 입력 후 엔터:");
        StringBuilder content = new StringBuilder();

        // 사용자가 "exit" 입력할 때까지 내용을 입력받음
        while (true) {
            String line = scanner.nextLine();
            if (line.equalsIgnoreCase("exit")) break; // 종료 조건
            content.append(line).append("\n");
        }

        // 파일을 생성하고 저장 (BufferedWriter 사용)
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            writer.write(content.toString());
            System.out.println("파일이 저장되었습니다: " + fileName);
        } catch (IOException e) {
            System.out.println("파일 저장 중 오류 발생: " + e.getMessage());
        }
    }

    // 파일 불러오기
    private static void loadFile() {
        System.out.print("불러올 파일명 입력 (*.txt 포함): ");
        String fileName = scanner.nextLine();

        // 파일을 읽어와서 출력 (BufferedReader 사용)
        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            System.out.println("\n파일 내용:");
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("파일 불러오기 오류: " + e.getMessage());
        }
    }

    // 파일 편집 (추가 저장)
    private static void editFile() {
        System.out.print("✏ 편집할 파일명 입력 (*.txt 포함): ");
        String fileName = scanner.nextLine();

        System.out.println("✍ 추가할 내용을 입력하고, 종료하려면 'exit' 입력 후 엔터:");
        StringBuilder content = new StringBuilder();

        // 사용자가 "exit" 입력할 때까지 새로운 내용을 입력받음
        while (true) {
            String line = scanner.nextLine();
            if (line.equalsIgnoreCase("exit")) break; // 종료 조건
            content.append(line).append("\n");
        }

        // 기존 파일에 내용을 추가 (append mode: true)
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))) {
            writer.write(content.toString());
            System.out.println("파일이 업데이트되었습니다: " + fileName);
        } catch (IOException e) {
            System.out.println("파일 편집 중 오류 발생: " + e.getMessage());
        }
    }

    // 특정 단어 검색 및 변경
    private static void searchAndReplace() {
        System.out.print("검색할 파일명 입력 (*.txt 포함): ");
        String fileName = scanner.nextLine();

        System.out.print("검색할 단어 입력: ");
        String searchWord = scanner.nextLine();

        System.out.print("변경할 단어 입력: ");
        String replaceWord = scanner.nextLine();

        StringBuilder content = new StringBuilder();
        boolean found = false;

        // 파일을 읽으며 특정 단어 검색 및 변경
        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            String line;
            while ((line = reader.readLine()) != null) {
                if (line.contains(searchWord)) {
                    line = line.replace(searchWord, replaceWord);
                    found = true;
                }
                content.append(line).append("\n");
            }
        } catch (IOException e) {
            System.out.println("파일 읽기 오류: " + e.getMessage());
            return;
        }

        // 검색 단어가 없으면 변경 없이 종료
        if (!found) {
            System.out.println("⚠️ '" + searchWord + "' 단어를 찾을 수 없습니다.");
            return;
        }

        // 변경된 내용으로 파일 덮어쓰기
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            writer.write(content.toString());
            System.out.println("단어 변경 완료: '" + searchWord + "' → '" + replaceWord + "'");
        } catch (IOException e) {
            System.out.println("파일 저장 중 오류 발생: " + e.getMessage());
        }
    }
}
