#pragma once
#ifndef ORIGINALWND_H
#define ORIGINALWND_H

#include <QMainWindow>
#include "DbTreeViewManager.h"
#include <QVBoxLayout>
#include <QJsonObject>
#include <QDialog>
#include <QRadioButton>
#include <QButtonGroup>
#include <QLabel>
#include "gen_interface.h"
#include "Src/CameraBind.h"
#include "JOriginalMainWnd.h"
#include "CameraDistribute.h"
#include "Src/RewriteControl/Sidebar/LogStatePage.h"
#include <QTranslator>
//#include "CViewInterface.h"

QT_BEGIN_NAMESPACE

namespace Ui {
    class OriginalWnd;
}
QT_END_NAMESPACE


// 3个切换窗口
enum EN_WND_SWITCH
{
    ChartsAnd = 1,
    MainAndSecondary,
    SingleCameraOperation
};

class OriginalWnd : public QMainWindow
{
    Q_OBJECT

public:
    explicit OriginalWnd(QWidget* parent = nullptr, CameraBind* pCameraBind = nullptr);
    ~OriginalWnd();

    /**相机初始化
     */
    void CameraBindInit(CameraBind* pCameraBind);

    /**所有接口初始化
    */
    void RegFun();

    QWidget* getWidgetLeft() const; // 访问 widget 的接口

    /**切换配置
    *
     */
    void SwitchToConfig(const QString& name, int configId, int menuArrayIndex, bool isMenuArray = true);

    // 切换不同配置
    void switchToHomeConfig();
    void switchToProductionConfig();
    void switchToDiagnosisConfig();
    void switchToDispositionConfig();
    void switchToModuleConfig();
    void switchToProgramConfig();
    void switchToSystemConfig();



    enum DEVICE_STATUS
    {
        IDLE,//停机待机
        RUNING,//生产
        CALIB,//校准
        WARN,//报警
        FAULT, //故障
        DIAGNOSE//诊断
    };
    enum CONNECT_STATUS
    {
        NO_CONNECT,//未连接           灰色
        CONNECT_ING,//连接中          黄色

        MACHINE_TIMEOUT,//机台超时    橙色
        HOST_TIMEOUT,//主机超时       蓝色

        CONNECT_OK,//连接成功         绿色
    };
    enum HOST_STATUS
    {
        HOST_OUT,//主机离线           黄色
        DEVICE_OUT,//设备离线         橙色
        DEVICE_ING,//设备试图连线      紫红色
        DEVICE_OK,//设备在线          蓝色
        HOST_CON_DEVICE,//主机控制设备 绿色
    };
    // 顶部状态栏
    void updateCalibrationButtonColor(enum DEVICE_STATUS status);
    void updateMachineLinkColor(enum CONNECT_STATUS status);
    void updateHostStatusColor(enum HOST_STATUS status);
    void StatusBar();

    void retranslateUi();

protected:
    bool eventFilter(QObject* obj, QEvent* event) override;
    void timerEvent(QTimerEvent* event) override;

    void resizeEvent(QResizeEvent* event) override;

    void InitForm(); // 初始化表单控件

    void InitTreeViewManager();

    /**更新当前时间
     */
    void UpdateTime();

    /**释放收尾
     */
    void Del();

    /**切换快捷侧边按钮
     */
    void RunOrStopSwitch();

    void changeEvent(QEvent* event);

private slots:
    void on_ChartButton_clicked();
    void on_DoubleImageButton_clicked();
    void on_SingleImageButton_clicked();
    void on_LogStatBut_clicked();

    void on_startButton_clicked();

    void on_stopButton_clicked();

public slots:
    void onHandleLanguageSignal(const int& data);

    void JRunFunSlots(ns_module::ST_BUTTON_FUN pra);
private:
    /**设置当前选中窗口
    */
    void SwitchMainPage(JOriginalMainWnd* pWnd, QToolButton* tooBut);

    /**创建选中窗口
     */
    void CreateSwitchMainPage(int nlastIndex = -1);
private:
    Ui::OriginalWnd* ui;

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

    /**保存当前切换窗口
     */
    QPointer<JOriginalMainWnd> m_pJOriginalMainWnd;

    /**树视图管理
     */
    std::unique_ptr<DbTreeViewManager> m_pdbTreeViewManager;

    /**数据库
     */
    Gen_Interface gen_if;

    /**相机分配,观察页面以及相机变化
     */
    CameraDistribute* m_pCameraDistribute;

    /**Loop 时间
     */
    int     m_nTimerID = -1;

    /**快捷按钮切换用
     */
    bool    m_isDisabled = true;

    QPointer<LogStateSidebar> m_pLogStateSidebar;
};


#endif // ORIGINALWND_H