#ifndef FESSETTING_H
#define FESSETTING_H
#include "recipexmlcontrol.h"
#include <QWidget>
#include "dataformate.h"
#include <QMetaType>
class QTimer;
class FesTotalParamDialog;
class ChannelDialog;
class ChannelOnlyDialog;

namespace Ui {
class FesSetting;
}

class FesSetting : public QWidget
{
    Q_OBJECT
public:
    explicit FesSetting(QWidget *parent = nullptr);
    ~FesSetting();

    void switchPage(E_FES_PAGE);

    void initWidget();
    //根据刺激盒的反馈来设置通道状态
    void setChannelState();

    void sendAllChannelParam(); //检查8个通道,并发送全局参数


protected:
    virtual void changeEvent(QEvent* event);

    virtual void showEvent(QShowEvent *event);

public slots:

    void slotDeviceStateChanged(QList<uint8_t>);
private slots:
    void slotTrainTimeBtnClicked();

    void slotFrequentBtnClicked();

    void slotUpTimeBtnClicked();

    void slotDownTimeBtnClicked();

    void slotOpenTimeBtnClicked();

    void slotCloseTimeBtnClicked();

    void slotPlusBtnClicked();

    void slotChannelWidgetClicked(int id);

    void on_FESA_Btn_clicked();

    void on_FESB_Btn_clicked();

    void on_OK_Btn_clicked();

    void slotTrainTimer();

    void slotGetBattery();

    void slotBatteryChanged(int deviceNo,int batteryValue);

signals:
    //开启游戏界面
    void signalStartGame();

private:
    //控制单独电刺激
    void switchFES(bool on);
    //控制踏车电刺激
    void switchBicycleFES(bool on);
private:
    Ui::FesSetting *ui;
    FesTotalParamDialog *m_FesTotalParamDialog;
    QList<QWidget*> channelList;     //MuscleButton
    ChannelDialog *m_ChannelDialog;
    ChannelOnlyDialog *m_ChannelOnlyDialog;
    RecipeXmlControl *m_recipeXmlControl;
    QList<bool> FESABoxList;        //连接通道

    E_FES_PAGE E_fesType;

    bool isRunning;

    QTimer *m_fesTrainTimer;
    QTimer *batteryTimer;

    int m_trainTime;

    bool isCheckedMuscle[9]; //判断8个通道是否选择了肌肉图标,用于隐藏和显示
    ST_MuscleParam st_channelChangedMuscleParams[9]; //每个通道的肌肉修改值,用于初始化
    bool isChannelConnected[9];   //判断每个通道是否开启
};

#endif // FESSETTING_H