package com.msksbr.MainFrm.MenuItemDiaog.Adder;

import com.msksbr.LoginFrm.ScreenSize;
import com.msksbr.SQL.Connector;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Book;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * BookAdder 类用于添加图书信息的对话框。
 */
public class BookAdder extends JDialog {
    // 内容面板
    private JPanel contentPane;
    // 确认按钮
    private JButton buttonOK;
    // 书名文本框
    private JTextField textField1;
    // 图书类型文本框
    private JTextField textField2;
    // 图书ID文本框
    private JTextField IDField;
    // ISBN文本框
    private JTextField textField4;
    // 数据库连接器
    private Connector connector;
    // 图书ID
    private int bID;
    // 书名
    private String bName;
    // 图书类型
    private String bType;
    // ISBN
    private String ISBN;
    // SQL语句
    private String sql;

    /**
     * BookAdder 构造函数，初始化对话框并设置相关属性。
     */
    public BookAdder() {
        try {
            // 初始化数据库连接器
            connector = new Connector();
            // 获取最大图书ID并加1作为新图书的ID
            bID = getBookMaxID() + 1;
        } catch (ClassNotFoundException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }

        // 为确认按钮添加事件监听器
        buttonOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 点击确认按钮时执行的操作
                onOK();
            }
        });

        // 设置图书ID文本框的文本为新图书的ID，并设置为不可编辑
        IDField.setText(String.valueOf(bID));
        IDField.setEditable(false);

        // 设置对话框标题
        setTitle("添加图书信息");
        // 设置对话框的内容面板
        setContentPane(contentPane);
        // 设置对话框为模态对话框
        setModal(true);
        // 设置默认按钮为确认按钮
        getRootPane().setDefaultButton(buttonOK);

        // 设置对话框不可调整大小
        setResizable(false);
        // 调整对话框大小以适应内容
        pack();
        // 设置对话框位置
        setLocation();
        // 设置对话框可见
        setVisible(true);
    }

    /**
     * 点击确认按钮时执行的操作，获取用户输入的图书信息并插入到数据库中。
     */
    private void onOK() {
        // 获取书名
        bName = textField1.getText();
        // 获取图书类型
        bType = textField2.getText();
        // 获取ISBN
        ISBN = textField4.getText();
        // 构建插入图书信息的SQL语句
        sql = "INSERT INTO books (book_name,book_id,book_type,ISBN) VALUES ('" + bName + "'," + bID + ",'" + bType + "','" + ISBN + "');";
        // 执行SQL语句
        commit2SQL();
        // 关闭对话框
        dispose();
    }

    /**
     * 获取最大图书ID。
     * @return 最大图书ID
     * @throws SQLException 如果执行SQL查询时发生错误
     */
    public int getBookMaxID() throws SQLException {
        // 执行SQL查询，获取最大图书ID
        ResultSet rs = connector.executeQuery("SELECT MAX(book_id) FROM books;");
        // 将结果集指针移动到第一行
        rs.next();
        // 返回最大图书ID
        return rs.getInt("MAX(book_id)");
    }

    /**
     * 设置对话框位置，使其居中显示在屏幕上。
     */
    public void setLocation() {
        // 设置对话框位置，使其居中显示在屏幕上
        setLocation(new ScreenSize().width / 2 - getWidth() / 2, new ScreenSize().height / 2 - getHeight() / 2);
    }

    /**
     * 执行SQL插入操作，将图书信息插入到数据库中。
     */
    private void commit2SQL() {
        try {
            // 执行SQL插入操作
            connector.executeUpdate(sql);
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }
    }
}
