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.sql.ResultSet;
import java.sql.SQLException;

/**
 * RentAdder 类用于添加借阅信息的对话框。
 */
public class RentAdder extends JDialog {
    // 内容面板
    private JPanel contentPane;
    // 确认按钮
    private JButton buttonOK;
    // 图书ID文本框
    private JTextField bIDField;
    // 学生ID文本框
    private JTextField sIDField;
    // 图书ID
    private int bID;
    // 学生ID
    private int sID;
    // 图书数据库连接器
    private Connector bConnector;
    // 学生数据库连接器
    private Connector sConnector;
    // 查询图书信息的SQL语句
    private String bookSearchSQL;
    // 查询学生信息的SQL语句
    private String studentSearchSQL;
    // 更新借阅信息的SQL语句
    private String updateSQL;
    // 查询图书信息的结果集
    private ResultSet bIDResult;
    // 查询学生信息的结果集
    private ResultSet sIDResult;

    /**
     * RentAdder 构造函数，初始化对话框并设置相关属性。
     */
    public RentAdder() {
        try {
            // 初始化图书数据库连接器
            bConnector = new Connector();
            // 初始化学生数据库连接器
            sConnector = new Connector();
        } catch (ClassNotFoundException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }

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

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

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

    /**
     * 点击确认按钮时执行的操作，获取用户输入的借阅信息并更新到数据库中。
     */
    private void onOK() {
        try {
            // 获取图书ID
            this.bID = Integer.parseInt(bIDField.getText());
            // 获取学生ID
            this.sID = Integer.parseInt(sIDField.getText());
            // 生成查询SQL语句
            searchSQLMaker();
            // 生成更新SQL语句
            updateSQLMaker();
            // 执行查询图书信息的SQL语句
            bIDResult = bConnector.executeQuery(bookSearchSQL);
            // 执行查询学生信息的SQL语句
            sIDResult = sConnector.executeQuery(studentSearchSQL);
            // 如果未找到图书信息，弹出错误提示框
            if (!bIDResult.next()) {
                JOptionPane.showMessageDialog(this, "未找到该书信息", "错误", JOptionPane.WARNING_MESSAGE);
            }
            // 如果未找到学生信息，弹出错误提示框
            else if (!sIDResult.next()) {
                JOptionPane.showMessageDialog(this, "未找到学生信息", "错误", JOptionPane.WARNING_MESSAGE);
            }
            // 如果图书已借出，弹出错误提示框
            else {
                if (bIDResult.getInt("borrowed_by") != 0) {
                    JOptionPane.showMessageDialog(this, "该书已借出", "错误", JOptionPane.WARNING_MESSAGE);
                }
                // 如果图书未借出，更新借阅信息
                else {
                    bConnector.executeUpdate(updateSQL);
                }
            }
        } catch (NumberFormatException e) {
            // 如果输入的不是整数，弹出错误提示框
            JOptionPane.showMessageDialog(this, "请输入一个整数", "错误", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }

        // 关闭对话框
        dispose();
    }

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

    /**
     * 生成查询SQL语句。
     */
    private void searchSQLMaker() {
        // 生成查询图书信息的SQL语句
        this.bookSearchSQL = "SELECT * FROM books WHERE book_id =" + this.bID + ";";
        // 生成查询学生信息的SQL语句
        this.studentSearchSQL = "SELECT * FROM students WHERE student_id =" + this.sID + ";";
    }

    /**
     * 生成更新SQL语句。
     */
    private void updateSQLMaker() {
        // 生成更新借阅信息的SQL语句
        this.updateSQL = "UPDATE books SET borrowed_by = " + this.sID + " WHERE book_id =" + this.bID + ";";
    }
}
