package CHAPTER09;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class ProductList<T> { // 제네릭 클래스
    private List<T> products;

    public ProductList() {
        this.products = new ArrayList<>();
    }

    public void addProduct(T product) {
        products.add(product);
    }

    public List<T> getAllProducts() {
        return products;
    }
}

class ProductUtils {  // 제네릭 메서드
    public static <T> void printProducts(List<T> products) {
        System.out.println("상품 목록:");
        int index = 1;
        for (T product : products) {
            System.out.println(index + ". " + product);
            index++;
        }
    }
}

interface ProductSearchable<T> {  // 제네릭 인터페이스
    T search(T product);
}

class ProductSearcher<T> implements ProductSearchable<T> {  // 인터페이스 구현 클래스
    private List<T> products;

    public ProductSearcher(List<T> products) {
        this.products = products;
    }

    @Override
    public T search(T product) {
        for (T item : products) {
            if (item.equals(product)) {
                return item;
            }
        }
        return null;
    }
}

public class LAB_01_ProductList {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 제네릭 클래스 활용
        ProductList<String> productList = new ProductList<>();

        System.out.println("상품을 입력해 주세요. (종료하려면 'exit' 입력)");
        while (true) {
            System.out.print("상품 이름: ");
            String product = scanner.nextLine();
            if (product.equalsIgnoreCase("exit")) {
                break;
            }
            productList.addProduct(product);
        }

        // 상품 출력
        ProductUtils.printProducts(productList.getAllProducts());

        // 상품 검색
        System.out.print("검색할 상품 이름: ");
        String searchQuery = scanner.nextLine();
        
        ProductSearcher<String> searcher = 
        		new ProductSearcher<>(productList.getAllProducts());
        String searchResult = searcher.search(searchQuery);

        if (searchResult != null) {
            System.out.println("상품 검색 결과: " + searchResult);
        } else {
            System.out.println("검색한 상품이 없습니다.");
        }
        scanner.close();
    }
}