package com.msksbr.MainFrm;

import javax.swing.*;

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

import java.awt.*;
import java.awt.event.*;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 主窗口类，继承自JFrame，用于显示图书管理系统的主界面
 */
public class MainFrm extends JFrame {
    // 数据库连接器对象，用于与数据库进行交互
    private Connector connector;
    // 主面板，用于容纳其他组件
    private JPanel panel1;
    // 表格面板，用于显示数据表格（当前未使用）
    private JPanel tablePanel;
    // 底部面板，用于显示统计信息
    private JPanel bottomPanel;
    // 背景标签，用于显示背景图片
    private JLabel backLabel;
    // 统计信息标签，用于显示图书、学生和借阅记录的数量
    private JLabel countMessage = new JLabel();
    // 菜单栏对象，用于显示菜单选项
    private MenuBar menuBar;

    /**
     * 构造方法，初始化主窗口并设置相关属性
     * @throws SQLException 如果数据库操作失败抛出此异常
     * @throws ClassNotFoundException 如果找不到数据库驱动类抛出此异常
     */
    public MainFrm() throws SQLException, ClassNotFoundException {
        // 设置窗口图标
        setIconImage(new ImageIcon(MainFrm.class.getResource("/com/msksbr/images/mainicon.png")).getImage());
        // 初始化数据库连接器
        connector = new Connector();
        // 设置窗口标题
        setTitle("图书管理系统");
        // 设置窗口内容面板
        setContentPane(panel1);
        // 调整窗口大小以适应内容
        pack();

        // 初始化菜单栏
        menuBar = new MenuBar();
        // 设置窗口的菜单栏
        setJMenuBar(menuBar);
        // 设置窗口关闭操作
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        // 设置窗口大小
        setSize(960, 720);

        // 获取并设置统计信息
        String countData = "本馆共藏书" + getCount("books") + "本，共记录学生信息" + getCount("students") + "条，已借阅" + getCount("rents") + "本书，人均借阅" + (double) getCount("rents") / getCount("students") + "本";
        countMessage.setText(countData);
        // 将统计信息标签添加到底部面板
        bottomPanel.add(countMessage);
        // 创建并设置背景图片
        // 创建一个 ImageIcon 对象，用于加载背景图片
        ImageIcon imageIcon = new ImageIcon(MainFrm.class.getResource("/com/msksbr/images/backGround.png"));

        imageIcon.setImage(imageIcon.getImage().getScaledInstance(250, 250, 0));
        // 设置背景标签的图标
        backLabel.setIcon(imageIcon);

        // 设置窗口的最小尺寸
        setMinimumSize(new Dimension(960, 720));

        // 设置窗口位置
        setLocation();
        // 初始化对话框
        initDialogs();
        // 设置窗口可见
        setVisible(true);
    }

    /**
     * 设置窗口位置，使其居中显示在屏幕上
     */
    private void setLocation() {
        // 创建一个 ScreenSize 对象，用于获取屏幕尺寸
        ScreenSize screenSize = new ScreenSize();
        // 设置窗口位置，使其居中显示在屏幕上
        setLocation(screenSize.width / 2 - getWidth() / 2, screenSize.height / 2 - getHeight() / 2);
    }

    /**
     * 初始化对话框，为退出菜单项添加事件监听器
     */
    private void initDialogs() {
        // 为退出菜单项添加事件监听器，当点击退出菜单项时，调用 System.exit(0) 方法退出程序
        menuBar.exitItem.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.exit(0);
                    }
                }
        );
    }

    /**
     * 获取指定表中的记录数
     * @param table 表名
     * @return 表中的记录数
     * @throws SQLException 如果执行 SQL 查询时发生错误
     */
    private int getCount(String table) throws SQLException {
        // 执行 SQL 查询，获取指定表中的记录数
        ResultSet rs = connector.executeQuery("SELECT COUNT(*) FROM " + table + ";");
        // 将结果集指针移动到第一行
        rs.next();
        // 返回查询结果中的记录数
        return rs.getInt("COUNT(*)");
    }
}
