package com.msksbr.MainFrm.MenuItemDiaog.Adder;

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

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

/**
 * StudentAdder 类用于添加学生信息的对话框。
 */
public class StudentAdder extends JDialog {
    // 内容面板
    private JPanel contentPane;
    // 确认按钮
    private JButton buttonOK;
    // 学生姓名文本框
    private JTextField textField1;
    // 学生ID文本框
    private JTextField IDField;
    // 学生班级文本框
    private JTextField textField3;
    // 男性单选按钮
    private JRadioButton maleRadioButton;
    // 女性单选按钮
    private JRadioButton femaleRadioButton;
    // 数据库连接器
    private Connector connector;
    // 学生姓名
    private String sName;
    // 学生ID
    private int sID;
    // 学生班级
    private String sClass;
    // 学生性别
    private String sGender;
    // 性别按钮组
    private ButtonGroup genderGroup;
    // SQL语句
    private String sql;

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

        // 创建性别按钮组并添加单选按钮
        genderGroup = new ButtonGroup();
        genderGroup.add(maleRadioButton);
        genderGroup.add(femaleRadioButton);

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

        try {
            // 获取最大学生ID并加1作为新学生的ID
            sID = getStudentMaxID() + 1;
            // 设置学生ID文本框的文本为新学生的ID，并设置为不可编辑
            IDField.setText(String.valueOf(sID));
        } catch (SQLException e) {
            // 抛出运行时异常
            throw new RuntimeException(e);
        }
        IDField.setEditable(false);

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

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

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

    /**
     * 点击确认按钮时执行的操作，获取用户输入的学生信息并插入到数据库中。
     */
    private void onOK() {
        // 获取学生姓名
        sName = textField1.getText();
        // 获取学生班级
        sClass = textField3.getText();
        // 获取学生性别
        sGender = maleRadioButton.isSelected() ? "男" : "女";
        // 构建插入学生信息的SQL语句
        sql = "INSERT INTO students (student_name,student_id,student_class,student_gender) VALUES ('" + sName + "'," + sID + ",'" + sClass + "','" + sGender + "');";
        // 执行SQL语句
        commit2SQL();
        // 关闭对话框
        dispose();
    }

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

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