package CHAPTER10;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.ArrayList;

class Movie {
    private String title;
    private String director;
    private String genre;

    public Movie(String title, String director, String genre) {
        this.title = title;
        this.director = director;
        this.genre = genre;
    }

    public String getTitle() {
        return title;
    }

    public String getDirector() {
        return director;
    }

    public String getGenre() {
        return genre;
    }

    @Override
    public String toString() {
        return title + " | " + director + " | " + genre;
    }
}

public class C10_REAL_MovieCollection extends JFrame {
    private ArrayList<Movie> movieList;

    public C10_REAL_MovieCollection() {
        movieList = new ArrayList<>();
        
        // 초기 영화 데이터 추가
        addInitialMovies();

        // JFrame 기본 설정
        setTitle("영화 컬렉션 관리 프로그램");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 400);
        setLocationRelativeTo(null);

        // JTabbedPane 생성
        JTabbedPane tabbedPane = new JTabbedPane();

        // 각 탭 구성
        tabbedPane.addTab("영화 추가", createAddMoviePanel());
        tabbedPane.addTab("영화 목록", createMovieListPanel());

        // JFrame에 탭 추가
        add(tabbedPane);
        setVisible(true);
    }

    // 초기 데이터 추가 메서드
    private void addInitialMovies() {
        movieList.add(new Movie("자바 마스터 영화", "문석재", "컴퓨터 언어 장르"));
        movieList.add(new Movie("인터스텔라", "크리스토퍼 놀란", "SF"));
        movieList.add(new Movie("기생충", "봉준호", "드라마"));
        movieList.add(new Movie("어벤져스: 엔드게임", "안소니 루소", "액션"));
    }

    // 영화 추가 탭
    private JPanel createAddMoviePanel() {
        JPanel panel = new JPanel(new GridLayout(4, 2, 10, 10));

        // 컴포넌트 생성
        JLabel lblTitle = new JLabel("영화 제목:");
        JTextField txtTitle = new JTextField();
        JLabel lblDirector = new JLabel("감독:");
        JTextField txtDirector = new JTextField();
        JLabel lblGenre = new JLabel("장르:");
        JTextField txtGenre = new JTextField();
        JButton btnSave = new JButton("저장");        

        // 레이아웃 추가
        panel.add(lblTitle);
        panel.add(txtTitle);
        panel.add(lblDirector);
        panel.add(txtDirector);
        panel.add(lblGenre);
        panel.add(txtGenre);
        panel.add(new JLabel()); // 빈 공간
        panel.add(btnSave);

        // 영화 데이터 추가 -> 영화 저장 버튼 동작 추후 코딩
        txtTitle.setText("자바 마스터 영화");
        txtDirector.setText("문석재");
        txtGenre.setText("컴퓨터 언어 장르");

        return panel;
    }

    // 영화 목록 탭
    private JPanel createMovieListPanel() {
        JPanel panel = new JPanel(new BorderLayout());

        // 테이블 모델 및 JTable 생성
        String[] columnNames = {"제목", "감독", "장르"};
        DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0);
        JTable table = new JTable(tableModel);

        // 초기 데이터 추가
        for (Movie movie : movieList) {
            tableModel.addRow(new Object[]{movie.getTitle(), movie.getDirector(), movie.getGenre()});
        }

        panel.add(new JScrollPane(table), BorderLayout.CENTER);
        return panel;
    }    

    public static void main(String[] args) {
        new C10_REAL_MovieCollection();
    }
}