// ============================================================================
//  mainwindow.h —— Day3 上午版：把增强版计算器装进 QMainWindow
//
//  对应教案 OUTLINE_4DAY.md Day3 上午「QMainWindow / 对话框 QDialog」。
//  本类只做「外壳」：菜单栏 / 状态栏 / 历史停靠窗 + 把 CalculatorDesigner
//  作为中心部件 setCentralWidget。计算器面板本身的输入/求值逻辑一字未改
//  （见 calculatordesigner.cpp）——这正是「界面外壳升级、核心部件不动」
//  的关注点分离演示。
//
//  与 mainwindow_showcase 的风格对照（同为 Day3 上午教学载体）：
//    - mainwindow_showcase：.ui 表单定义主窗体结构 + on_<obj>_<sig> 自动连接
//    - 本例：纯代码建菜单/停靠窗 + 显式 connect()
//  两种风格并列，前者突出「Designer 快速搭骨架」，后者突出「QAction 必须
//  connect 才生效」（Day3 上午坑卡：菜单显示正常点了没反应）。
// ============================================================================
#ifndef CALCULATOR_MAINWINDOW_H
#define CALCULATOR_MAINWINDOW_H

#include <QMainWindow>

class CalculatorDesigner;
class QListWidget;
class QListWidgetItem;
class QDockWidget;
class QAction;

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget* parent = nullptr);
    ~MainWindow() override;

    // 离屏自测：复用 Day2 的 9 组计算用例 + Day3 新增（历史追加 / 双击回填 /
    // 关于对话框触发）。返回全过为 true，供 main.cpp 决定退出码。
    bool runSelfTest();

private slots:
    void onAbout();                                  // 帮助→关于：QMessageBox::about
    void onClearHistory();                           // 编辑→清空历史
    void onToggleHistoryVisible(bool checked);       // 视图→显示历史
    void onEvaluated(const QString& expr, const QString& result);  // 计算器求值→追加历史
    void onHistoryDoubleClicked(QListWidgetItem* item);            // 双击历史→回填表达式

private:
    void buildMenu();
    void buildDock();
    void buildStatusBar();
    void refreshStatus(const QString& msg);

    CalculatorDesigner* m_calc = nullptr;
    QListWidget*        m_history = nullptr;
    QDockWidget*        m_dock = nullptr;
    QAction*            m_actQuit = nullptr;
    QAction*            m_actClearHistory = nullptr;
    QAction*            m_actToggleHistory = nullptr;
    QAction*            m_actAbout = nullptr;
};

#endif  // CALCULATOR_MAINWINDOW_H
