#ifndef CHARTSANDCAMERASWND_H
#define CHARTSANDCAMERASWND_H

#include <QMainWindow>
#include <QSlider>
#include <QLineEdit>
#include <QSettings>
#include "chartline.h"
#include "CameraMaterialGroupWnd/MaterialWindow/Wafer.h"
#include "CameraMaterialGroupWnd/MaterialWindow/Waffle.h"
#include "CameraMaterialGroupWnd/MaterialWindow/MaterialBox.h"
#include "JOriginalMainWnd.h"
#include "CameraDataHandleAndShow.h"
#include "CameraMaterialGroupWnd/MaterialWindow/Bond.h"

namespace Ui {
    class ChartsAndCamerasWnd;
}

class ChartsAndCamerasWnd : public JOriginalMainWnd
{
    Q_OBJECT

public:
    explicit ChartsAndCamerasWnd(QWidget* parent = nullptr);
    ~ChartsAndCamerasWnd();

    void initFrom();
    void updateMaterialWidget(int materialWndType, int groupId);

    //封装绑定函数
    void BindImageOrMaterial(int index);
    //保存信息
    void saveInfoOfLast();

    void initWidget();
    void UpdataLightJoystickSwitchPage(int groupId, bool isShow);

protected:
    void wheelEvent(QWheelEvent* event) override;
    void checkSettings(int groupId, int index);
    void showEvent(QShowEvent* event) override;
    void hideEvent(QHideEvent* event) override;

public slots: // 确保这里声明了槽函数

    void GetGroupImageShowSignals(const QPixmap& imageData);
    void GetGroupComboxChanged(int groupId, int comboxIndex);

private:
    void InitMainCameraBind(CameraBind* pCameraBind) override;
    void UnCameraBind() override;

    void UpdateCameraDisplay0(int iCameraId, JVision::ImageInfo imageData) override;
    void UpdateCameraDisplay1(int iCameraId, JVision::ImageInfo imageData) override;
    void UpdateCameraDisplay2(int iCameraId, JVision::ImageInfo imageData) override;
    void UpdateCameraDisplay3(int iCameraId, JVision::ImageInfo imageData) override;
    void UpdateCameraDisplay4(int iCameraId, JVision::ImageInfo imageData) override;

    void CameraConnectUpdateImageFun(int nIndex, Group* widget, bool isUnCameraBind = false) override;


signals:
    void UpDataImageShowSignals0(const QPixmap& imageData);
    void UpDataImageShowSignals1(const QPixmap& imageData);
    void UpDataImageShowSignals2(const QPixmap& imageData);
    void UpDataImageShowSignals3(const QPixmap& imageData);
    void UpDataImageShowSignals4(const QPixmap& imageData);

private slots:

    void GetCurrentSelectSlots(int groupId, int nIndex);
    void HandleComboxchange(int index);
    QPixmap getCurrentPixmap() const {
        return currentPixmap;
    }

    // 通用槽函数


    // void on_GreenDiamondcheckBox_clicked();

    // void on_YellowDiamondcheckBox_clicked();

    // void on_BlackDiamondcheckBox_clicked();

    // void on_BlueDiamondcheckBox_clicked();

    // void on_BlueHorizontalLinecheckBox_clicked();

    // void on_BlueVerticalBarcheckBox_clicked();

    // void on_GreenVerticalBarcheckBox_clicked();

    // void on_PurpleVerticalBarcheckBox_clicked();

    // void on_RedDiamondcheckBox_clicked();

    // void on_RedHorizontalLinecheckBox_clicked();

    // void on_WhiteVerticalBarcheckBox_clicked();

private:
    Ui::ChartsAndCamerasWnd* ui;

    // // 三个 ChartLine 实例
    // ChartLine *chartLine;
    // ChartLine *chartLine1;
    // ChartLine *chartLine2;


    // ChartLine 实例
    ChartLine* chartLine;
    ChartLine* chartLine1;
    ChartLine* chartLine2;
    // 存储所有系列信息
    QMap<QString, DataSeries> m_seriesMap;

    // 初始化系列信息
    void initializeSeriesInfo();

    QPixmap currentPixmap;
    qreal scaleFactor;
    double previousScaleFactor;

    int lastGroupId = -1;
    int lastIndex = -1;

    Wafer* wafer; // 声明Wafer指针
    Waffle* waffle; // 声明Waffle指针
    MaterialBox* materialbox; // 声明materialbox指针
    Bond* bond;
    bool isShow;

    QMap<int, Wafer*> waferMap;
    QMap<int, Waffle*> waffleMap;
    QMap<int, MaterialBox*> materialBoxMap;
    QMap<int, Bond*> bondMap;
    QMap<int, QList<QPair<QString, QString>>>            m_mapFileListMap;
    OperateMode currentMode = ModeImage;
    QGraphicsView* currentView = nullptr;
    QPoint mousePos;

    QPoint pressPos; // 记录鼠标按下位置
    QStack<Group*>                  m_allGroup;
    
    ST_CURRENT_SELECT_GROUP         m_veCurrentSelectGroup;
    const int                       m_nImageIndex = 1;
    const int                       m_nMaterialIndex = 2;

};

#endif // CHARTSANDCAMERASWND_H