#include <QMainWindow>
#include <QLabel>
#include <QPushButton>

#include <QTimer>

#include <string>
using namespace std;

#include <spdlog/sinks/base_sink.h>
#include <QObject>
#include <QPointer>
#include <QTextEdit>
#include <mutex>

#include "widgets/QWHome.h"
#include "widgets/QWMonitor.h"
#include "widgets/QWStatistics.h"
#include "widgets/QWSysmgr.h"

class MainApp : public QWidget
{
    Q_OBJECT
public:
    MainApp();
    ~MainApp();

    void initMenu();
    QPushButton* addMenuItem(int index, string itemName);
    void setActiveMenu(string menuName);

    void setMyLayout();
    
    std::shared_ptr<MyWidget> getWorkWidget(std::string name);
    void setWorkspaceWidget(std::shared_ptr<MyWidget> widget);

    void setLabelDateTime();

private slots:
    void onTimer();

public:
    // 主窗口的布局
    QGridLayout* layoutMain{};

    // 菜单窗口
    std::shared_ptr<QWidget> widgetMenu;
    // 菜单窗口的布局
    QGridLayout* layoutMenu{ 0 };
    // 菜单按钮
    map<string, QPushButton*> mapMenuBtn;
    // 当前处于激活状态的菜单按钮
    QPushButton* curActiveMenuBtn{};

    // 工作区窗口
    std::shared_ptr<QWidget> widgetWorkspace;
    // 工作区已经创建的所有窗口
    std::map<std::string, std::shared_ptr<MyWidget>> mapWorkWidgets;
    // 工作区当前显示的窗口
    std::shared_ptr<MyWidget> curActiveWidget = nullptr;

    // 时间标签控件
    QLabel* labelDT{};

    std::shared_ptr<QTimer> timer;
};