#pragma once
#ifndef MAINWND_H
#define MAINWND_H

#include <QMainWindow>
#include <QToolButton>
#include <QJsonObject>
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QPointer>
#include "gen_interface.h"
#include "Src/Sql/SqlOperation.h"
#include "Src/CameraBind.h"

//struct ST_RUN_MSG
//{
//    int         nCameraID;      //相机ID 
//    int         nErrType;       // 错误类型 ,0 没错误,依次1,2,3
//    int         nErrorLevel;   //错误等级 0,1,2,3
//    std::string stErrInfo;     // 错误信息
//    std::string stModule;      // 模块
//    std::string stAxis;         // 轴
//    int         nCallMethod; //调用方式(手动点击按钮,自动运行,单轴运行)
//};

QT_BEGIN_NAMESPACE
namespace Ui {
    class MainWnd;
}
QT_END_NAMESPACE

class OriginalWnd;
class MainWnd : public QMainWindow
{
    Q_OBJECT

public:
    MainWnd(QWidget* parent = nullptr);
    ~MainWnd();

private:
    void Init();

    void setChineseMode(QMainWindow* MainWnd);
    void InitForm();

    /**加载登录界面
     */
    void LoadLoginPage();
protected:
    void applyTheme(int themeValue);
    void isListening();
    bool eventFilter(QObject* obj, QEvent* event);
    void setTabIcon(QToolButton* tabBtn, const QString& deepIconPath, const QString& lightIconPath);

    /**切换侧边栏
     */
    void SwitchToConfig(void (OriginalWnd::* switchMethod)());

signals:
    void setLanguageSignal(const int& data);
    void styleChanged();

private slots:
    void onCurrentWidgetChanged();

    void on_tabHomeBtn_clicked();

    void on_pushButton_clicked();

    void on_tabProductionBtn_clicked();

    void on_tabProgramBtn_clicked();

    void on_tabModuleBtn_clicked();

    void on_tabDispositionBtn_clicked();

    void on_tabDiagnosisBtn_clicked();

    void on_tabSystemBtn_clicked();
    // //从数据库中获取systemconfig表中的信息
    // QJsonObject getInfofromDb();
    // int getLanguageValue();
    // int getThemeValue();
    // void setLanguageValue(int data);
    // void setThemeValue(int data);
private slots:
    void ShowOriginalWndSlots();
    void CloseMainWndSlots();

private:
    Ui::MainWnd* ui;

    Gen_Interface gen_if;


    /**相机绑定接口
    */
    QPointer<CameraBind> m_pCameraBind;

    /**原始窗口?
     */
    QPointer<OriginalWnd> m_pOriginalWnd;

    bool initialIconSet;

    /**所有sql 数据加载
     */
    SqlOperation* m_sqlOper;
};
#endif // MAINWND_H