package com.msksbr.MainFrm.MenuItemDiaog;

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;

/**
 * Remover 类用于删除数据库中的记录。
 */
public class Remover extends JDialog {
    // 内容面板
    private JPanel contentPane;
    // 确认按钮
    private JButton buttonOK;
    // 标签，用于显示提示信息
    private JLabel idLable;
    // 文本框，用于输入要删除的记录的ID
    private JTextField idField;
    // 要操作的表名
    private String table;
    // 搜索SQL语句
    private String Searchsql;
    // 搜索SQL语句
    private String searchSQL;
    // 删除SQL语句
    private String deleteSQL;
    // 搜索错误信息
    private String searchErrMsg;
    // 要删除的记录的ID
    private int id;
    // 用于执行搜索操作的数据库连接器
    private Connector searchConnector;
    // 用于执行删除操作的数据库连接器
    private Connector deleteConnector;

    /**
     * Remover 构造函数，初始化对话框并设置相关属性。
     * @param table 要操作的表名
     */
    public Remover(String table) {
        try {
            // 初始化搜索和删除连接器
            searchConnector = new Connector();
            deleteConnector = new Connector();
        } catch (ClassNotFoundException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }
        // 为确认按钮添加事件监听器
        buttonOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // 点击确认按钮时执行的操作
                onOK();
            }
        });
        // 设置要操作的表名
        this.table = table;
        // 根据表名设置对话框标题和提示信息
        if (table.equals("books")) {
            setTitle("删除图书信息");
            idLable.setText("请输入书号：");
            searchErrMsg = "未找到该图书信息";
        } else if (table.equals("students")) {
            setTitle("删除学生信息");
            idLable.setText("请输入学号：");
            searchErrMsg = "未找到该学生信息";
        } else if (table.equals("rents")) {
            setTitle("删除借阅信息");
            idLable.setText("请输入书号：");
            searchErrMsg = "未找到该借阅信息";
        }
        // 设置对话框的内容面板
        setContentPane(contentPane);
        // 设置对话框为模态对话框
        setModal(true);
        // 设置默认按钮为确认按钮
        getRootPane().setDefaultButton(buttonOK);
        // 调整对话框大小以适应内容
        pack();
        // 设置对话框不可调整大小
        setResizable(false);
        // 设置对话框位置
        setLocation();
        // 设置对话框可见
        setVisible(true);
    }

    /**
     * 点击确认按钮时执行的操作，删除指定的记录。
     */
    private void onOK() {
        try {
            // 获取要删除的记录的ID
            this.id = Integer.valueOf(idField.getText());
            // 生成搜索SQL语句
            searchSQLMaker();
            // 生成删除SQL语句
            deleteSQLMaker();
            // 执行搜索操作
            ResultSet rs = searchConnector.executeQuery(searchSQL);
            // 如果找到记录，则执行删除操作
            if (rs.next()) {
                deleteConnector.executeUpdate(deleteSQL);
            } else {
                // 如果未找到记录，则显示错误信息
                JOptionPane.showMessageDialog(this, searchErrMsg, "错误", JOptionPane.WARNING_MESSAGE);
            }
        } catch (NumberFormatException e) {
            // 如果输入的ID不是整数，则显示错误信息
            JOptionPane.showMessageDialog(this, "请输入一个整数", "错误", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }
        // 关闭对话框
        dispose();
    }

    /**
     * 生成搜索SQL语句。
     */
    private void searchSQLMaker() {
        // 根据表名生成搜索SQL语句
        if (table.equals("books")) {
            searchSQL = "select * from " + table + " where book_id=" + id + ";";
        } else if (table.equals("students")) {
            searchSQL = "select * from " + table + " where student_id=" + id + ";";
        } else if (table.equals("rents")) {
            searchSQL = "select * from " + table + " where book_id=" + id + ";";
        }
    }

    /**
     * 生成删除SQL语句。
     */
    private void deleteSQLMaker() {
        // 根据表名生成删除SQL语句
        if (table.equals("books")) {
            deleteSQL = "delete from " + table + " where book_id=" + id + ";";
        } else if (table.equals("students")) {
            deleteSQL = "delete from " + table + " where student_id=" + id + ";";
        } else if (table.equals("rents")) {
            deleteSQL = "UPDATE books SET borrowed_by = null WHERE book_id=" + id + ";";
        }
    }

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