#ifndef DEVICEPROPERTYPAGE_H
#define DEVICEPROPERTYPAGE_H

#pragma execution_character_set("utf-8")

#include <QWidget>
#include <QLineEdit>
#include <QLabel>
#include <QIntValidator>
#include <QSpinBox>
#include <QCheckBox>
#include <QKeyEvent>

#include "datafetcher.h"

class MyTableModel;
class QTimer;
class QTableView;
class QPushButton;

class DevicePropertyPage : public QWidget,public DataFetcher
{
    Q_OBJECT

public:
    explicit DevicePropertyPage(QWidget *parent = nullptr);
    ~DevicePropertyPage();
    void setBaseType(unsigned int base,unsigned int mask);
    void InitializeTable();

public slots:
    void handleTimeout();  //超时处理函数
    void handleDownCounter(); //倒计时

private:
    QTimer *m_pTimer;
    QTimer *m_pDownCounterTimer;
    int m_nDownCounter;

private:
    MyTableModel* m_myModel;

protected:
    void Refresh();
    void InitializeTableView(MyTableModel *model, QTableView *tableView);

    // 重写resizeEvent,当QTableView窗口大小变化时按比例调整列宽
    void resizeEvent(QResizeEvent *event) override;

    //处理分页数据
    int PageDataProcess();

    //更新页数显示
    void updatePageLabel();

    //更新翻页按钮状态
    void updatePageButtonState();

    //翻倒第i页
    void pageTo(int page);

protected:
    void keyPressEvent(QKeyEvent *event) override;

private slots:
    void onButtonClicked();

    void onTableViewDoubleClicked(const QModelIndex &index);

    void onFirstButtonClicked();
    void onLastButtonClicked();
    void onForwardButtonClicked();
    void onNextButtonClicked();
    void onGotoButtonClicked();
    void CheckRefresh(int state);

private:
    unsigned int filterBaseType;
    unsigned int mask_code;
    QTableView* m_pTableView;
    QPushButton* m_pButton;

    QPushButton* m_pForwardButton;
    QPushButton* m_pNextButton;
    QPushButton* m_pFirstButton;
    QPushButton* m_pLastButton;

    QIntValidator* m_pValidator;
    QLabel* m_pGotoPageNumberLabel;
    QLineEdit* m_pGotoPageNumberLineEdit;
    QPushButton* m_pGotoPageNumberButton;

    QCheckBox *m_pRefreshCheckBox;
    QSpinBox* m_pTimerIntervalSpinBox;
    QLabel* m_pDownCounterLabel;
    QLabel* m_pPagesLabel;

    QVector<int> columnWidths;  // 存储初始列宽
private:
    TableData m_TotalTableData;
    TableData m_currentPageData;

    int m_totalPageCount;   //总页数
    int m_currentPage;      //当前页
    int m_totalRows;        //数据总行数
};

#endif // DEVICEPROPERTYPAGE_H